

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Lambda 容器映像部署上啟用 Lambda Insights
<a name="Lambda-Insights-Getting-Started-docker"></a>

若要在部署為容器映像的 Lambda 函數上啟用 Lambda Insights，請在您的 Dockerfile 中新增行。這些行會將 Lambda Insights 代理程式安裝為容器映像中的延伸。x86-64 容器和 ARM64 容器要新增的行不同。

**注意**  
僅在使用 Amazon Linux 2 和 Amazon Linux 2023 的 Lambda 執行時期上支援 Lambda Insights 代理程式。

**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 取代為此 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. 輸入下列命令，將公有金鑰匯入至您的 keyring。

   ```
   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. 建立類似如下的 DDockerfile：

   ```
   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. 建立一個類似如下的名為 `index.py` 的 Python 檔案：

   ```
   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\$1aarch64 容器 (使用 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 取代為此 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. 輸入下列命令，將公有金鑰匯入至您的 keyring。

   ```
   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. 建立類似如下的 DDockerfile：

   ```
   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. 建立一個類似如下的名為 `index.py` 的 Python 檔案：

   ```
   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 政策指派給您的函數執行角色。