m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

Lambdaをコンテナイメージより作成

概要

Lambda を作成する際にコンテナイメージを使いたい

手順

1. 関数名を決める

dockerfunc01

※まだ作成はしない

2. ECR リポジトリを作成

dockerfunc01

3. 実行コードを作成(仮)

package.json

{
  "name": "dockerfunc01",
  "license": "MIT"
}

index.js

exports.handler = async (event) => {
  const result = {
    status: 200,
    message: "hello, world",
    data: event,
  };
  return result;
};

4. Dockerfile を用意

Dockerfile

FROM public.ecr.aws/lambda/nodejs:14
COPY index.js package.json  ${LAMBDA_TASK_ROOT}
CMD ["index.handler"]

5. docker build

docker build -t dockerfunc01 .

6. コンテナ起動

docker run --rm -p 9000:8080 dockerfunc01

7. 起動確認

curl -X POST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

8. ECR ログイン

aws ecr get-login-password --profile [プロフィール] --region [リージョン] | docker login --username AWS --password-stdin ${accountId}.dkr.ecr.${region}.amazonaws.com

9. タグ付け

docker tag dockerfunc01:latest ${accountId}.dkr.ecr.${region}.amazonaws.com/dockerfunc01:latest

10. ECR Push

docker push ${accountId}.dkr.ecr.${region}.amazonaws.com/dockerfunc01:latest

11. AWS コンソールで Lambda を作成し、Docker イメージを設定

12. テスト結果

コード修正

1. コードを修正する

index.js

exports.handler = async (event) => {
  const result = {
    status: 200,
    message: "hogehoge, foofoo",
    data: event,
  };
  return result;
};

2. ビルド、最デプロイ

docker build -t dockerfunc01 .

3. タグ付け

docker tag dockerfunc01:latest ${accountId}.dkr.ecr.${region}.amazonaws.com/dockerfunc01:latest

4. ECR Push

docker push ${accountId}.dkr.ecr.${region}.amazonaws.com/dockerfunc01:latest

5. イメージを差し替え

6. 再テスト

参考

コンテナ利用者に捧げる AWS Lambda の新しい開発方式 ! - 変化を求めるデベロッパーを応援するウェブマガジン | AWS

https://jpdebug.com/p/1463020

Lambda コンテナイメージの作成 - AWS Lambda

AWS Lambda の新機能 – コンテナイメージのサポート | Amazon Web Services ブログ

公式のdockerイメージ

https://gallery.ecr.aws/lambda/