シリーズ目次
- AWS Lambda 関数を Docker コンテナを使ってビルド & デプロイ
- Fortran を AWS Lambda のCustom Runtime で実行する
概要
記事 第一回 コンテナ Lambda の”いろは”、AWS CLI でのデプロイに挑戦 ! を参考に
windows10 で AWS Lambda 関数を Docker コンテナを使ってビルド & デプロイ する方法を書きました
AWS Lambda 関数を Docker コンテナを使ってビルド & デプロイ するには以下の3ステップが必要です
1.Docker イメージを作成する
2.Docker イメージを Amazon ECR リポジトリ にプッシュする
3.Lambda関数に Amazon ECR リポジトリ(の Docker イメージ) から ビルドする
前提条件
Docker Desktop がインストールされていること
この記事は Windows10 上で Docker を用いて操作しています。
この記事の作業はローカル環境に Docker Desktop がインストールされていることを前提で進めます。インストールされていない場合は、インストールしてから進めてください。
Amazon CLI がインストールされていること
Amazon CLI
https://aws.amazon.com/jp/cli/
aws configure (初期化) が済んでいること
> aws configure
AWS Access Key ID [None]: ATI********CS
AWS Secret Access Key [None]: ***erg***sdfg***bs1sderg**
Default region name [None]: ap-northeast-1
Default output format [None]: json
実装
1.Docker イメージを作成する手順
手順1-1: 2つのテキストファイルを用意する
作業するフォルダを決めて
以下の2つのテキストファイルを作成しましょう
それぞれのファイルの中身は以下の通りとします。
import json
def handler(event, context):
return {
"statusCode": 200,
"body": json.dumps(
{
"message": "hello world",
}
),
}
FROM public.ecr.aws/lambda/python:3.8
COPY app.py ./
CMD ["app.handler"]
解説
FROM 命令で public.ecr.aws/lambda/python:3.8 と ECR の AWS 公式の公開イメージを指定していますが、amazon/aws-lambda-python:3.8 のように docker hub のイメージを参照することも可能です。
COPY コマンドでローカルに配置されている Lambda 関数本体である app.py ファイルをイメージにコピーしています。そして CMD で Lambda 関数のハンドラーを渡しています。
手順1-2: Dockerfile 元にビルド
Dockerfile を元にビルドしてみましょう。
コマンド docker build -t func1 .
を実行します。
> docker build -t func1 .
[+] Building 19.2s (7/7) FINISHED
=> [internal] load build definition from Dockerfile
・・・<中略>・・・
=> => extracting sha256:d79191d95889cb243767819f51824443759d257388bb5ef05babed549d31a2c4
=> [2/2] COPY app.py ./
=> exporting to image
=> => naming to docker.io/library/func1
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
ビルド成功しました
2.Docker イメージを Amazon ECR にプッシュする手順
手順2-1: Amazon ECR に今回作成する Lambda 関数のイメージ用のリポジトリを作成します。
さて、ここから Amazon ECR に今回作成する Lambda 関数のイメージ用のリポジトリを作成します。
Amazon ECR とは
Elastic Container Registry の略で
Dockerのコンテナイメージを保存しておくためのレジストリで、
Dockerコンテナイメージを保存・管理・デプロイが簡単に出来ます。
手順2-2: Docker に リポジトリの URI を含めたタグを付与します。
ECR 上にリポジトリが作成されたら、リポジトリの URI を含めたタグを付与します。
docker tag func1:latest ${ACCOUNTID}.dkr.ecr.${REGION}.amazonaws.com/func1:latest
Docker Desktop の Images に追加されます。
手順2-3:リポジトリに push する前に、ECR にログインします。
> aws ecr get-login-password | docker login --username AWS --password-stdin ${ACCOUNTID}.dkr.ecr.${REGION}.amazonaws.com
Login Succeeded
手順2-4:リポジトリに push
リポジトリに push しましょう。
PS> docker push ${ACCOUNTID}.dkr.ecr.${REGION}.amazonaws.com/func1:latest
The push refers to repository [${ACCOUNTID}.dkr.ecr.${REGION}.amazonaws.com/func1]
29fe8a4ae381: Pushed
20b4eff3dd4d: Pushing 68.11MB/92.13MB
11284767d41d: Pushing 87.48MB/199.7MB
d6fa53d6caa6: Pushed
b09e76f63d5d: Pushed
0acabcf564c7: Pushed
f2342b1247df: Pushing 125.9MB/294.9MB
latest: digest: sha256:123*************************************789
push が完了すると、ダイジェストが発行されるので、覚えておく
AWS コンソールで確認すると Docker イメージが Amaxon ECR リポジトリ にアップロードされたのが確認できる
3.Lambda関数に Amazon ECR リポジトリ(の Docker イメージ) から ビルドする手順
手順3-1: AWS Lambda ダッシュボードから 関数作成 ボタンをクリックする
手順3-2: コンテナイメージから作成
ここから、Lambda 関数をコンテナイメージを利用して作成していきますが、AWS Lambda のコンテナサポートで、—package-type を指定できるようになりました。
できました 今回の Lambda関数名 は, docker_test としました
手順3-3:作成された関数を実行確認
そしていよいよ実行することができます。作成された関数を実行してみましょう。
> aws lambda invoke --function-name docer_test output ; cat output
正常に返ってきました!!