Lambdaをコンテナイメージで起動してみた

AWS
AWS
この記事は約4分で読めます。

Lambda 関数はコンテナイメージをパッケージ化してデプロイできるため、やってみました。
以下ドキュメントの AWS ベースイメージからのイメージの作成を参考にしています。

Lambda のコンテナイメージを使用する - AWS Lambda
AWS により提供されたベースイメージまたは代替のベースイメージを使用して、Lambda 関数のコンテナイメージを作成します。

Dockerイメージの準備

まず、LambdaのハンドラーコードやDockerfileを格納するディレクトリを作成し、移動します。

mkdir app
cd app

app ディレクトリ以下に、ハンドラーコードである app.py を作成します。

import json

def handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

次に、Dockerfileを作成します。

FROM public.ecr.aws/lambda/python:3.9

# 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" ]

requirements.txt を作成します(ハンドラーコードではrequestを利用していないため、意味はありません)。

requests

Dokcerイメージを作成・起動し、コンテナイメージで実行されている関数を呼び出します。

docker build -t hello-world .
docker run -p 9000:8080 hello-world

新たにターミナルを起動し、以下を実行します。

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
{"statusCode": 200, "body": "\"Hello from Lambda!\""}%   

無事に関数が実行されていることがわかりました。

DockerイメージをECRにプッシュ

ECR に Docker CLI を認証します。

aws ecr get-login-password | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com   

次に、ECR リポジトリを作成します。

aws ecr create-repository --repository-name hello-world --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE

最後に、Dockerイメージを ECRにプッシュします。

docker tag hello-world:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world:latest
docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world:latest

Lambda関数を作成

コンテナイメージを選択し、Lambda関数を作成します。

テストを実行し、無事 Lambda 関数が実行されることを確認できました。

タイトルとURLをコピーしました