

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS Lambda 컴퓨팅 기반 빌드 실행
<a name="lambda"></a>

AWS Lambda 컴퓨팅은 빌드에 최적화된 시작 속도를 제공합니다.는 시작 지연 시간이 짧아 더 빠른 빌드를 AWS Lambda 지원합니다. AWS Lambda 또한는 자동으로 확장되므로 빌드가 실행 대기열에서 대기하지 않습니다. 그러나에서 지원하지 AWS Lambda 않는 몇 가지 사용 사례가 있으며, 이러한 사용 사례가 사용자에게 영향을 미치는 경우 EC2 컴퓨팅을 사용합니다. 자세한 내용은 [AWS Lambda 컴퓨팅 제한 사항](#lambda.limitations) 단원을 참조하십시오.

**Topics**
+ [AWS Lambda에서 실행되는 큐레이팅된 런타임 환경 도커 이미지에는 어떤 도구와 런타임이 포함되나요?](#lambda.tools)
+ [큐레이팅된 이미지에 필요한 도구가 포함되어 있지 않으면 어떻게 해야 하나요?](#lambda.custom)
+ [CodeBuild에서 AWS Lambda 컴퓨팅을 지원하는 리전은 어디입니까?](#lambda.regions)
+ [AWS Lambda 컴퓨팅 제한 사항](#lambda.limitations)
+ [CodeBuild Lambda Java와 AWS SAM 함께를 사용하여 Lambda 함수 배포](sample-lambda-sam-gradle.md)
+ [CodeBuild Lambda Node.js를 사용하여 단일 페이지 React 앱 생성](sample-lambda-react-nodejs.md)
+ [CodeBuild Lambda Python으로 Lambda 함수 구성 업데이트](sample-lambda-boto3-python.md)

## AWS Lambda에서 실행되는 큐레이팅된 런타임 환경 도커 이미지에는 어떤 도구와 런타임이 포함되나요?
<a name="lambda.tools"></a>

AWS Lambda 는 AWS CLI v2, AWS SAM CLI, git, go, Java, Node.js, Python, pip, Ruby 및 .NET 도구를 지원합니다.

## 큐레이팅된 이미지에 필요한 도구가 포함되어 있지 않으면 어떻게 해야 하나요?
<a name="lambda.custom"></a>

큐레이팅된 이미지에 필요한 도구가 포함되어 있지 않은 경우 필요한 도구가 포함된 사용자 지정 환경 Docker 이미지를 제공할 수 있습니다.

**참고**  
Lambda는 다중 아키텍처 컨테이너 이미지를 사용하는 함수를 지원하지 않습니다. 자세한 내용은 *AWS Lambda 개발자 안내서*의 [컨테이너 이미지를 사용하여 Lambda 함수 생성](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html#images-reqs)을 참조하세요.

Lambda 컴퓨팅에 사용자 지정 이미지를 사용하려면 다음 Amazon ECR 권한이 필요합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage"
            ],
            "Resource": "arn:aws:ecr:us-east-1:111122223333:repository/image-repo"
        }
    ]
}
```

------

또한 사용자 지정 이미지를 사용하려면 `curl` 또는 `wget`을 설치해야 합니다.

## CodeBuild에서 AWS Lambda 컴퓨팅을 지원하는 리전은 어디입니까?
<a name="lambda.regions"></a>

CodeBuild에서 AWS Lambda 컴퓨팅은 AWS 리전미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오레곤), 아시아 태평양(뭄바이), 아시아 태평양(싱가포르), 아시아 태평양(시드니), 아시아 태평양(도쿄), 유럽(프랑크푸르트), 유럽(아일랜드), 남아메리카(상파울루)에서 지원됩니다. CodeBuild가 사용 가능한 AWS 리전 에 대한 자세한 내용은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)를 참조하세요.

## AWS Lambda 컴퓨팅 제한 사항
<a name="lambda.limitations"></a>

에서 지원하지 AWS Lambda 않는 몇 가지 사용 사례가 있으며, 이러한 사용 사례가 사용자에게 영향을 미치는 경우 EC2 컴퓨팅을 사용합니다.
+ AWS Lambda 는 루트 권한이 필요한 도구를 지원하지 않습니다. `yum` 또는 `rpm` 등의 도구에는 EC2 컴퓨팅 유형이나 루트 권한이 필요하지 않은 기타 도구를 사용하세요.
+ AWS Lambda 는 Docker 빌드 또는 실행을 지원하지 않습니다.
+ AWS Lambda 는 외부 파일에 쓰기를 지원하지 않습니다`/tmp`. 포함된 패키지 관리자는 기본적으로 이 `/tmp` 디렉터리를 사용하여 패키지를 다운로드하고 참조하도록 구성되어 있습니다.
+ AWS Lambda 는 환경 유형을 지원하지 `LINUX_GPU_CONTAINER` 않으며 Windows Server Core 2019에서 지원되지 않습니다.
+ AWS Lambda 는 캐싱, 사용자 지정 빌드 제한 시간, 대기열 제한 시간, 빌드 배지, 권한 모드, 사용자 지정 런타임 환경 또는 15분보다 긴 런타임을 지원하지 않습니다.
+ AWS Lambda 는 VPC 연결, 고정된 범위의 CodeBuild 소스 IP 주소, EFS, 인증서 설치 또는 Session Manager를 사용한 SSH 액세스를 지원하지 않습니다.

# CodeBuild Lambda Java와 AWS SAM 함께를 사용하여 Lambda 함수 배포
<a name="sample-lambda-sam-gradle"></a>

 AWS Serverless Application Model (AWS SAM)는 서버리스 애플리케이션을 빌드하기 위한 오픈 소스 프레임워크입니다. 자세한 내용은 GitHub의 [AWS Serverless Application Model 리포지토리](https://github.com/aws/serverless-application-model)를 참조하십시오. 다음 Java 샘플은 Gradle을 사용하여 AWS Lambda 함수를 빌드하고 테스트합니다. 그런 다음 AWS SAM CLI를 사용하여 CloudFormation 템플릿과 배포 번들을 배포합니다. CodeBuild Lambda를 사용하면 빌드, 테스트 및 배포 단계가 모두 자동으로 처리되므로 단일 빌드에서 수동 개입 없이 인프라를 빠르게 업데이트할 수 있습니다.

## AWS SAM 리포지토리 설정
<a name="sample-lambda-sam-gradle.set-up-repo"></a>

 AWS SAM CLI를 AWS SAM `Hello World` 사용하여 프로젝트를 생성합니다.

**AWS SAM 프로젝트를 생성하려면**

1. 로컬 시스템에 [AWS SAM CLI를 설치](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html)하기 위한 *AWS Serverless Application Model 개발자 안내서*의 지침을 따릅니다.

1. `sam init`을 실행하고 다음 프로젝트 구성을 선택합니다.

   ```
   Which template source would you like to use?: 1 - AWS Quick Start Templates
   Choose an AWS Quick Start application template: 1 - Hello World Example
   Use the most popular runtime and package type? (Python and zip) [y/N]: N
   Which runtime would you like to use?: 8 - java21
   What package type would you like to use?: 1 - Zip
   Which dependency manager would you like to use?: 1 - gradle
   Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: N
   Would you like to enable monitoring using CloudWatch Application Insights? [y/N]: N
   Would you like to set Structured Logging in JSON format on your Lambda functions? [y/N]:  N
   Project name [sam-app]: <insert project name>
   ```

1.  AWS SAM 프로젝트 폴더를 지원되는 소스 리포지토리에 업로드합니다. 지원되는 소스 유형 목록은 [ProjectSource](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectSource.html)를 참조하세요.

## CodeBuild Lambda Java 프로젝트 생성
<a name="sample-lambda-sam-gradle.create-project"></a>

 AWS CodeBuild Lambda Java 프로젝트를 생성하고 빌드에 필요한 IAM 권한을 설정합니다.

**CodeBuild Lambda Java 프로젝트를 생성하려면**

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1.  CodeBuild 정보 페이지가 나타나면 **빌드 프로젝트 생성**을 선택합니다. 그렇지 않을 경우, 탐색 창에서 **빌드**를 확장한 후 **빌드 프로젝트**를 선택하고 **빌드 프로젝트 생성**을 선택합니다.

1. **프로젝트 이름**에 이 빌드 프로젝트의 이름을 입력합니다. 빌드 프로젝트 이름은 각 AWS 계정에서 고유해야 합니다. 또한 선택에 따라 빌드 프로젝트에 대한 설명을 포함하여 다른 사용자가 이 프로젝트의 용도를 이해하도록 도울 수 있습니다.

1. **소스**에서 AWS SAM 프로젝트가 위치한 소스 리포지토리를 선택합니다.

1. **환경**에서 다음과 같이 합니다.
   + **컴퓨팅**에서 **Lambda**를 선택합니다.
   + **런타임**에서 **Java**를 선택합니다.
   + **이미지**에서 **aws/codebuild/amazonlinux-x86\$164-lambda-standard:corretto21**을 선택합니다.
   + **서비스 역할**의 경우 **새 서비스 역할**을 선택한 상태로 둡니다. **역할 이름**을 기록해 둡니다. 이는 이 샘플의 뒷부분에서 프로젝트의 IAM 권한을 업데이트할 때 필요합니다.

1. **빌드 프로젝트 생성**을 선택합니다.

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 **역할**을 선택하고 프로젝트와 연결된 서비스 역할을 선택합니다. 빌드 프로젝트를 선택하고 **편집**, **환경**, **서비스 역할**을 선택하여 CodeBuild에서 프로젝트 역할을 찾을 수 있습니다.

1. **신뢰 관계** 탭을 선택한 후 **신뢰 정책 편집**을 선택합니다.

1. 다음 인라인 정책을 IAM 역할에 추가합니다. 이는 나중에 AWS SAM 인프라를 배포하는 데 사용됩니다. 자세한 내용은 * IAM 사용 설명서*의 [IAM 자격 증명 권한 추가 및 제거](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_manage-attach-detach.html)를 참조하세요.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Action": [
                   "cloudformation:*",
                   "lambda:*",
                   "iam:*",
                   "apigateway:*",
                   "s3:*"
               ],
               "Resource": "arn:aws:iam::*:role/Service*"
           }
       ]
   }
   ```

------

## 프로젝트 buildspec 설정
<a name="sample-lambda-sam-gradle.set-up-buildspec"></a>

Lambda 함수를 빌드, 테스트 및 배포하기 위해 CodeBuild는 buildspec에서 빌드 명령을 읽고 실행합니다.

**프로젝트 buildspec을 설정하려면**

1. CodeBuild 콘솔에서 빌드 프로젝트를 선택한 다음 **편집** 및 **Buildspec**을 선택합니다.

1. **Buildspec**에서 **빌드 명령 삽입**을 선택한 후 **편집기로 전환**을 선택합니다.

1. 사전 채워진 빌드 명령을 삭제하고 다음 buildspec에 붙여넣습니다.

   ```
   version: 0.2
   env:
     variables:
       GRADLE_DIR: "HelloWorldFunction"
   phases:
     build:
       commands:
         - echo "Running unit tests..."
         - cd $GRADLE_DIR; gradle test; cd ..
         - echo "Running build..."
         - sam build --template-file template.yaml
         - echo "Running deploy..."
         - sam package --output-template-file packaged.yaml --resolve-s3 --template-file template.yaml
         - yes | sam deploy
   ```

1. **Update buildspec(buildspec 업데이트)**을 선택합니다.

## AWS SAM Lambda 인프라 배포
<a name="sample-lambda-sam-gradle.deploy"></a>

CodeBuild Lambda를 사용하여 Lambda 인프라 자동 배포

**Lambda 인프라를 배포하려면**

1. **빌드 시작**를 선택합니다. 이렇게 하면를 AWS Lambda 사용하여 AWS SAM 애플리케이션을 자동으로 빌드, 테스트 및 배포할 수 있습니다 CloudFormation.

1. 빌드가 완료되면 AWS Lambda 콘솔로 이동하여 AWS SAM 프로젝트 이름에서 새 Lambda 함수를 검색합니다.

1. **함수** 개요에서 **API Gateway**를 선택한 다음 **API 엔드포인트** URL을 클릭하여 Lambda 함수를 테스트합니다. `"message": "hello world"` 메시지가 포함된 페이지가 열려 있어야 합니다.

## 인프라 정리
<a name="sample-lambda-sam-gradle.clean-up"></a>

이 자습서에서 사용한 리소스에 대한 추가 요금이 부과되지 않도록 AWS SAM 템플릿 및 CodeBuild에서 생성한 리소스를 삭제합니다.

**인프라를 정리하려면**

1.  CloudFormation 콘솔로 이동하여를 선택합니다`aws-sam-cli-managed-default`.

1. **리소스**에서 배포 버킷 `SamCliSourceBucket`을 비웁니다.

1. `aws-sam-cli-managed-default` 스택을 삭제합니다.

1.  AWS SAM 프로젝트와 연결된 CloudFormation 스택을 삭제합니다. 이 스택의 이름은 AWS SAM 프로젝트와 동일해야 합니다.

1. CloudWatch 콘솔로 이동하여 CodeBuild 프로젝트와 연결된 CloudWatch 로그 그룹을 삭제합니다.

1. CodeBuild 콘솔로 이동하여 **빌드 프로젝트 삭제**를 선택하여 CodeBuild 프로젝트를 삭제합니다.

# CodeBuild Lambda Node.js를 사용하여 단일 페이지 React 앱 생성
<a name="sample-lambda-react-nodejs"></a>

[React 앱 생성](https://create-react-app.dev/)은 단일 페이지 React 애플리케이션을 생성하는 방법입니다. 다음 Node.js 샘플은 Node.js를 사용하여 React 앱 생성에서 소스 아티팩트를 빌드하고 빌드 아티팩트를 반환합니다.

## 소스 리포지토리 및 아티팩트 버킷 설정
<a name="sample-lambda-react-nodejs.set-up-repo"></a>

Yarn 및 React 앱 생성을 사용하여 프로젝트의 소스 리포지토리를 생성합니다.

**소스 리포지토리 및 아티팩트 버킷을 설정하려면**

1. 로컬 시스템에서 `yarn create react-app <app-name>`을 실행하여 간단한 React 앱을 생성합니다.

1. React 앱 프로젝트 폴더를 지원되는 소스 리포지토리에 업로드합니다. 지원되는 소스 유형 목록은 [ProjectSource](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectSource.html)를 참조하세요.

## CodeBuild Lambda Node.js 프로젝트 생성
<a name="sample-lambda-react-nodejs.create-project"></a>

 AWS CodeBuild Lambda Node.js 프로젝트를 생성합니다.

**CodeBuild Lambda Node.js 프로젝트를 생성하려면**

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home)://에서 AWS CodeBuild 콘솔을 엽니다.

1.  CodeBuild 정보 페이지가 나타나면 **빌드 프로젝트 생성**을 선택합니다. 그렇지 않을 경우, 탐색 창에서 **빌드**를 확장한 후 **빌드 프로젝트**를 선택하고 **빌드 프로젝트 생성**을 선택합니다.

1. **프로젝트 이름**에 이 빌드 프로젝트의 이름을 입력합니다. 빌드 프로젝트 이름은 각 AWS 계정에서 고유해야 합니다. 또한 선택에 따라 빌드 프로젝트에 대한 설명을 포함하여 다른 사용자가 이 프로젝트의 용도를 이해하도록 도울 수 있습니다.

1. **소스**에서 AWS SAM 프로젝트가 위치한 소스 리포지토리를 선택합니다.

1. **환경**에서 다음과 같이 합니다.
   + **컴퓨팅**에서 **Lambda**를 선택합니다.
   + **런타임**에서 **Node.js**를 선택합니다.
   + **이미지**에서 **aws/codebuild/amazonlinux-x86\$164-lambda-standard:nodejs20**을 선택합니다.

1. **결과물**에서 다음과 같이 합니다.
   + **유형**에서 **Amazon S3**를 선택합니다.
   + **버킷 이름**에서 이전에 생성한 프로젝트 아티팩트 버킷을 선택합니다.
   + **아티팩트 패키징**에서 **Zip**을 선택합니다.

1. **빌드 프로젝트 생성**을 선택합니다.

## 프로젝트 buildspec 설정
<a name="sample-lambda-react-nodejs.set-up-buildspec"></a>

CodeBuild는 React 앱을 빌드하기 위해 buildspec 파일에서 빌드 명령을 읽고 실행합니다.

**프로젝트 buildspec을 설정하려면**

1. CodeBuild 콘솔에서 빌드 프로젝트를 선택한 다음 **편집** 및 **Buildspec**을 선택합니다.

1. **Buildspec**에서 **빌드 명령 삽입**을 선택한 후 **편집기로 전환**을 선택합니다.

1. 사전 채워진 빌드 명령을 삭제하고 다음 buildspec에 붙여넣습니다.

   ```
   version: 0.2
   phases:
     build:
       commands:
         - yarn
         - yarn add --dev jest-junit @babel/plugin-proposal-private-property-in-object
         - yarn run build
         - yarn run test -- --coverage --watchAll=false --testResultsProcessor="jest-junit" --detectOpenHandles
   artifacts:
     name: "build-output"
     files:
       - "**/*"
   reports:
     test-report:
       files:
         - 'junit.xml'
       file-format: 'JUNITXML'
     coverage-report:
       files:
         - 'coverage/clover.xml'
       file-format: 'CLOVERXML'
   ```

1. **Update buildspec(buildspec 업데이트)**을 선택합니다.

## React 앱 빌드 및 실행
<a name="sample-lambda-react-nodejs.build"></a>

CodeBuild Lambda에서 React 앱을 빌드하고, 빌드 아티팩트를 다운로드하고, React 앱을 로컬에서 실행합니다.

**React 앱을 빌드하고 실행하려면**

1. **빌드 시작**를 선택합니다.

1. 빌드가 완료되면 Amazon S3 프로젝트 아티팩트 버킷으로 이동하여 React 앱 아티팩트를 다운로드합니다.

1. 프로젝트 폴더에서 React 빌드 아티팩트 및 `run npm install -g serve && serve -s build`의 압축을 풉니다.

1. `serve` 명령은 로컬 포트의 정적 사이트를 제공하고 터미널로 출력을 인쇄합니다. 터미널 출력의 `Local:`에서 localhost URL을 방문하여 React 앱을 볼 수 있습니다.

React 기반 서버의 배포를 처리하는 방법에 대한 자세한 내용은 [React 앱 배포 생성](https://create-react-app.dev/docs/deployment/)을 참조하세요.

## 인프라 정리
<a name="sample-lambda-react-nodejs.clean-up"></a>

이 자습서에서 사용한 리소스에 대한 추가 요금을 피하려면 CodeBuild 프로젝트에 대해 생성된 리소스를 삭제합니다.

**인프라를 정리하려면**

1. 프로젝트 아티팩트 Amazon S3 버킷 삭제

1. CloudWatch 콘솔로 이동하여 CodeBuild 프로젝트와 연결된 CloudWatch 로그 그룹을 삭제합니다.

1. CodeBuild 콘솔로 이동하여 **빌드 프로젝트 삭제**를 선택하여 CodeBuild 프로젝트를 삭제합니다.

# CodeBuild Lambda Python으로 Lambda 함수 구성 업데이트
<a name="sample-lambda-boto3-python"></a>

다음 Python 샘플은 [Boto3](https://aws.amazon.com/sdk-for-python/) 및 CodeBuild Lambda Python을 사용하여 Lambda 함수의 구성을 업데이트합니다. 이 샘플을 확장하여 다른 AWS 리소스를 프로그래밍 방식으로 관리할 수 있습니다. 자세한 내용은[Boto3 설명서](https://aws.amazon.com/sdk-for-python/)를 참조하십시오.

## 사전 조건
<a name="sample-lambda-boto3-python.prerequisites"></a>

계정에서 Lambda 함수를 생성하거나 찾습니다.

이 샘플에서는 계정에 Lambda 함수를 이미 생성했다고 가정하고 CodeBuild를 사용하여 Lambda 함수의 환경 변수를 업데이트합니다. CodeBuild를 통해 Lambda 함수를 설정하는 방법에 대한 자세한 내용은 [CodeBuild Lambda Java와 AWS SAM 함께를 사용하여 Lambda 함수 배포](sample-lambda-sam-gradle.md) 샘플을 참조하거나 [AWS Lambda](https://aws.amazon.com/lambda/)를 참조하세요

## 소스 리포지토리 설정
<a name="sample-lambda-boto3-python.set-up-repo"></a>

Boto3 python 스크립트를 저장할 소스 리포지토리를 생성합니다.

**소스 리포지토리를 설정하려면**

1. 다음 python 스크립트를 `update_lambda_environment_variables.py`라는 새 파일에 복사합니다.

   ```
   import boto3
   from os import environ
   
   
   def update_lambda_env_variable(lambda_client):
       lambda_function_name = environ['LAMBDA_FUNC_NAME']
       lambda_env_variable = environ['LAMBDA_ENV_VARIABLE']
       lambda_env_variable_value = environ['LAMBDA_ENV_VARIABLE_VALUE']
       print("Updating lambda function " + lambda_function_name + " environment variable "
             + lambda_env_variable + " to " + lambda_env_variable_value)
       lambda_client.update_function_configuration(
           FunctionName=lambda_function_name,
           Environment={
               'Variables': {
                   lambda_env_variable: lambda_env_variable_value
               }
           },
       )
   
   
   if __name__ == "__main__":
       region = environ['AWS_REGION']
       client = boto3.client('lambda', region)
       update_lambda_env_variable(client)
   ```

1. python 파일을 지원되는 소스 리포지토리에 업로드합니다. 지원되는 소스 유형 목록은 [ProjectSource](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectSource.html)를 참조하세요.

## CodeBuild Lambda Python 프로젝트 생성
<a name="sample-lambda-boto3-python.create-project"></a>

CodeBuild Lambda Python 프로젝트를 생성합니다.

**CodeBuild Lambda Java 프로젝트를 생성하려면**

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1.  CodeBuild 정보 페이지가 나타나면 **빌드 프로젝트 생성**을 선택합니다. 그렇지 않을 경우, 탐색 창에서 **빌드**를 확장한 후 **빌드 프로젝트**를 선택하고 **빌드 프로젝트 생성**을 선택합니다.

1. **프로젝트 이름**에 이 빌드 프로젝트의 이름을 입력합니다. 빌드 프로젝트 이름은 각 AWS 계정에서 고유해야 합니다. 또한 선택에 따라 빌드 프로젝트에 대한 설명을 포함하여 다른 사용자가 이 프로젝트의 용도를 이해하도록 도울 수 있습니다.

1. **소스**에서 AWS SAM 프로젝트가 위치한 소스 리포지토리를 선택합니다.

1. **환경**에서 다음과 같이 합니다.
   + **컴퓨팅**에서 **Lambda**를 선택합니다.
   + **런타임**에서 **Python**을 선택합니다.
   + **이미지**에서 **aws/codebuild/amazonlinux-x86\$164-lambda-standard:python3.12**를 선택합니다.
   + **서비스 역할**의 경우 **새 서비스 역할**을 선택한 상태로 둡니다. **역할 이름**을 기록해 둡니다. 이는 이 샘플의 뒷부분에서 프로젝트의 IAM 권한을 업데이트할 때 필요합니다.

1. **빌드 프로젝트 생성**을 선택합니다.

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 **역할**을 선택하고 프로젝트와 연결된 서비스 역할을 선택합니다. 빌드 프로젝트를 선택하고 **편집**, **환경**, **서비스 역할**을 선택하여 CodeBuild에서 프로젝트 역할을 찾을 수 있습니다.

1. **신뢰 관계** 탭을 선택한 후 **신뢰 정책 편집**을 선택합니다.

1. 다음 인라인 정책을 IAM 역할에 추가합니다. 이는 나중에 AWS SAM 인프라를 배포하는 데 사용됩니다. 자세한 내용은 * IAM 사용 설명서*의 [IAM 자격 증명 권한 추가 및 제거](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_manage-attach-detach.html)를 참조하세요.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "UpdateLambdaPermissions",
               "Effect": "Allow",
               "Action": [
                   "lambda:UpdateFunctionConfiguration"
               ],
               "Resource": [
                   "*"
               ]
           }
       ]
   }
   ```

------

## 프로젝트 buildspec 설정
<a name="sample-lambda-boto3-python.set-up-buildspec"></a>

Lambda 함수를 업데이트하기 위해 스크립트는 buildspec에서 환경 변수를 읽고 Lambda 함수의 이름, 환경 변수 이름 및 환경 변수 값을 찾습니다.

**프로젝트 buildspec을 설정하려면**

1. CodeBuild 콘솔에서 빌드 프로젝트를 선택한 다음 **편집** 및 **Buildspec**을 선택합니다.

1. **Buildspec**에서 **빌드 명령 삽입**을 선택한 후 **편집기로 전환**을 선택합니다.

1. 사전 채워진 빌드 명령을 삭제하고 다음 buildspec에 붙여넣습니다.

   ```
   version: 0.2
   env:
     variables:
       LAMBDA_FUNC_NAME: "<lambda-function-name>"
       LAMBDA_ENV_VARIABLE: "FEATURE_ENABLED"
       LAMBDA_ENV_VARIABLE_VALUE: "true"
   phases:
     install:
       commands:
          - pip3 install boto3
     build:
       commands:
          - python3 update_lambda_environment_variables.py
   ```

1. **Update buildspec(buildspec 업데이트)**을 선택합니다.

## Lambda 구성 업데이트
<a name="sample-lambda-boto3-python.update"></a>

CodeBuild Lambda Python을 사용하여 Lambda 함수의 구성을 자동으로 업데이트합니다.

**Lambda 함수의 구성을 업데이트하려면**

1. **빌드 시작**를 선택합니다.

1. 빌드가 완료되면 Lambda 함수로 이동합니다.

1. **구성**을 선택한 후 **환경** 변수를 선택합니다. 키 `FEATURE_ENABLED` 및 값이 `true`인 새 환경 변수가 표시됩니다.

## 인프라 정리
<a name="sample-lambda-boto3-python.clean-up"></a>

이 자습서에서 사용한 리소스에 대한 추가 요금을 피하려면 CodeBuild 프로젝트에 대해 생성된 리소스를 삭제합니다.

**인프라를 정리하려면**

1. CloudWatch 콘솔로 이동하여 CodeBuild 프로젝트와 연결된 CloudWatch 로그 그룹을 삭제합니다.

1. CodeBuild 콘솔로 이동하여 **빌드 프로젝트 삭제**를 선택하여 CodeBuild 프로젝트를 삭제합니다.

1. 이 샘플을 위해 Lambda 함수를 생성한 경우 **작업** 및 **함수 삭제**를 선택하여 Lambda 함수를 정리합니다.

## 확장 프로그램
<a name="sample-lambda-boto3-python.extensions"></a>

 AWS CodeBuild Lambda Python을 사용하여 다른 AWS 리소스를 관리하도록이 샘플을 확장하려는 경우:
+ Python 스크립트를 업데이트하여 Boto3를 사용하여 새 리소스를 수정합니다.
+ 새 리소스에 대한 권한을 갖도록 CodeBuild 프로젝트와 연결된 IAM 역할을 업데이트합니다.
+ 새 리소스와 연결된 새 환경 변수를 buildspec에 추가합니다.