0
0

Lambdaをコンテナイメージとしてデプロイする方法

Last updated at Posted at 2024-08-28

従来のZIPファイルによるデプロイに代わり、Dockerイメージを使ってLambdaをデプロイする方法をメモ

ファイル

構成
.
├── Dockerfile
├── app.py
└── requirements.txt
Dockerfile
# ベースイメージとして公式のAWS Lambda Python 3.8ランタイムを使用
FROM --platform=linux/amd64 public.ecr.aws/lambda/python:3.8

# Lambda関数コードをコンテナにコピー
COPY app.py ${LAMBDA_TASK_ROOT}

# 必要なパッケージをインストール
COPY requirements.txt ./
RUN pip install -r requirements.txt

# Lambdaハンドラーを指定
CMD ["app.lambda_handler"]

※M1 Mac上でビルドする場合、FROMに「--platform=linux/amd64」を指定してあげないと、AWSコンソール上でLambdaが動かない。

app.py
import json

def lambda_handler(event, context):
    # クエリパラメータ "name" を取得
    name = event.get("queryStringParameters", {}).get("name", "World")

    # レスポンスを返す
    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": f"Hello, {name}!"
        })
    }

requirements.txt は空

デプロイ手順

Amazon ECR リポジトリ作成

Amazon ECR(Elastic Container Registry)は、Dockerイメージをホスティングするためのサービス。
まずはECRリポジトリ作成

aws ecr create-repository --repository-name your-lambda-repo

Dockerログイン

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin your-account-id.dkr.ecr.your-region.amazonaws.com

イメージのビルド

docker build -t my-lambda-image .

ECRリポジトリのURIにイメージをタグ付け

docker tag your-lambda-image:latest your-account-id.dkr.ecr.your-region.amazonaws.com/your-lambda-repo:latest

ECRにプッシュ

docker push your-account-id.dkr.ecr.your-region.amazonaws.com/your-lambda-repo:latest

これで、ECRにコンテナイメージがプッシュされる。

スクリーンショット 2024-08-28 9.36.37.png

Lambdaデプロイ

ECRのイメージを指定して、デプロイする。

aws lambda create-function \
  --function-name your-lambda-function \
  --package-type Image \
  --code ImageUri=your-account-id.dkr.ecr.your-region.amazonaws.com/your-lambda-repo:latest \
  --role arn:aws:iam::your-account-id:role/your-lambda-role
  • function-name: Lambda関数名
  • ImageUri: ECRにプッシュしたイメージのURI
  • role: Lambdaに必要なIAMロールのARN
    • Lambda用のロールを作成していないのであれば、IAMから作成
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0