

# Lambda コンテナイメージをデプロイして Lambda Insights を有効化する
<a name="Lambda-Insights-Getting-Started-docker"></a>

Dockerfile に行を追加し、コンテナイメージとしてデプロイされた Lambda 関数で Lambda Insights を有効にします。これらの行により、コンテナイメージに対し、Lambda Insights エージェントが拡張機能としてインストールされます。追加する行は、x86-64 コンテナと ARM64 コンテナで異なります。

**注記**  
Lambda Insights エージェントは、Amazon Linux 2 および Amazon Linux 2023 を使用する Lambda ランタイムでのみサポートされます。

**Topics**
+ [x86-64 コンテナイメージのデプロイ](#Lambda-Insights-Getting-Started-docker-x86-64)
+ [ARM64 コンテナイメージのデプロイ](#Lambda-Insights-Getting-Started-docker-ARM64)

## x86-64 コンテナイメージのデプロイ
<a name="Lambda-Insights-Getting-Started-docker-x86-64"></a>

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 拡張機能の利用可能なバージョン](Lambda-Insights-extension-versions.md)」を参照してください。

**Linux サーバーで Lambda Insights エージェントパッケージの署名を確認するには**

1. 次のコマンドを入力して、公開キーをダウンロードします。

   ```
   shell$ wget https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/lambda-insights-extension.gpg
   ```

1. 次のコマンドを入力して、公開鍵をキーリングにインポートします。

   ```
   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)
   ```

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

   ```
   shell$  gpg --fingerprint key-value
   ```

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

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

   ```
   shell$  wget https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.rpm.sig
   ```

1. 次のコマンドを入力して、署名を確認します。

   ```
   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 の例
<a name="Lambda-Insights-Getting-Started-docker-example"></a>

このセクションでは、コンテナイメージベースの 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" ]
   ```

1. 次のような Python ファイルを、`index.py` という名前で作成します。

   ```
   def handler(event, context):
     return {
       'message': 'Hello World!'
     }
   ```

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

1. 先ほど作成した Amazon ECR イメージを使用して、Lambda 関数を作成します。

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

## ARM64 コンテナイメージのデプロイ
<a name="Lambda-Insights-Getting-Started-docker-ARM64"></a>

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 拡張機能の利用可能なバージョン](Lambda-Insights-extension-versions.md)」を参照してください。

**Linux サーバーで Lambda Insights エージェントパッケージの署名を確認するには**

1. 次のコマンドを入力して、公開キーをダウンロードします。

   ```
   shell$ wget https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/lambda-insights-extension.gpg
   ```

1. 次のコマンドを入力して、公開鍵をキーリングにインポートします。

   ```
   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)
   ```

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

   ```
   shell$  gpg --fingerprint key-value
   ```

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

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

   ```
   shell$  wget https://lambda-insights-extension-arm64.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension-arm64.rpm.sig
   ```

1. 次のコマンドを入力して、署名を確認します。

   ```
   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 の例
<a name="Lambda-Insights-Getting-Started-docker-example-ARM64"></a>

このセクションでは、コンテナイメージベースの 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" ]
   ```

1. 次のような Python ファイルを、`index.py` という名前で作成します。

   ```
   def handler(event, context):
     return {
       'message': 'Hello World!'
     }
   ```

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

1. 先ほど作成した Amazon ECR イメージを使用して、Lambda 関数を作成します。

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