

# Lambda 컨테이너 이미지 배포에서 Lambda Insights 활성화
<a name="Lambda-Insights-Getting-Started-docker"></a>

컨테이너 이미지로 배포된 Lambda 함수에서 Lambda Insights를 사용하도록 설정하려면 Dockerfile에 줄을 추가하세요. 이 줄은 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 Insights가 컨테이너 이미지 기반 Lambda 함수에서 사용하도록 설정됩니다.

**참고**  
이전 버전의 Lambda Insights 익스텐션을 사용하려면 위 명령의 URL을 `https://lambda-insights-extension.s3-ap-northeast-1.amazonaws.com/amazon_linux/lambda-insights-extension.1.0.111.0.rpm` URL로 바꿉니다. 자세한 내용은 [사용 가능한 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. 다음과 유사한 `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 Insights가 컨테이너 이미지 기반 Lambda 함수에서 사용하도록 설정됩니다.

**참고**  
이전 버전의 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` URL로 바꿉니다. 자세한 내용은 [사용 가능한 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. 다음과 유사한 `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 정책을 함수의 실행 역할에 할당합니다.