Lambda コンテナイメージをデプロイして Lambda Insights を有効化する - Amazon CloudWatch

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 エージェントパッケージの署名を確認するには
  1. 次のコマンドを入力して、公開キーをダウンロードします。

    shell$ wget https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/lambda-insights-extension.gpg
  2. 次のコマンドを入力して、公開鍵をキーリングにインポートします。

    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)
  3. 次のコマンドを入力して、フィンガープリントを検証します。key-value の部分は、前の手順で記録したキーの値に置き換えます。

    shell$ gpg --fingerprint key-value

    このコマンドの出力では、フィンガープリント文字列は E0AF FA11 FFF3 5BD7 349E E222 479C 97A1 848A BDC8 のようになります。フィンガープリント文字列が一致しない場合は、エージェントのインストールを中止し、AWS にお問い合わせください。

  4. フィンガープリントが確認できたら、それを使用して、Lambda Insights のエージェントパッケージを確認できます。次のコマンドを入力して、パッケージの署名ファイルをダウンロードします。

    shell$ wget https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.rpm.sig
  5. 次のコマンドを入力して、署名を確認します。

    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 を有効にする例
  1. 次のような 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" ]
  2. 次のような Python ファイルを、index.py という名前で作成します。

    def handler(event, context): return { 'message': 'Hello World!' }
  3. 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
  4. 先ほど作成した Amazon ECR イメージを使用して、Lambda 関数を作成します。

  5. 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 エージェントパッケージの署名を確認するには
  1. 次のコマンドを入力して、公開キーをダウンロードします。

    shell$ wget https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/lambda-insights-extension.gpg
  2. 次のコマンドを入力して、公開鍵をキーリングにインポートします。

    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)
  3. 次のコマンドを入力して、フィンガープリントを検証します。key-value の部分は、前の手順で記録したキーの値に置き換えます。

    shell$ gpg --fingerprint key-value

    このコマンドの出力では、フィンガープリント文字列は E0AF FA11 FFF3 5BD7 349E E222 479C 97A1 848A BDC8 のようになります。フィンガープリント文字列が一致しない場合は、エージェントのインストールを中止し、AWS にお問い合わせください。

  4. フィンガープリントが確認できたら、それを使用して、Lambda Insights のエージェントパッケージを確認できます。次のコマンドを入力して、パッケージの署名ファイルをダウンロードします。

    shell$ wget https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension-arm64.rpm.sig
  5. 次のコマンドを入力して、署名を確認します。

    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 を有効にする例
  1. 次のような 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" ]
  2. 次のような Python ファイルを、index.py という名前で作成します。

    def handler(event, context): return { 'message': 'Hello World!' }
  3. 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
  4. 先ほど作成した Amazon ECR イメージを使用して、Lambda 関数を作成します。

  5. CloudWatchLambdaInsightsExecutionRolePolicy IAM ポリシーを、関数の実行ロールに割り当てます。