メインコンテンツまでスキップ

AWS Lambda (Python) のパッケージング方法

1. パッケージの作成

まずはLambdaにデプロイするためのデプロイパッケージを作っていきましょう。

Pythonのパッケージ管理ツールであるpoetryを使ってserverless-backend-application-stack-pythonに登録済みのライブラリをインストールします

[ec2-user ~]cd serverless-backend-application-stack-python/
[ec2-user ~]poetry install

カタログ AMI の中には、パッケージを自動で作ってくれる Shell Script ( build-app.shbuild-layer.sh )が含まれています。 実行すると、以下のようにデプロイ用の zip ファイルが生成されいます。

# Shell Script の実行
./build-app.sh
  • .dist/app/sample-api/app.zip
  • .dist/app/sample-event/event.zip

2. デプロイ用バケット作成

LambdaのソースコードパッケージをS3バケットにアップロードしてCloudFormationから参照できるようにするため、専用のバケットを作成します。

[ec2-user ~]ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)

[ec2-user ~]BUCKET_NAME="code-bucket-${ACCOUNT_ID}"

[ec2-user ~]aws s3api create-bucket \
--bucket $BUCKET_NAME \
--region us-east-1 \
--create-bucket-configuration LocationConstraint=<your region> #us-east-1以外に作成する場合はこのオプションを付けてください

3. デプロイパッケージとS3へのアップロード

作成済みのバケットにソースコードのパッケージをアップロードします

[ec2-user ~]aws s3 cp .dist/app/sample_api/api.zip s3://$BUCKET_NAME
[ec2-user ~]aws s3 cp .dist/app/sample_event/event.zip s3://$BUCKET_NAME

4. Lambda Layerの作成

使用するライブラリはLambda Layerにデプロイするため以下のスクリプトを実行してください。自動で Lambda Layer が作成されます。

# Shell Script の実行
./build-layer.sh

シェルスクリプトを実行するとARNレスポンスが2つ返ってきます。AWS CloudFormation のデプロイをお試しいただく場合は、以下のような LayerVersionArn の値を指定する必要があるため、メモしておいてください。

"LayerVersionArn": "arn:aws:lambda:us-east-1:<アカウントID>:layer:psycopg3-layer:1"

"LayerVersionArn": "aws:lambda:us-east-1:<アカウントID>:layer:python-lambda-application-template-lib-layer:1 "