1
1

More than 1 year has passed since last update.

Lambda でコンテナを実行する

Last updated at Posted at 2022-09-30

イメージを作成する

以下のドキュメントを参考に Dockerfile を作成します。

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

LAMBDA_TASK_ROOT を定義します。

export LAMBDA_TASK_ROOT=/var/task

CMD で指定している python スクリプトを作成します。トップレベルコードには引数が 2 つ必要です。

app.py
import boto3
import matplotlib
import numpy as np
import matplotlib.pyplot as plt

def draw_image():
    # グラフを作成し、/tmp ディレクトリに保存する
    x = np.arange(-5, 5, 0.1)
    y = np.sin(x)
    plt.plot(x, y)
    image_file = '/tmp/sin_curve.png'
    plt.savefig(image_file)

    # アップロード先バケット、アップロード先オブジェクト名を指定する
    bucket = 'python-lambda-bucket'
    object_name = 'sin_curve.png'

    # ファイルをアップロードする
    client = boto3.client('s3')
    client.upload_file(image_file, bucket, object_name)

def handler(event, lambda_context):
    # Dockerfile で CMD ["app.handler"] と記述しているので、ここがトップレベルコード
    draw_image()

上記の matplotlib を使用したグラフの作成方法は以下を参考にしました。

依存パッケージ用に requirements.txt を作成します。

requirements.txt
matplotlib

ECR にイメージをプッシュする

以下を実行します。

# ECR にログイン
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com
# ビルド
docker build -t python-lambda-image .
# タグ付け
docker tag python-lambda-image:latest ${ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/python-lambda-image:latest
# イメージプッシュ
docker push ${ACCOUNT_ID}.dkr.ecr.ap-northeast-1.amazonaws.com/python-lambda-image:latest

Lambda 関数を作成・実行する

関数のオプションはコンテナイメージを選択し、Lambda 関数を作成します。イメージをプッシュするごとに、以下の「新しいイメージをデプロイ」を行う必要があります。

1.png

作成後、「テスト」タブからテストを行い、指定した S3 バケットに画像ファイルが格納されることを確認します。

以下はテスト実行時のログになります。

image.png

テスト実行後、以下のようにバケットにオブジェクトが格納されます。

image.png

参考記事

1
1
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
1
1