依存関係を持つ AWS Lambda コンテナイメージを作成したい。どうすればよいですか?
解決方法
Lambda コンテナイメージを作成する IAM ユーザーまたはロールにアクセス権が設定されていることを確認します。次に、以下の手順に従って Docker を使用してコンテナイメージを展開します。
1. Get Docker ウェブページにアクセスしてください。要件を満たす Docker Desktop アプリケーションを選択してください。表示される指示に従って Docker Desktop をインストールします。
注:Docker はサードパーティーの Web サイトです。
2. ローカルマシンで、Dockerfile、ライブラリを含む requirements.txt、およびインポートステートメントを含む app.py の 3 つのファイルを含むフォルダーを 1 つ作成します。注:Amazon Elastic Container Registry (Amazon ECR) パブリックレジストリには、最新バージョンの Python を使用してください。
この例の Dockerfile は Python 3.8 を使用しています。
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" ]
この app.py ファイルの例には、インポートステートメントの例が含まれています。
import sys
def handler(event, context):
return 'Hello from AWS Lambda using Python' + sys.version + '!'
3. docker build コマンドとイメージ名を使用してDocker イメージをビルドします
これは「hello-world」の例を含むdocker buildコマンドです。
docker build -t hello-world .
4. docker run コマンドで Docker イメージを起動します。
これは「hello-world」の例を含むdocker run コマンドです。
docker run -p 9000:8080 hello-world
5. Lambda ランタイムインターフェイスエミュレーター (RIE) を使用してアプリケーションをテストします。新しいターミナルウィンドウから、curl コマンドを使用して次のエンドポイントにイベントをポストします。
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
このコマンドは、コンテナイメージで実行されている関数を呼び出し、応答を返します。
6. Docker CLI を Amazon ECR レジストリに認証します。コマンドのアカウント ID と AWS リージョンを変更して、要件を満たしていることを確認します。
これは、Amazon ECR レジストリに対して Docker CLI を認証する例です。
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
7. create-repository コマンドを使用して Amazon ECR にリポジトリを作成します。
これはリポジトリ作成 コマンドの例です。
aws ecr create-repository --repository-name hello-world --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
8. docker tag コマンドを使用して、リポジトリ名と一致するようにイメージにタグ付けします。次に、docker push コマンドを使用してイメージを Amazon ECR に展開します。
これらのコマンドでアカウント ID と AWS リージョンを変更して、要件が満たされていることを確認します。
これはdocker tag コマンドの例です。
docker tag hello-world:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
これはdocker push コマンドの例です。
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
9. Amazon ECR コンテナレジストリ内のコンテナイメージを使用して、Lambda 関数を作成して実行します。詳細については、「関数の作成」 を参照してください。