

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

# 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 프로젝트를 삭제합니다.