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
Lambda コンテナイメージの作成 - AWS Lambda
AWS Lambda の新機能 – コンテナイメージのサポート | Amazon Web Services ブログ