LambdaのDockerコンテナイメージの導入
この記事は最終更新日から1年以上が経過しています。
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202021-12-06%2023.44.54.png?alt=media&token=e5f42f7e-fa2e-4d1c-b316-a4733b89291d)
Pythonで処理をするAPIを作成するにあたり、LambdaのDockerコンテナイメージを導入しましたので、個人メモとして書き起こしました。
AWS ベースイメージから Lambda用のイメージを作成していきます。
こちら(https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images-create.html#images-create-from-base)のファイルを参照しDockerfileを作成しました。
FROM public.ecr.aws/lambda/python:3.8
# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT}
# Install the function's dependencies using file requirements.txt
# from your project folder.
COPY requirements.txt .
RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"
# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.handler" ]
docker-compose派なのでdocker-compose.ymlも作成します。
version: '3'
services:
app:
container_name: あなたのコンテナ名
image: あなたのイメージ名
build:
context: .
dockerfile: Dockerfile
volumes:
- './:/app'
ports:
- '9000:8080'
./appフォルダを作成しapp.pyを作成します。
def handler(event, context):
return 'XXXXXXXXXXXXXX'
ではbuildします。
$ docker-compose build
エラーでした!
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202021-12-06%2021.38.35.png?alt=media&token=45b5ddfb-540c-4b8c-ae2a-0cff9aeec4c5)
requirements.txtを作成し忘れていました。
からのrequirements.txtを作成しもう一度
$ docker-compose build
build成功しました。
ではコンテナを立ち上げます。
$ docker-compose up
立ち上がったのでAPIを叩いてみます。
$ curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
!
無事でした!
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202021-12-06%2022.17.40.png?alt=media&token=26b74020-729a-42ca-9727-0443697ba572)
あっさりとAPIの開発環境ができてしまいました!
感謝です。
続いてイメージをAmazon ECRにデプロイをします。
Amazon ECR レジストリに対し、Docker CLI を認証します。
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin アカウントID.dkr.ecr.ap-northeast-1.amazonaws.com
regionはap-northeast-1にしました。
そして、create-repository
コマンドを使用して、Amazon ECR にリポジトリを作成します。
$ aws ecr create-repository --repository-name リポジトリ名 --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202021-12-06%2022.52.06.png?alt=media&token=ea8898cf-6b84-4207-9b5e-0d624036eefa)
無事に作成されていました!
続いて、リポジトリ名と一致するタグをイメージに付けます。
$ docker tag タグ名:latest アカウントID.dkr.ecr.ap-northeast-1.amazonaws.com/イメージ名:latest
では、Amazon ECR にデプロイします。
$ docker push アカウントID.dkr.ecr.ap-northeast-1.amazonaws.com/イメージ名:latest
![](https://firebasestorage.googleapis.com/v0/b/webdevelopers-1886f.appspot.com/o/images%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202021-12-06%2023.39.49.png?alt=media&token=714495cf-9bab-4475-999a-e26b00008501)
リファレンスに従いながら、APIの開発環境が構築できました。
ありがとうございます。Lambdaライフを楽しみます。
ここまでお読みいただきありがとうございました。