コンテナイメージを使用したLambdaを作る必要があったので、pythonで簡単なHello worldを表示させるだけのLambdaの作り方をメモ。
0.作成手順
1.各ファイルの準備
2.ECRリポジトリの作成
3.ECRへイメージをプッシュ
4.Lambda関数の作成
5.Lambda関数のテスト
1.各ファイルの準備
Dockerfileとpython処理を記述したapp.pyを準備して同じディレクトリに置く。
app.pyにはHello worldを返すだけの処理を記述。
def handler(event, context):
return 'Hello world!'
Dockerfileはドキュメント:Lambda コンテナイメージの作成を参考に作成。
FROM public.ecr.aws/lambda/python:3.8
COPY app.py ${LAMBDA_TASK_ROOT}
# この例ではrequirements.txtは必要ないので下2行はコメントアウト
#COPY requirements.txt .
#RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"
CMD [ "app.handler" ]
2.ECRリポジトリの作成
AWSマネジメントコンソールでリポジトリを作成する。
リポジトリ名を入れるだけで作成可能。
この例ではリポジトリ名をhello-testで作成。
3.ECRへイメージをプッシュ
作成したECRリポジトリの画面>プッシュコマンドの表示ボタンから表示されるコマンドをコピーして実行すればOK。
(1) docker login(東京リージョンの例)
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin {AWSaccountID}.dkr.ecr.ap-northeast-1.amazonaws.com
(2) docker build
$ docker build -t hello-test .
(3) イメージにタグを付与
docker tag hello-test:latest {AWSaccountID}.dkr.ecr.ap-northeast-1.amazonaws.com/hello-test:latest
(4) ECRにイメージをプッシュ
docker push {AWSaccountID}.dkr.ecr.ap-northeast-1.amazonaws.com/hello-test:latest
※タグは後々のことを考えるとlatestから変えた方がよいかも。。。
4.Lambda関数の作成
マネジメントコンソールのLambda>関数>関数の作成で、コンテナイメージを選択。
関数名とコンテナイメージURIを入力して作成できる。
関数を作成すると、イメージ欄にイメージURIが表示される。