Lambda コンテナイメージをデプロイして Lambda Insights を有効化する
Dockerfile に行を追加し、コンテナイメージとしてデプロイされた Lambda 関数で Lambda Insights を有効にします。これらの行により、コンテナイメージに対し、Lambda Insights エージェントが拡張機能としてインストールされます。追加する行は、x86-64 コンテナと ARM64 コンテナで異なります。
注記
Lambda Insights エージェントは、Amazon Linux 2 を使用する Lambda ランタイムでのみサポートされます。
x86-64 コンテナイメージのデプロイ
x86-64 コンテナ上で実行されるコンテナイメージとしてデプロイされた Lambda 関数で Lambda Insights を有効にするには、Dockerfile に次の行を追加します。これらの行により、コンテナイメージに対し、Lambda Insights エージェントが拡張機能としてインストールされます。
RUN curl -O https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.rpm && \ rpm -U lambda-insights-extension.rpm && \ rm -f lambda-insights-extension.rpm
Lambda 関数の作成後、CloudWatchLambdaInsightsExecutionRolePolicy IAM ポリシーを関数の実行ロールに割り当てると、コンテナイメージベースの Lambda 関数で Lambda Insights が有効化されます。
注記
Lambda Insights の拡張機能の古いバージョンを使用するには、前出のコマンドの URL を https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.1.0.111.0.rpm
に置き換えます。現時点では、Lambda Insights のバージョン 1.0.111.0 以降のみが利用可能です。詳細については、「Lambda Insights 拡張機能の利用可能なバージョン」を参照してください。
Linux サーバーで Lambda Insights エージェントパッケージの署名を確認するには
次のコマンドを入力して、公開キーをダウンロードします。
shell$
wget https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/lambda-insights-extension.gpg次のコマンドを入力して、公開鍵をキーリングにインポートします。
shell$
gpg --import lambda-insights-extension.gpg出力は以下のようになります。次のステップで必要になるため、
key
値を書きとめておきます。この出力例では、キー値は848ABDC8
です。gpg: key 848ABDC8: public key "Amazon Lambda Insights Extension" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
次のコマンドを入力して、フィンガープリントを検証します。
key-value
の部分は、前の手順で記録したキーの値に置き換えます。shell$
gpg --fingerprint key-valueこのコマンドの出力では、フィンガープリント文字列は
E0AF FA11 FFF3 5BD7 349E E222 479C 97A1 848A BDC8
のようになります。フィンガープリント文字列が一致しない場合は、エージェントのインストールを中止し、AWS にお問い合わせください。フィンガープリントが確認できたら、それを使用して、Lambda Insights のエージェントパッケージを確認できます。次のコマンドを入力して、パッケージの署名ファイルをダウンロードします。
shell$
wget https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.rpm.sig次のコマンドを入力して、署名を確認します。
shell$
gpg --verify lambda-insights-extension.rpm.sig lambda-insights-extension.rpm出力は次のようになります。
gpg: Signature made Thu 08 Apr 2021 06:41:00 PM UTC using RSA key ID 848ABDC8 gpg: Good signature from "Amazon Lambda Insights Extension" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: E0AF FA11 FFF3 5BD7 349E E222 479C 97A1 848A BDC8
このときの出力には、信頼された署名に関する警告が表示される場合があります。キーは、自分や信頼する人が署名した場合にのみ信頼できます。つまり、署名が無効であるわけではなく、パブリックキーを確認していないことになります。
出力に
BAD signature
が含まれている場合は、ここまでの手順を正しく実行したかどうかを確認します。このBAD signature
レスポンスが引き続き出力される場合は、AWS に連絡の上、ダウンロードしたファイルの使用は中止してください。
x86-64 の例
このセクションでは、コンテナイメージベースの Python Lambda 関数で Lambda Insights を有効にする例を示します。
Lambda コンテナイメージで Lambda Insights を有効にする例
次のような Dockerfile を作成します。
FROM public.ecr.aws/lambda/python:3.8 // extra lines to install the agent here RUN curl -O https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.rpm && \ rpm -U lambda-insights-extension.rpm && \ rm -f lambda-insights-extension.rpm COPY index.py ${LAMBDA_TASK_ROOT} CMD [ "index.handler" ]
次のような Python ファイルを、
index.py
という名前で作成します。def handler(event, context): return { 'message': 'Hello World!' }
Dockerfile と
index.py
を同じディレクトリに保存します。次に、保存先のディレクトリで次の手順を実行して Docker イメージをビルドし、それを Amazon ECR にアップロードします。// create an ECR repository aws ecr create-repository --repository-name test-repository // build the docker image docker build -t test-image . // sign in to AWS aws ecr get-login-password | docker login --username AWS --password-stdin "${
ACCOUNT_ID
}".dkr.ecr."${REGION
}".amazonaws.com // tag the image docker tag test-image:latest "${ACCOUNT_ID
}".dkr.ecr."${REGION
}".amazonaws.com/test-repository:latest // push the image to ECR docker push "${ACCOUNT_ID
}".dkr.ecr."${REGION
}".amazonaws.com/test-repository:latest先ほど作成した Amazon ECR イメージを使用して、Lambda 関数を作成します。
CloudWatchLambdaInsightsExecutionRolePolicy IAM ポリシーを、関数の実行ロールに割り当てます。
ARM64 コンテナイメージのデプロイ
AL2_aarch64 コンテナ (ARM64 アーキテクチャを使用) 上で実行されるコンテナイメージとしてデプロイされた Lambda 関数で Lambda Insights を有効にするには、Dockerfile に次の行を追加します。これらの行により、コンテナイメージに対し、Lambda Insights エージェントが拡張機能としてインストールされます。
RUN curl -O https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension-arm64.rpm && \ rpm -U lambda-insights-extension-arm64.rpm && \ rm -f lambda-insights-extension-arm64.rpm
Lambda 関数の作成後、CloudWatchLambdaInsightsExecutionRolePolicy IAM ポリシーを関数の実行ロールに割り当てると、コンテナイメージベースの Lambda 関数で Lambda Insights が有効化されます。
注記
Lambda Insights の拡張機能の古いバージョンを使用するには、前出のコマンドの URL を https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension-arm64.1.0.229.0.rpm
に置き換えます。現時点では、Lambda Insights のバージョン 1.0.229.0 以降のみが利用可能です。詳細については、「Lambda Insights 拡張機能の利用可能なバージョン」を参照してください。
Linux サーバーで Lambda Insights エージェントパッケージの署名を確認するには
次のコマンドを入力して、公開キーをダウンロードします。
shell$
wget https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/lambda-insights-extension.gpg次のコマンドを入力して、公開鍵をキーリングにインポートします。
shell$
gpg --import lambda-insights-extension.gpg出力は以下のようになります。次のステップで必要になるため、
key
値を書きとめておきます。この出力例では、キー値は848ABDC8
です。gpg: key 848ABDC8: public key "Amazon Lambda Insights Extension" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
次のコマンドを入力して、フィンガープリントを検証します。
key-value
の部分は、前の手順で記録したキーの値に置き換えます。shell$
gpg --fingerprint key-valueこのコマンドの出力では、フィンガープリント文字列は
E0AF FA11 FFF3 5BD7 349E E222 479C 97A1 848A BDC8
のようになります。フィンガープリント文字列が一致しない場合は、エージェントのインストールを中止し、AWS にお問い合わせください。フィンガープリントが確認できたら、それを使用して、Lambda Insights のエージェントパッケージを確認できます。次のコマンドを入力して、パッケージの署名ファイルをダウンロードします。
shell$
wget https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension-arm64.rpm.sig次のコマンドを入力して、署名を確認します。
shell$
gpg --verify lambda-insights-extension-arm64.rpm.sig lambda-insights-extension-arm64.rpm出力は次のようになります。
gpg: Signature made Thu 08 Apr 2021 06:41:00 PM UTC using RSA key ID 848ABDC8 gpg: Good signature from "Amazon Lambda Insights Extension" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: E0AF FA11 FFF3 5BD7 349E E222 479C 97A1 848A BDC8
このときの出力には、信頼された署名に関する警告が表示される場合があります。キーは、自分や信頼する人が署名した場合にのみ信頼できます。つまり、署名が無効であるわけではなく、パブリックキーを確認していないことになります。
出力に
BAD signature
が含まれている場合は、ここまでの手順を正しく実行したかどうかを確認します。このBAD signature
レスポンスが引き続き出力される場合は、AWS に連絡の上、ダウンロードしたファイルの使用は中止してください。
ARM64 の例
このセクションでは、コンテナイメージベースの Python Lambda 関数で Lambda Insights を有効にする例を示します。
Lambda コンテナイメージで Lambda Insights を有効にする例
次のような Dockerfile を作成します。
FROM public.ecr.aws/lambda/python:3.8 // extra lines to install the agent here RUN curl -O https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension-arm64.rpm && \ rpm -U lambda-insights-extension-arm64.rpm && \ rm -f lambda-insights-extension-arm64.rpm COPY index.py ${LAMBDA_TASK_ROOT} CMD [ "index.handler" ]
次のような Python ファイルを、
index.py
という名前で作成します。def handler(event, context): return { 'message': 'Hello World!' }
Dockerfile と
index.py
を同じディレクトリに保存します。次に、保存先のディレクトリで次の手順を実行して Docker イメージをビルドし、それを Amazon ECR にアップロードします。// create an ECR repository aws ecr create-repository --repository-name test-repository // build the docker image docker build -t test-image . // sign in to AWS aws ecr get-login-password | docker login --username AWS --password-stdin "${ACCOUNT_ID}".dkr.ecr."${REGION}".amazonaws.com // tag the image docker tag test-image:latest "${ACCOUNT_ID}".dkr.ecr."${REGION}".amazonaws.com/test-repository:latest // push the image to ECR docker push "${ACCOUNT_ID}".dkr.ecr."${REGION}".amazonaws.com/test-repository:latest
先ほど作成した Amazon ECR イメージを使用して、Lambda 関数を作成します。
CloudWatchLambdaInsightsExecutionRolePolicy IAM ポリシーを、関数の実行ロールに割り当てます。