

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

# 의 빌드 AWS CodeBuild
<a name="builds-working"></a>

*빌드*는 입력 아티팩트 세트(예: Java 클래스 파일 모음)를 기반으로 출력 아티팩트(예: JAR 파일)를 생성하기 AWS CodeBuild 위해에서 수행하는 작업 세트를 나타냅니다.

빌드를 여러 개 실행할 경우 다음 규칙이 적용됩니다.
+ 가능한 경우 동시에 빌드가 실행됩니다. 동시에 실행할 수 있는 최대 빌드 수는 다를 수 있습니다. 자세한 내용은 [에 대한 할당량 AWS CodeBuild](limits.md) 단원을 참조하십시오.
+ 빌드 프로젝트에 동시 빌드 제한이 설정되어 있는 경우 실행 중인 빌드 수가 프로젝트의 동시 빌드 제한에 도달하면 빌드에서 오류가 반환됩니다. 자세한 내용은 [동시 빌드 제한 활성화](create-project.md#enable-concurrent-build-limit.console)를 참조하세요.
+ 빌드 프로젝트에 동시 빌드 제한이 설정되어 있지 않은 경우 실행 중인 빌드 수가 플랫폼 및 컴퓨팅 유형의 동시 빌드 제한에 도달하면 빌드가 대기열에 추가됩니다. 대기열의 최대 빌드 수는 동시 빌드 수 한도의 다섯 배입니다. 자세한 내용은 [에 대한 할당량 AWS CodeBuild](limits.md) 단원을 참조하십시오.

  제한 시간 값에 지정한 시간(분)이 지난 후 시작되지 않은 대기열의 빌드는 대기열에서 삭제됩니다. 기본 제한 시간 값은 8분입니다. 빌드를 실행할 때 빌드 대기열 제한 시간을 5분에서 8시간까지 원하는 대로 지정할 수 있습니다. 자세한 내용은 [수동으로 AWS CodeBuild 빌드 실행](run-build.md) 단원을 참조하십시오.

  대기열에 추가된 빌드가 시작되는 순서는 예측할 수 없습니다.

**참고**  
1년치 빌드의 기록에 액세스할 수 있습니다.

빌드 작업을 수행할 때 이 작업을 수행할 수 있습니다.

**Topics**
+ [수동으로 AWS CodeBuild 빌드 실행](run-build.md)
+ [AWS Lambda 컴퓨팅 기반 빌드 실행](lambda.md)
+ [예약 용량 플릿에서 빌드 실행](fleets.md)
+ [배치로 빌드 실행](batch-build.md)
+ [배치 빌드에서 병렬 테스트 실행](parallel-test.md)
+ [성능을 개선하기 위한 캐시 빌드](build-caching.md)
+ [에서 빌드 디버그 AWS CodeBuild](debug-builds.md)
+ [AWS CodeBuild에서 빌드 삭제](delete-builds.md)
+ [에서 수동으로 빌드 재시도 AWS CodeBuild](retry-build.md)
+ [AWS CodeBuild에서 자동으로 빌드 재시도](auto-retry-build.md)
+ [AWS CodeBuild에서 빌드 중지](stop-build.md)
+ [AWS CodeBuild에서 배치 빌드 중지](stop-batch-build.md)
+ [AWS CodeBuild 빌드를 자동으로 트리거](build-triggers.md)
+ [에서 빌드 세부 정보 보기 AWS CodeBuild](view-build-details.md)
+ [에서 빌드 IDs 목록 보기 AWS CodeBuild](view-build-list.md)
+ [에서 빌드 프로젝트의 빌드 IDs 목록 보기 AWS CodeBuild](view-builds-for-project.md)

# 수동으로 AWS CodeBuild 빌드 실행
<a name="run-build"></a>

 AWS CodeBuild 콘솔 AWS CLI, 또는 AWS SDKs를 사용하여 CodeBuild에서 빌드를 실행할 수 있습니다.

**Topics**
+ [AWS CodeBuild 에이전트를 사용하여 로컬에서 빌드 실행](use-codebuild-agent.md)
+ [빌드 실행(콘솔)](run-build-console.md)
+ [빌드 실행(AWS CLI)](run-build-cli.md)
+ [배치 빌드 실행(AWS CLI)](run-batch-build-cli.md)
+ [빌드 실행 자동 시작(AWS CLI)](run-build-cli-auto-start.md)
+ [빌드 실행 자동 중지(AWS CLI)](run-build-cli-auto-stop.md)
+ [빌드 실행(AWS SDKs)](run-build-sdks.md)

# AWS CodeBuild 에이전트를 사용하여 로컬에서 빌드 실행
<a name="use-codebuild-agent"></a>

 AWS CodeBuild 에이전트를 사용하여 로컬 시스템에서 CodeBuild 빌드를 실행할 수 있습니다. x86\$164 및 ARM 플랫폼에 사용할 수 있는 에이전트가 있습니다.

새 버전의 에이전트가 게시되는 시기를 알 수 있도록 알림을 구독할 수도 있습니다.

## 사전 조건
<a name="use-codebuild-agent.prerequisites"></a>

시작하려면 다음을 수행해야 합니다.
+ 로컬 시스템에 Git를 설치합니다.
+ 로컬 컴퓨터에 [Docker](https://www.docker.com/)를 설치하고 설정합니다.

## 빌드 이미지 설정
<a name="use-codebuild-agent.setup-image"></a>

에이전트를 처음 실행할 때 또는 이미지가 변경된 경우에만 빌드 이미지를 설정해야 합니다.

**빌드 이미지를 설정하려면**

1. 큐레이션된 Amazon Linux 2 이미지를 사용하려면 다음 명령을 사용하여 [https://gallery.ecr.aws/codebuild/amazonlinux-x86\$164-standard](https://gallery.ecr.aws/codebuild/amazonlinux-x86_64-standard) CodeBuild 퍼블릭 Amazon ECR 리포지토리에서 가져올 수 있습니다.

   ```
   $ docker pull public.ecr.aws/codebuild/amazonlinux-x86_64-standard:4.0
   ```

   다른 Linux 이미지를 사용하려면 다음 단계를 수행합니다.

   1. CodeBuild 이미지 리포지토리를 복제합니다.

      ```
      $ git clone https://github.com/aws/aws-codebuild-docker-images.git
      ```

   1. image 디렉터리로 변경합니다. 이 예에서는 `aws/codebuild/standard:5.0` 이미지를 사용합니다.

      ```
      $ cd aws-codebuild-docker-images/ubuntu/standard/5.0
      ```

   1. 이미지를 빌드합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.

      ```
      $ docker build -t aws/codebuild/standard:5.0 .
      ```

1. CodeBuild 에이전트를 다운로드합니다.

   x86\$164 버전의 에이전트를 다운로드하려면 다음 명령을 실행합니다.

   ```
   $ docker pull public.ecr.aws/codebuild/local-builds:latest
   ```

   ARM 버전의 에이전트를 다운로드하려면 다음 명령을 실행합니다.

   ```
   $ docker pull public.ecr.aws/codebuild/local-builds:aarch64
   ```

1. <a name="codebuild-agent-sha"></a>CodeBuild 에이전트는 [https://gallery.ecr.aws/codebuild/local-builds](https://gallery.ecr.aws/codebuild/local-builds)에서 사용할 수 있습니다.

   에이전트의 x86\$164 버전에 대한 보안 해시 알고리즘(SHA) 서명은 다음과 같습니다.

   ```
   sha256:ccb19bdd7af94e4dc761e4c58c267e9455c28ec68d938086b4dc1cf8fe6b0940
   ```

   에이전트의 ARM 버전에 대한 SHA 서명은 다음과 같습니다.

   ```
   sha256:7d7b5d35d2ac4e062ae7ba8c662ffed15229a52d09bd0d664a7816c439679192
   ```

   SHA를 사용하여 에이전트 버전을 확인할 수 있습니다. 에이전트의 SHA 서명을 보려면 다음 명령을 실행하고 `RepoDigests`에서 SHA를 찾습니다.

   ```
   $ docker inspect public.ecr.aws/codebuild/local-builds:latest
   ```

## CodeBuild 에이전트 실행
<a name="use-codebuild-agent.run-agent"></a>

**CodeBuild 에이전트를 실행하려면**

1. 빌드 프로젝트 소스가 들어 있는 디렉터리로 변경합니다.

1. [codebuild\$1build.sh](https://github.com/aws/aws-codebuild-docker-images/blob/master/local_builds/codebuild_build.sh) 스크립트를 다운로드합니다.

   ```
   $ curl -O  https://raw.githubusercontent.com/aws/aws-codebuild-docker-images/master/local_builds/codebuild_build.sh
   $ chmod +x codebuild_build.sh
   ```

1. `codebuild_build.sh` 스크립트를 실행하고 컨테이너 이미지와 출력 디렉터리를 지정합니다.

   x86\$164 빌드를 실행하려면 다음 명령을 실행합니다.

   ```
   $ ./codebuild_build.sh -i <container-image> -a <output directory>
   ```

   ARM 빌드를 실행하려면 다음 명령을 실행합니다.

   ```
   $ ./codebuild_build.sh -i <container-image> -a <output directory> -l public.ecr.aws/codebuild/local-builds:aarch64
   ```

   *<container-image>*를 컨테이너 이미지의 이름(예: `aws/codebuild/standard:5.0` 또는 `public.ecr.aws/codebuild/amazonlinux-x86_64-standard:4.0`)으로 바꿉니다.

   스크립트는 빌드 이미지를 시작하고 현재 디렉터리의 프로젝트에서 빌드를 실행합니다. 빌드 프로젝트의 위치를 지정하려면 스크립트 명령에 `-s <build project directory>` 옵션을 추가합니다.

## 새 CodeBuild 에이전트 버전에 대한 알림 받기
<a name="receive-codebuild-agent-notifications"></a>

Amazon SNS 알림을 구독하면 AWS CodeBuild 에이전트의 새 버전이 릴리스될 때 알림을 받을 수 있습니다.

**CodeBuild 에이전트 알림을 구독하려면**

1. [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home)에서 Amazon SNS 콘솔을 엽니다.

1. 탐색 모음에서 아직 선택하지 않은 경우 AWS 리전을 **미국 동부(버지니아 북부)**로 변경합니다. 구독하려는 Amazon SNS 알림이이 AWS 리전에 생성되므로이 리전을 선택해야 합니다.

1. 탐색 창에서 **Subscriptions**를 선택합니다.

1. **구독 생성**을 선택합니다.

1. **구독 생성**에서 다음을 수행합니다.

   1. **주제 ARN**에 다음 Amazon 리소스 이름(ARN)을 사용합니다.

      ```
      arn:aws:sns:us-east-1:850632864840:AWS-CodeBuild-Local-Agent-Updates
      ```

   1. **프로토콜**의 경우 **이메일** 또는 **SMS**를 선택합니다.

   1. **엔드포인트**의 경우 알림을 수신할 위치(이메일 또는 SMS)를 선택합니다. 지역 번호를 포함한 이메일 주소, 우편 주소 또는 전화번호를 입력합니다.

   1. **구독 생성**을 선택합니다.

   1. 구독 사실을 확인하는 이메일을 받으려면 **이메일**을 선택합니다. 이메일의 지침에 따라 구독을 완료합니다.

      이런 알림을 더 이상 받지 않기를 원하는 경우, 다음 절차를 수행해서 구독을 해제하세요.

**CodeBuild 에이전트 알림을 구독 해제하려면**

1. [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home)에서 Amazon SNS 콘솔을 엽니다.

1. 탐색 창에서 **구독**을 선택합니다.

1. 구독을 선택한 후 **작업**에서 **구독 삭제**를 선택합니다. 확인 메시지가 표시되면 [**삭제**]를 선택합니다.

# 빌드 실행(콘솔)
<a name="run-build-console"></a>

AWS CodePipeline을 사용하여 CodeBuild에서 빌드를 실행하려면 다음 단계를 건너뛰고 [CodePipeline에서 CodeBuild 사용](how-to-create-pipeline.md) 섹션의 지침을 따르세요.

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

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다.

1. 빌드 프로젝트 목록에서 빌드 프로젝트를 선택합니다.

1. 기본 빌드 프로젝트 설정으로 빌드를 실행하거나 이 빌드의 빌드 설정만 재정의할 수 있습니다.

   1. 기본 빌드 프로젝트 설정으로 빌드를 실행하려면 **빌드 시작**을 선택합니다. 빌드가 즉시 시작됩니다.

   1. 기본 빌드 프로젝트 설정을 재정의하려면 **재정의로 빌드 시작**을 선택합니다. **빌드 시작** 페이지에서 다음을 재정의할 수 있습니다.
      + **빌드 구성**
      + **소스**:
      + **환경 변수 재정의**

      고급 재정의를 더 선택해야 하는 경우 **고급 빌드 재정의**를 선택합니다. 이 페이지에서 다음을 재정의할 수 있습니다.
      + **빌드 구성**
      + **소스**:
      + **환경**
      + **Buildspec**
      + **아티팩트**
      + **로그**:

      재정의를 선택했으면 **빌드 시작**을 선택합니다.

이 빌드에 대한 자세한 정보는 [빌드 세부 정보 보기(콘솔)](view-build-details.md#view-build-details-console) 단원을 참조하십시오.

# 빌드 실행(AWS CLI)
<a name="run-build-cli"></a>

**참고**  
CodePipeline을 사용하여 AWS CodeBuild에서 빌드를 실행하려면 다음 단계를 건너뛰고 [CodeBuild를 사용하는 파이프라인 생성(AWS CLI)](how-to-create-pipeline-cli.md) 섹션의 지침을 따르세요.  
AWS CLI와 CodeBuild를 함께 사용하는 방법에 대한 자세한 내용은 [명령줄 참조](cmd-ref.md) 섹션을 참조하세요.

1. 다음 중 한 방법으로 `start-build` 명령을 실행합니다.

   ```
   aws codebuild start-build --project-name <project-name>
   ```

   빌드 입력 결과물의 최신 버전과 빌드 프로젝트의 기존 설정을 사용하는 빌드를 실행하려면 이 방법을 사용합니다.

   ```
   aws codebuild start-build --generate-cli-skeleton
   ```

   이전 버전의 빌드 입력 결과물을 사용하여 빌드를 실행하려는 경우 또는 빌드 출력 결과물, 환경 변수, buildspec 또는 기본 빌드 제한 시간의 설정을 재정의하려는 경우 이 방법을 사용합니다.

1. **start-build** 명령을 `--project-name` 옵션과 함께 실행하는 경우 *<project-name>*을 빌드 프로젝트의 이름으로 바꾼 다음 이 절차의 6단계로 이동합니다. 빌드 프로젝트 목록을 가져오려면 [빌드 프로젝트 이름 보기](view-project-list.md) 단원을 참조하십시오.

1. **start-build** 명령을 `--idempotency-token` 옵션과 함께 실행하면 고유의 대소문자 구분 식별자인 토큰이 `start-build` 요청에 포함됩니다. 토큰은 요청 후 5분 동안 유효합니다. 동일한 토큰을 사용하여 `start-build` 요청을 반복하고 파라미터를 변경하면 CodeBuild는 파라미터 불일치 오류를 반환합니다.

1. **start-build** 명령을 `--generate-cli-skeleton` 옵션과 함께 실행하는 경우 JSON 형식 데이터가 출력에 표시됩니다. `start-build.json`가 설치된 로컬 컴퓨터 또는 인스턴스의 위치에 있는 파일(예: AWS CLI)에 데이터를 복사합니다. 복사된 데이터를 다음 형식으로 수정한 다음 결과를 저장합니다.

   ```
   {
     "projectName": "projectName",
     "sourceVersion": "sourceVersion",
     "artifactsOverride": {
       "type": "type",
       "location": "location",
       "path": "path",
       "namespaceType": "namespaceType",
       "name": "artifactsOverride-name",
       "packaging": "packaging"
     },
     "buildspecOverride": "buildspecOverride",
     "cacheOverride": {
       "location": "cacheOverride-location",
       "type": "cacheOverride-type"
     },
     "certificateOverride": "certificateOverride",
     "computeTypeOverride": "computeTypeOverride",
     "environmentTypeOverride": "environmentTypeOverride",
     "environmentVariablesOverride": {
       "name": "environmentVariablesOverride-name",
       "value": "environmentVariablesValue",
       "type": "environmentVariablesOverride-type"
     },
     "gitCloneDepthOverride": "gitCloneDepthOverride",
     "imageOverride": "imageOverride",
     "idempotencyToken": "idempotencyToken",
     "insecureSslOverride": "insecureSslOverride",
     "privilegedModeOverride": "privilegedModeOverride",
     "queuedTimeoutInMinutesOverride": "queuedTimeoutInMinutesOverride",
     "reportBuildStatusOverride": "reportBuildStatusOverride",
     "timeoutInMinutesOverride": "timeoutInMinutesOverride",
     "sourceAuthOverride": "sourceAuthOverride",
     "sourceLocationOverride": "sourceLocationOverride",
     "serviceRoleOverride": "serviceRoleOverride",
     "sourceTypeOverride": "sourceTypeOverride"
   }
   ```

   다음과 같이 자리 표시자를 바꿉니다.
   + *projectName*: 필수 문자열입니다. 이 빌드에 사용할 빌드 프로젝트의 이름입니다.
   + *sourceVersion*: 선택적 문자열입니다. 빌드할 소스 코드의 버전으로, 다음과 같습니다.
     + Amazon S3의 경우, 빌드하려는 입력 ZIP 파일의 버전에 해당하는 버전 ID입니다. *sourceVersion*을 지정하지 않은 경우 최신 버전이 사용됩니다.
     + CodeCommit의 경우, 빌드하려는 소스 코드의 버전에 해당하는 커밋 ID입니다. *sourceVersion*을 지정하지 않은 경우 기본 분기의 HEAD 커밋 ID가 사용됩니다. (*sourceVersion*의 태그 이름은 지정할 수 없지만, 태그의 커밋 ID는 지정할 수 있습니다.)
     + GitHub의 경우, 빌드하려는 소스 코드의 버전에 해당하는 커밋 ID, 풀 요청 ID, 분기 이름 또는 태그 이름입니다. 풀 요청 ID가 지정된 경우 `pr/pull-request-ID` 형식을 사용해야 합니다(예: `pr/25`). 분기 이름이 지정되어 있으면 분기의 HEAD 커밋 ID가 사용됩니다. *sourceVersion*을 지정하지 않은 경우 기본 분기의 HEAD 커밋 ID가 사용됩니다.
     + Bitbucket의 경우, 빌드하려는 소스 코드의 버전에 해당하는 커밋 ID, 분기 이름 또는 태그 이름입니다. 분기 이름이 지정되어 있으면 분기의 HEAD 커밋 ID가 사용됩니다. *sourceVersion*을 지정하지 않은 경우 기본 분기의 HEAD 커밋 ID가 사용됩니다.
   + 다음 자리 표시자는 `artifactsOverride`용입니다.
     + *type*: 선택 사항입니다. 빌드 프로젝트에서 정의된 빌드 출력 결과물 유형이 아닌 이 빌드에서만 사용되는 빌드 출력 결과물 유형입니다.
     + *location*: 선택 사항입니다. 빌드 프로젝트에서 정의된 빌드 출력 결과물 위치가 아닌 이 빌드에서만 사용되는 빌드 출력 결과물 위치입니다.
     + *path*: 선택 사항입니다. 빌드 프로젝트에서 정의된 빌드 출력 결과물 경로가 아닌 이 빌드에서만 사용되는 빌드 출력 결과물 경로입니다.
     + *namespaceType*: 선택 사항입니다. 빌드 프로젝트에서 정의된 빌드 출력 결과물 유형이 아닌 이 빌드에서만 사용되는 빌드 출력 결과물 유형입니다.
     + *name*: 선택 사항입니다. 빌드 프로젝트에서 정의된 빌드 출력 결과물 이름이 아닌 이 빌드에서만 사용되는 빌드 출력 결과물 이름입니다.
     + *packaging*: 선택 사항입니다. 빌드 프로젝트에서 정의된 빌드 출력 결과물 패키징이 아닌 이 빌드에서만 사용되는 빌드 출력 결과물 패키징입니다.
   + *buildspecOverride*: 선택 사항입니다. 빌드 프로젝트에서 정의된 buildspec 선언이 아닌 이 빌드에서만 사용되는 buildspec 선언입니다. 이 값이 설정된 경우 인라인 buildspec 정의, 내장된 `CODEBUILD_SRC_DIR` 환경 변수의 값에 상대적인 대체 buildspec 파일 또는 S3 버킷의 경로가 될 수 있습니다. S3 버킷은 빌드 프로젝트와 동일한 AWS 리전에 있어야 합니다. ARN을 사용하여 buildspec 파일을 지정합니다(예: `arn:aws:s3:::<my-codebuild-sample2>/buildspec.yml`). 이 값을 제공하지 않거나 빈 문자열로 설정하는 경우 소스 코드에 루트 디렉터리의 `buildspec.yml` 파일이 포함되어 있어야 합니다. 자세한 내용은 [buildspec 파일 이름 및 스토리지 위치](build-spec-ref.md#build-spec-ref-name-storage) 섹션을 참조하세요.
   + 다음 자리 표시자는 `cacheOverride`용입니다.
     + *cacheOverride-location*: 선택 사항입니다. 빌드 프로젝트에서 지정된 `ProjectCache` 객체를 재정의하는 이 빌드에 대한 `ProjectCache` 객체의 위치입니다. `cacheOverride`는 선택 사항이며 `ProjectCache` 객체를 가져옵니다. `location`는 `ProjectCache` 객체에서 필수입니다.
     + *cacheOverride-type*: 선택 사항입니다. 이 빌드에 대한 `ProjectCache` 객체의 유형으로, 빌드 프로젝트에서 지정된 `ProjectCache` 객체를 재정의합니다. `cacheOverride`는 선택 사항이며 `ProjectCache` 객체를 가져옵니다. `type`는 `ProjectCache` 객체에서 필수입니다.
   + *certificateOverride*: 선택 사항입니다. 빌드 프로젝트에서 지정된 인증서를 재정의하는 이 빌드에 대한 인증서의 이름입니다.
   + *environmentTypeOverride*: 선택 사항입니다. 빌드 프로젝트에서 지정된 컨테이너를 재정의하는 이 빌드의 컨테이너 유형입니다. 현재 유효한 문자열은 `LINUX_CONTAINER`입니다.
   + 다음 자리 표시자는 `environmentVariablesOverride`용입니다.
     + *environmentVariablesOverride-name*: 선택 사항입니다. 이 빌드에서 값을 재정의하려는 빌드 프로젝트의 환경 변수 이름입니다.
     + *environmentVariablesOverride-type*: 선택 사항입니다. 이 빌드에서 값을 재정의하려는 빌드 프로젝트의 환경 변수 유형입니다.
     + *environmentVariablesValue*: 선택 사항입니다. 이 빌드에서 재정의하려는 빌드 프로젝트에 정의된 환경 변수 값입니다.
   + *gitCloneDepthOverride*: 선택 사항입니다. 이 빌드에서 값을 재정의하려는 빌드 프로젝트의 **Git clone depth** 값입니다. 소스 유형이 Amazon S3일 경우 이 값이 지원되지 않습니다.
   + *imageOverride*: 선택 사항입니다. 빌드 프로젝트에서 지정된 이미지를 재정의하는 이 빌드에 대한 이미지의 이름입니다.
   + *idempotencyToken*: 선택 사항입니다. 빌드 요청이 idempotent임을 지정하기 위해 토큰으로 제공되는 문자열입니다. 64자 이하의 모든 문자열을 선택할 수 있습니다. 토큰은 start-build 요청 후 5분 동안 유효합니다. 동일한 토큰을 사용하여 start-build 요청을 반복하고 파라미터를 변경하면 CodeBuild는 파라미터 불일치 오류를 반환합니다.
   + *insecureSslOverride*: 빌드 프로젝트에서 지정된 안전하지 않은 TLS 설정을 재정의할지 여부를 지정하는 선택적 부울입니다. 안전하지 않은 TLS 설정은 프로젝트 소스 코드에 연결하는 동안 TLS 경고를 무시할지 여부를 결정합니다. 이 설정은 빌드의 소스가 GitHub Enterprise Server인 경우에만 적용됩니다.
   + *privilegedModeOverride*: 선택적 부울입니다. true로 설정하면 빌드는 빌드 프로젝트에서 권한이 있는 모드를 재정의합니다.
   +  *queuedTimeoutInMinutesOverride*: 빌드 대기 시간이 얼마나 지나야 시간 초과로 처리되는지를 지정하는 정수(분)입니다(선택 사항). 최솟값은 5분이며, 최댓값은 480분(8시간)입니다.
   + *reportBuildStatusOverride*: 빌드의 시작 및 완료 상태를 소스 공급자에게 보낼지 여부를 지정하는 선택적 부울입니다. GitHub, GitHub Enterprise Server 또는 Bitbucket이 아닌 소스 공급자로 설정하는 경우, invalidInputException이 발생합니다.
   + *sourceAuthOverride*: 선택적 문자열입니다. 빌드 프로젝트에서 정의된 권한 부여를 재정의하는 이 빌드에 대한 권한 부여 유형입니다. 이 재정의는 빌드 프로젝트의 소스가 Bitbucket 또는 GitHub인 경우에만 적용됩니다.
   + *sourceLocationOverride*: 선택적 문자열입니다. 빌드 프로젝트에서 정의된 위치의 소스 위치를 이 빌드에 대해 재정의하는 위치입니다.
   + *serviceRoleOverride*: 선택 사항 문자열. 빌드 프로젝트에서 지정된 서비스 역할을 재정의하는 이 빌드에 대한 서비스 역할의 이름입니다.
   + *sourceTypeOverride*: 선택적 문자열입니다. 빌드 프로젝트에서 정의된 소스 입력을 재정의하는 이 빌드에 대한 소스 입력 유형입니다. 유효한 문자열은 `NO_SOURCE`, `CODECOMMIT`, `CODEPIPELINE`, `GITHUB`, `S3`, `BITBUCKET` 및 `GITHUB_ENTERPRISE`입니다.
   + *timeoutInMinutesOverride*: 선택적 숫자입니다. 빌드 프로젝트에서 정의된 빌드 제한 시간(분)이 아닌 이 빌드에서만 사용되는 빌드 제한 시간(분)입니다.

   AWS 액세스 키 ID, AWS 비밀 액세스 키 또는 암호와 같은 중요한 값을 가진 환경 변수는 Amazon EC2 Systems Manager Parameter Store 또는 에 파라미터로 저장하는 것이 좋습니다. CodeBuild는 Amazon EC2 Systems Manager Parameter Store에 저장된 파라미터 이름이 `/CodeBuild/`(예: `/CodeBuild/dockerLoginPassword`)로 시작하는 경우에만 해당 파라미터를 사용할 수 있습니다. CodeBuild 콘솔을 사용하여 Amazon EC2 Systems Manager에서 파라미터를 생성할 수 있습니다. **파라미터 생성**을 선택한 후 지침에 따릅니다. 경우에 따라 대화 상자의 **KMS 키**에 해당 계정의 AWS KMS 키에 대한 ARN을 지정할 수 있습니다. Amazon EC2 Systems Manager는 이 키를 사용하여 저장 시 파라미터의 값을 암호화하고 검색 시 암호를 해독합니다. CodeBuild 콘솔을 사용하여 파라미터를 생성하는 경우 콘솔은 `/CodeBuild/`로 파라미터를 시작합니다. 하지만 Amazon EC2 Systems Manager Parameter Store 콘솔을 사용하여 파라미터를 생성하는 경우, `/CodeBuild/`로 파라미터 이름을 시작해야 하고 **유형**을 **보안 문자열**로 설정해야 합니다. 자세한 내용은 Amazon EC2 Systems Manager 사용 설명서의 [AWS Systems Manager 파라미터 스토어](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) 및 [연습: 문자열 파라미터 생성 및 테스트(콘솔)](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-console.html)을 참조하세요.**

   빌드 프로젝트가 Amazon EC2 Systems Manager Parameter Store에 저장된 파라미터를 참조하는 경우 해당 빌드 프로젝트의 서비스 역할은 `ssm:GetParameters` 작업을 허용해야 합니다. 앞에서 **해당 계정에 새로운 서비스 역할 생성**을 선택한 경우 CodeBuild는 빌드 프로젝트의 기본 서비스 역할에 이 작업을 자동으로 포함합니다. 하지만 [**Choose an existing service role from your account**]를 선택한 경우 이 작업을 서비스 역할에 별도로 포함해야 합니다.

   사용자가 설정한 환경 변수는 기존 환경 변수를 대체합니다. 예를 들어 도커 이미지에 값이 `my_value`인 `MY_VAR`이라는 환경 변수가 이미 포함되어 있는데, 사용자가 `MY_VAR` 환경 변수의 값을 `other_value`로 설정하면, `my_value`가 `other_value`로 바뀝니다. 마찬가지로, 도커 이미지에 값이 `/usr/local/sbin:/usr/local/bin`인 `PATH`라는 환경 변수가 이미 포함되어 있는데, 사용자가 `PATH` 환경 변수의 값을 `$PATH:/usr/share/ant/bin`으로 설정하면, `/usr/local/sbin:/usr/local/bin`이 `$PATH:/usr/share/ant/bin` 리터럴 값으로 바뀝니다.

   `CODEBUILD_`로 시작하는 이름으로 환경 변수를 설정하지 마십시오. 이 접두사는 내부 전용으로 예약되어 있습니다.

   여러 위치에서 동일한 이름의 환경 변수가 정의되는 경우, 다음과 같이 환경 변수 값이 결정됩니다.
   + 시작 빌드 작업 호출의 값이 가장 높은 우선 순위를 갖습니다.
   + 빌드 프로젝트 정의의 값이 다음 우선 순위를 갖습니다.
   + buildspec 파일 선언의 값이 가장 낮은 우선 순위를 갖습니다.

   이 자리 표시자의 유효한 값에 대한 자세한 정보는 [빌드 프로젝트 생성(AWS CLI)](create-project.md#create-project-cli) 단원을 참조하십시오. 빌드 프로젝트의 최신 설정 목록은 [빌드 프로젝트 세부 정보 보기](view-project-details.md) 단원을 참조하십시오.

1. 방금 저장한 파일이 들어 있는 디렉터리로 전환한 다음, `start-build` 명령을 다시 실행합니다.

   ```
   aws codebuild start-build --cli-input-json file://start-build.json
   ```

1. 이 명령이 제대로 실행되면 [빌드를 실행하려면](getting-started-overview.md#getting-started-run-build-cli) 절차에 설명된 것과 유사한 데이터가 출력에 표시됩니다.

이 빌드에 대한 자세한 정보를 보려면 출력에서 `id` 값을 적어 둔 다음 [빌드 세부 정보 보기(AWS CLI)](view-build-details.md#view-build-details-cli) 단원을 참조하십시오.

# 배치 빌드 실행(AWS CLI)
<a name="run-batch-build-cli"></a>

1. 다음 중 한 방법으로 `start-build-batch` 명령을 실행합니다.

   ```
   aws codebuild start-build-batch --project-name <project-name>
   ```

   빌드 입력 결과물의 최신 버전과 빌드 프로젝트의 기존 설정을 사용하는 빌드를 실행하려면 이 방법을 사용합니다.

   ```
   aws codebuild start-build-batch --generate-cli-skeleton > <json-file>
   ```

   이전 버전의 빌드 입력 결과물을 사용하여 빌드를 실행하려는 경우 또는 빌드 출력 결과물, 환경 변수, buildspec 또는 기본 빌드 제한 시간의 설정을 재정의하려는 경우 이 방법을 사용합니다.

1. **start-build-batch** 명령을 `--project-name` 옵션과 함께 실행하는 경우 *<project-name>*을 빌드 프로젝트의 이름으로 바꾼 다음 이 절차의 6단계로 이동합니다. 빌드 프로젝트 목록을 가져오려면 [빌드 프로젝트 이름 보기](view-project-list.md) 단원을 참조하십시오.

1. **start-build-batch** 명령을 `--idempotency-token` 옵션과 함께 실행하면 고유의 대소문자 구분 식별자 또는 토큰이 `start-build-batch` 요청에 포함됩니다. 토큰은 요청 후 5분 동안 유효합니다. 동일한 토큰을 사용하여 `start-build-batch` 요청을 반복하고 파라미터를 변경하면 CodeBuild는 파라미터 불일치 오류를 반환합니다.

1. **start-build-batch** 명령을 `--generate-cli-skeleton` 옵션과 함께 실행하는 경우 JSON 형식 데이터가 *<json-file>* 파일에 출력됩니다. 이 파일은 **start-build** 명령으로 생성된 스켈레톤과 비슷하지만 다음 객체가 추가되었습니다. 일반 객체에 대한 자세한 내용은 [빌드 실행(AWS CLI)](run-build-cli.md) 섹션을 참조하세요.

   이 파일을 수정하여 빌드 재정의를 추가하고 결과를 저장하세요.

   ```
     "buildBatchConfigOverride": {
       "combineArtifacts": combineArtifacts,
       "restrictions": {
         "computeTypesAllowed": [
           allowedComputeTypes
         ],
         "maximumBuildsAllowed": maximumBuildsAllowed
       },
       "serviceRole": "batchServiceRole",
       "timeoutInMins": batchTimeout
     }
   ```

   `buildBatchConfigOverride` 객체는 이 빌드에 대한 배치 빌드 구성 재정의를 포함하는 [ProjectBuildBatchConfig](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectBuildBatchConfig.html) 구조입니다.  
*combineArtifacts*  
배치 빌드의 빌드 아티팩트를 단일 아티팩트 위치로 결합할지 여부를 지정하는 부울입니다.  
*allowedComputeTypes*  
배치 빌드에 허용되는 컴퓨팅 유형을 지정하는 문자열 배열입니다. 이러한 값은 [빌드 환경 컴퓨팅 유형](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html)를 참조하세요.  
*maximumBuildsAllowed*  
허용되는 최대 빌드 수를 지정합니다.  
*batchServiceRole*  
배치 빌드 프로젝트에 대한 서비스 역할 ARN을 지정합니다.  
*batchTimeout*  
배치 빌드를 완료해야 하는 최대 시간(분)을 지정합니다.

1. 방금 저장한 파일이 들어 있는 디렉터리로 전환한 다음, `start-build-batch` 명령을 다시 실행합니다.

   ```
   aws codebuild start-build-batch --cli-input-json file://start-build.json
   ```

1. 성공하면 [BuildBatch](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_BuildBatch.html) 객체의 JSON 표현이 콘솔 출력에 나타납니다. 이 데이터의 예는 [StartBuildBatch 응답 구문](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuildBatch.html#API_StartBuildBatch_ResponseSyntax)을 참조하세요.

# 빌드 실행 자동 시작(AWS CLI)
<a name="run-build-cli-auto-start"></a>

소스 코드가 GitHub 또는 GitHub Enterprise Server 리포지토리에 저장된 경우 코드 변경이 리포지토리로 푸시될 때마다 GitHub 웹후크를 사용하여 소스 코드를 AWS CodeBuild 다시 빌드할 수 있습니다.

다음과 같이 **create-webhook** 명령을 실행합니다.

```
aws codebuild create-webhook --project-name <project-name>
```

*<project-name>*은 다시 빌드할 소스 코드가 포함되어 있는 빌드 프로젝트의 이름입니다.

GitHub의 경우, 다음과 비슷한 정보가 결과에 나타납니다.

```
{
  "webhook": {
    "url": "<url>"
  }
}
```

*<url>*은 GitHub Webhook에 대한 URL입니다.

GitHub Enterprise Server의 경우, 다음과 비슷한 정보가 결과에 나타납니다.

![\[샘플 출력 정보.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/create-webhook-ghe.png)


1. 출력에서 보안 키 및 페이로드 URL을 복사합니다. 이들 값은 GitHub Enterprise Server에 Webhook를 추가할 때 필요합니다.

1. GitHub Enterprise Server에서 CodeBuild 프로젝트가 저장된 리포지토리를 선택합니다. **설정**, **Hooks & services(후크 및 서비스)**, **Add webhook(webhook 추가)**를 차례로 선택합니다.

1. 페이로드 URL 및 보안 키를 입력하고 그 외 필드에 대해서는 기본값을 수락한 다음 [**Add webhook**]를 선택합니다.

# 빌드 실행 자동 중지(AWS CLI)
<a name="run-build-cli-auto-stop"></a>

소스 코드가 GitHub 또는 GitHub Enterprise Server 리포지토리에 저장된 경우 코드 변경이 리포지토리로 푸시될 때마다 소스 코드를 AWS CodeBuild 다시 빌드하도록 GitHub 웹후크를 설정할 수 있습니다. 자세한 내용은 [빌드 실행 자동 시작(AWS CLI)](run-build-cli-auto-start.md) 단원을 참조하십시오.

이 동작을 활성화한 경우 다음과 같이 `delete-webhook` 명령을 실행하여 해제할 수 있습니다.

```
aws codebuild delete-webhook --project-name <project-name>
```
+ *<project-name>*은 다시 빌드할 소스 코드가 포함되어 있는 빌드 프로젝트의 이름입니다.

이 명령이 제대로 실행되면 출력에 정보나 오류가 표시되지 않습니다.

**참고**  
이렇게 하면 Webhook가 CodeBuild 프로젝트에서만 삭제됩니다. Webhook를 GitHub 또는 GitHub Enterprise Server 리포지토리에서도 삭제해야 합니다.

# 빌드 실행(AWS SDKs)
<a name="run-build-sdks"></a>

CodePipeline을 사용하여 빌드를 실행하려면이 단계를 AWS CodeBuild건너뛰고 [와 AWS CodeBuild 함께 AWS CodePipeline 를 사용하여 코드를 테스트하고 빌드를 실행합니다.](how-to-create-pipeline.md) 대신의 지침을 따르세요.

CodeBuild를 AWS SDKs와 함께 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요[AWS SDKs 및 도구 참조](sdk-ref.md).

# 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에 추가합니다.

# 예약 용량 플릿에서 빌드 실행
<a name="fleets"></a>

CodeBuild는 다음과 같은 컴퓨팅 플릿을 제공합니다.
+ 온디맨드 플릿
+ 예약 용량 플릿

CodeBuild는 온디맨드 플릿을 통해 빌드에 맞는 컴퓨팅 기능을 제공합니다. 빌드가 완료되면 머신이 파괴됩니다. 온디맨드 플릿은 완전 관리형이며, 수요 급증을 처리할 수 있는 자동 규모 조정 기능이 포함되어 있습니다.

**참고**  
온디맨드 플릿은 macOS를 지원하지 않습니다.

CodeBuild는 또한 CodeBuild에서 유지 관리하는 Amazon EC2 기반 인스턴스를 포함하는 예약 용량 플릿을 제공합니다. 예약 용량 플릿을 사용하면 빌드 환경을 위한 전용 인스턴스 세트를 구성할 수 있습니다. 이러한 머신은 유휴 상태로 유지되므로 빌드 또는 테스트를 즉시 처리하고 빌드 기간을 단축할 수 있습니다. 예약 용량 플릿을 사용하면 머신이 상시 가동되므로 프로비저닝하는 한 계속해서 비용이 발생합니다.

**중요**  
인스턴스 실행 시간에 관계없이 예약 용량 플릿에서는 인스턴스당 초기 요금이 발생하며, 그 이후에는 추가 관련 비용이 발생할 수 있습니다. 자세한 내용은 [https://aws.amazon.com/codebuild/pricing/](https://aws.amazon.com/codebuild/pricing/) 단원을 참조하십시오.

**Topics**
+ [예약 용량 플릿 생성](#fleets.how-to)
+ [모범 사례](#fleets.best-practices)
+ [예약 용량 플릿을 여러 CodeBuild 프로젝트에서 공유할 수 있습니까?](#fleets.share)
+ [속성 기반 컴퓨팅은 어떻게 작동하나요?](#fleets.attribute-compute)
+ [플릿에 Amazon EC2 인스턴스를 수동으로 지정할 수 있나요?](#fleets.manual-input-compute)
+ [예약 용량 플릿을 지원하는 리전은 어디입니까?](#fleets.regions)
+ [예약 용량 macOS 플릿을 구성하려면 어떻게 해야 합니까?](#fleets.configure-macos)
+ [예약 용량 플릿에 대한 사용자 지정 Amazon Machine Image(AMI)를 구성하려면 어떻게 해야 하나요?](#fleets.custom-ami)
+ [예약 용량 플릿의 제한](#fleets.limitations)
+ [예약 용량 플릿 속성](fleets.reserved-capacity-fleets.md)
+ [를 사용한 예약 용량 샘플 AWS CodeBuild](reserved-capacity-samples.md)

## 예약 용량 플릿 생성
<a name="fleets.how-to"></a>

다음 지침에 따라 예약 용량 플릿을 생성합니다.

**예약 용량 플릿 생성**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 탐색 창에서 **컴퓨팅 플릿**을 선택한 다음, **플릿 생성**을 선택합니다.

1. **컴퓨팅 플릿 이름** 텍스트 필드에 플릿의 이름을 입력합니다.

1. **운영 체제** 드롭다운 메뉴에서 운영 체제를 선택합니다.

1. **아키텍처** 드롭다운 메뉴에서 아키텍처를 선택합니다.

1. (선택 사항) Docker 컨테이너 대신 Amazon EC2 인스턴스에서 직접 실행하려면 **인스턴스 실행 모드 사용 - 선택 사항**을 선택합니다. 그런 다음 **메이저 버전**과 **마이너 버전**을 선택합니다.

1. (선택 사항) **추가 구성**에서 다음을 수행합니다.
   + **VPC 구성 - 선택 사항**을 선택하여 사용 중에 프라이빗 리소스에 액세스하기 위해 플릿을 VPC에 연결합니다.
     + **VPC** 드롭다운 메뉴에서 CodeBuild 플릿이 액세스할 VPC를 선택합니다.
     + **서브넷** 드롭다운 메뉴에서 CodeBuild가 VPC 구성을 설정하는 데 사용할 서브넷을 선택합니다.
     + **보안 그룹** 드롭다운 메뉴에서 CodeBuild가 VPC와 함께 작동하는 데 사용해야 하는 보안 그룹을 선택합니다.
     + **플릿 서비스 역할** 필드에서 기존 서비스 역할을 선택합니다.
**참고**  
플릿 역할에 필요한 권한이 있는지 확인합니다. 자세한 내용은 [사용자가 플릿 서비스 역할에 대한 권한 정책을 추가하도록 허용](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-permission-policy-fleet-service-role) 단원을 참조하십시오.
     + Amazon Linux 운영 체제를 선택한 경우 **프록시 구성 정의 - 선택 사항**을 선택하여 예약 용량 인스턴스에 네트워크 액세스 제어를 적용합니다.
     + **기본 동작**에서 기본적으로 모든 대상에 대한 발신 트래픽을 허용하거나 거부하도록 선택합니다.
     + **프록시 규칙**에서 **프록시 규칙 추가**를 선택하여 네트워크 액세스 제어를 허용하거나 거부할 대상 도메인 또는 IP를 지정합니다.
   + 사용자 지정 Amazon Machine Image(AMI)를 사용하려면 **사용자 지정 AMI 구성 - 선택 사항**을 선택합니다.
     + **AMI** 드롭다운 메뉴에서 플릿의 Amazon Machine Image(AMI)를 선택합니다.
     + **플릿 서비스 역할** 필드에서 기존 서비스 역할을 선택합니다.
**참고**  
플릿 역할에 필요한 권한이 있는지 확인합니다. 자세한 내용은 [사용자가 플릿 서비스 역할에 대한 권한 정책을 추가하도록 허용](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-permission-policy-fleet-service-role) 단원을 참조하십시오.

1. **용량 구성**의 **컴퓨팅 선택 모드**에서 다음 중 하나를 선택합니다.
   + **안내형 선택**을 선택하는 경우 다음을 수행합니다.
     + **컴퓨팅**에서 이 플릿에 포함된 인스턴스 유형을 선택합니다.
     + **용량** 텍스트 필드에 플릿의 최소 인스턴스 수를 입력합니다.
     + (선택 사항) **추가 구성**에서 다음을 수행합니다.
       + 이 구성을 기반으로 플릿 규모를 자동으로 조정하려면 **조정 구성 - 선택 사항**을 선택합니다. **조정 모드 - 선택 사항** 드롭다운 메뉴에서 수요가 플릿 용량을 초과할 때의 동작을 선택합니다.
   + **사용자 지정 인스턴스**를 선택하는 경우 다음을 수행합니다.
     + **컴퓨팅 인스턴스 유형** 드롭다운 메뉴에서 이 플릿에 포함된 인스턴스 유형을 선택합니다.
     + **추가 EBS 볼륨 크기 - 선택 사항** 텍스트 필드에 제공된 64GB의 디스크 공간에 추가된 볼륨을 입력합니다.
     + **용량** 텍스트 필드에 플릿의 최소 인스턴스 수를 입력합니다.
     + (선택 사항) **추가 구성**에서 다음을 수행합니다.
       + 이 구성을 기반으로 플릿 규모를 자동으로 조정하려면 **조정 구성 - 선택 사항**을 선택합니다. **조정 모드 - 선택 사항** 드롭다운 메뉴에서 수요가 플릿 용량을 초과할 때의 동작을 선택합니다.

1. **컴퓨팅 플릿 생성**을 선택합니다.

1. 컴퓨팅 플릿이 생성된 후 새 CodeBuild 프로젝트를 만들거나 기존 프로젝트를 편집합니다. **환경**에서 **프로비저닝 모델**의 **예약 용량**을 선택한 다음 **플릿 이름**에서 지정된 플릿을 선택합니다.

## 모범 사례
<a name="fleets.best-practices"></a>

예약 용량 플릿을 사용할 때는 다음 모범 사례를 따르는 것이 좋습니다.
+ 소스를 캐싱하여 빌드 성능을 향상시키려면 소스 캐시 모드를 사용하는 것이 좋습니다.
+ 기존 Docker 계층을 캐싱하여 빌드 성능을 개선하려면 Docker 계층 캐싱을 사용하는 것이 좋습니다.

## 예약 용량 플릿을 여러 CodeBuild 프로젝트에서 공유할 수 있습니까?
<a name="fleets.share"></a>

예. 여러 프로젝트에서 플릿을 사용하여 플릿의 용량 활용도를 극대화할 수 있습니다.

**중요**  
예약 용량 기능을 사용할 때 소스 파일, Docker 계층, 빌드스펙에 지정된 캐시된 디렉터리를 포함하여 플릿 인스턴스에 캐시된 데이터를 동일한 계정 내의 다른 프로젝트에서 액세스할 수 있습니다. 이는 의도적으로 설계된 것이며 동일한 계정 내의 프로젝트가 플릿 인스턴스를 공유할 수 있도록 허용합니다.

## 속성 기반 컴퓨팅은 어떻게 작동하나요?
<a name="fleets.attribute-compute"></a>

플릿의 `computeType`로 `ATTRIBUTE_BASED_COMPUTE`를 선택하면 `computeConfiguration`이라는 새로운 필드에 속성을 지정할 수 있습니다. 이러한 속성에는 vCPU, 메모리, 디스크 공간 및 `machineType`이 포함됩니다. 이 `machineType`는 `GENERAL` 또는 `NVME`입니다. 사용 가능한 속성 중 하나 또는 여러 개를 지정한 후 CodeBuild는 사용 가능한 지원되는 인스턴스 유형에서 컴퓨팅 유형을 완료된 `computeConfiguration`으로 선택합니다.

**참고**  
CodeBuild는 모든 입력 요구 사항에 맞는 가장 저렴한 인스턴스를 선택합니다. 선택한 인스턴스의 메모리, vCPU 및 디스크 공간은 모두 입력 요구 사항보다 크거나 같습니다. 생성되거나 업데이트된 플릿에서 확인된 `computeConfiguration`을 확인할 수 있습니다.

CodeBuild에서 충족할 수 없는 `computeConfiguration`을 입력하면 검증 예외가 발생합니다. 또한, `computeConfiguration`을 온디맨드로 사용할 수 없는 경우 온디맨드 플릿 오버플로 동작이 대기열 동작으로 재정의된다는 점에 유의하세요.

## 플릿에 Amazon EC2 인스턴스를 수동으로 지정할 수 있나요?
<a name="fleets.manual-input-compute"></a>

예. **사용자 지정 인스턴스**를 선택하거나 `InstanceType` API 파라미터를 구성하여 콘솔에 원하는 Amazon EC2 인스턴스를 직접 입력할 수 있습니다. 이 필드는 CreateFleet, UpdateFleet, CreateProject, UpdateProject, StartBuild API에서 사용됩니다. 자세한 내용은 [Compute instance type](fleets.reserved-capacity-fleets.md#compute) 단원을 참조하십시오.

## 예약 용량 플릿을 지원하는 리전은 어디입니까?
<a name="fleets.regions"></a>

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

예약 용량 macOS Medium 플릿은 AWS 리전미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오레곤), 아시아 태평양(시드니), 유럽(프랑크푸르트)에서 지원됩니다. 예약 용량 macOS 대규모 플릿은 AWS 리전미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오레곤), 아시아 태평양(시드니)에서 지원됩니다.

## 예약 용량 macOS 플릿을 구성하려면 어떻게 해야 합니까?
<a name="fleets.configure-macos"></a>

**예약 용량 macOS 플릿을 구성하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 탐색 창에서 **컴퓨팅 플릿**을 선택한 다음, **플릿 생성**을 선택합니다.

1. **컴퓨팅 플릿 이름** 텍스트 필드에 플릿의 이름을 입력합니다.

1. **운영 체제** 드롭다운 메뉴에서 **macOS**를 선택합니다.

1. **컴퓨팅** 필드에서 **Apple M2, 24GB 메모리, 8 vCPU** 또는 **Apple M2, 32GB 메모리, 12 vCPU** 컴퓨팅 머신 유형 중 하나를 선택합니다.

1. **용량** 텍스트 필드에 플릿의 최소 인스턴스 수를 입력합니다.

1. (선택 사항) 플릿에 사용자 지정 이미지를 사용하려면 [예약 용량 플릿에 대한 사용자 지정 Amazon Machine Image(AMI)를 구성하려면 어떻게 해야 하나요?](#fleets.custom-ami)의 내용을 참조하여 Amazon Machine Image(AMI)에 필요한 사전 요구 사항이 있는지 확인합니다.

1. (선택 사항) 플릿으로 VPC를 구성하려면 **추가 구성**에서 다음을 수행합니다.
   + **VPC - 선택 사항** 드롭다운 메뉴에서 CodeBuild 플릿이 액세스할 VPC를 선택합니다.
   + **서브넷** 드롭다운 메뉴에서 CodeBuild가 VPC 구성을 설정하는 데 사용할 서브넷을 선택합니다.
   + **보안 그룹** 드롭다운 메뉴에서 CodeBuild가 VPC와 함께 작동하는 데 사용해야 하는 보안 그룹을 선택합니다.
   + **플릿 서비스 역할** 필드에서 기존 서비스 역할을 선택합니다.
**참고**  
플릿 역할에 필요한 권한이 있는지 확인합니다. 자세한 내용은 [사용자가 플릿 서비스 역할에 대한 권한 정책을 추가하도록 허용](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-permission-policy-fleet-service-role) 단원을 참조하십시오.

1. **컴퓨팅 플릿 생성**을 선택하고 플릿 인스턴스가 시작될 때까지 기다립니다. 시작되면 용량은 `n/n`이며, 여기서 *n*은 제공된 용량입니다.

1. 컴퓨팅 플릿이 시작된 후 새 CodeBuild 프로젝트를 만들거나 기존 프로젝트를 편집합니다. **환경**에서 **프로비저닝 모델**의 **예약 용량**을 선택한 다음 **플릿 이름**에서 지정된 플릿을 선택합니다.

## 예약 용량 플릿에 대한 사용자 지정 Amazon Machine Image(AMI)를 구성하려면 어떻게 해야 하나요?
<a name="fleets.custom-ami"></a>

**예약 용량 플릿에 대한 사용자 지정 Amazon Machine Image(AMI)를 구성하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 탐색 창에서 **컴퓨팅 플릿**을 선택한 다음, **플릿 생성**을 선택합니다.

1. **컴퓨팅 플릿 이름** 텍스트 필드에 플릿의 이름을 입력합니다.

1. 플릿에 대해 **사용자 지정 이미지**를 선택하고 Amazon Machine Image(AMI)에 다음과 같은 사전 조건이 있는지 확인합니다.
   + 환경 유형이 `MAC_ARM`인 경우 AMI **아키텍처**가 64비트 `Mac-Arm`인지 확인합니다.
   + 환경 유형이 `LINUX_EC2`인 경우 AMI **아키텍처**가 64비트 `x86`인지 확인합니다.
   + 환경 유형이 `ARM_EC2`인 경우 AMI **아키텍처**가 64비트 `Arm`인지 확인합니다.
   + 환경 유형이 `WINDOWS_EC2`인 경우 AMI **아키텍처**가 64비트 `x86`인지 확인합니다.
   + AMI는 CodeBuild 서비스 **조직 ARN**을 허용합니다. 조직 ARN 목록은 [Amazon Machine Images (AMI)](fleets.reserved-capacity-fleets.md#ami) 섹션을 참조하세요.
   + AMI가 AWS KMS 키로 암호화된 경우 AWS KMS 키는 CodeBuild 서비스 **조직 ID**도 허용해야 합니다. 조직 ID 목록은 [Amazon Machine Images (AMI)](fleets.reserved-capacity-fleets.md#ami) 섹션을 참조하세요. AWS KMS 키에 대한 자세한 내용은 *Amazon EC2 사용 설명서*의 [ 조직 및 OUs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/share-amis-with-organizations-and-OUs.html#allow-org-ou-to-use-key)하세요. CodeBuild 조직에 KMS 키를 사용할 수 있는 권한을 부여하려면 다음 명령문을 키 정책에 추가합니다.

     ```
     {
         "Sid": "Allow access for organization root",
         "Effect": "Allow",
         "Principal": "*",
         "Action": [
             "kms:Describe*",
             "kms:List*",
             "kms:Get*",
             "kms:Encrypt",
             "kms:Decrypt",
             "kms:ReEncrypt*",
             "kms:GenerateDataKey*",
             "kms:CreateGrant"
         ],
         "Resource": "*",
         "Condition": {
             "StringEquals": {
                 "aws:PrincipalOrgID": "o-123example"
             }
         }
     }
     ```
   + **플릿 서비스 역할** 필드에서 다음 Amazon EC2 권한을 부여합니다.

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

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                    "ec2:DescribeImages",
                    "ec2:DescribeSnapshots"
                 ],
                 "Resource": "*"
             }
         ]
     }
     ```

------

## 예약 용량 플릿의 제한
<a name="fleets.limitations"></a>

예약 용량 플릿이 지원하지 않는 몇 가지 사용 사례가 있으며, 이로 인해 영향을 받는 경우에는 온디맨드 플릿을 대신 사용하십시오.
+ 예약 용량 플릿은 빌드 사용률 지표를 지원하지 않습니다.
+ 예약 용량 macOS 플릿은 디버그 세션을 지원하지 않습니다.

제한과 할당량에 대한 자세한 내용은 [컴퓨팅 플릿](limits.md#fleet-limits) 섹션을 참조하십시오.

# 예약 용량 플릿 속성
<a name="fleets.reserved-capacity-fleets"></a>

예약 용량 플릿에는 다음 속성이 포함됩니다. 예약 용량 플릿에 대한 자세한 내용은 [예약 용량 플릿에서 빌드 실행](fleets.md) 섹션을 참조하세요.

**운영 체제**  
운영 체제입니다. 사용할 수 있는 운영 체제는 다음과 같습니다.  
+ Amazon Linux
+ macOS
+ Windows Server 2019
+ Windows Server 2022

**아키텍처**  
프로세서 아키텍처. 사용할 수 있는 아키텍처는 다음과 같습니다.  
+ x86\$164
+ Arm64

**환경 유형**  
**Amazon Linux**를 선택할 때 사용할 수 있는 환경 유형입니다. 다음은 사용할 수 있는 환경 키입니다.  
+ Linux EC2
+ Linux GPU

**컴퓨팅 인스턴스 유형**  
플릿 인스턴스의 컴퓨팅 구성입니다.    
**안내형 선택**  
vCPU, 메모리 및 디스크 공간 설정을 선택하여 다양한 컴퓨팅 유형을 지정합니다. 리전별 컴퓨팅 유형 가용성에 대한 내용은 [예약 용량 환경 유형 정보](build-env-ref-compute-types.md#environment-reserved-capacity.types)를 참조하세요.  
**사용자 지정 인스턴스**  
원하는 인스턴스 유형을 수동으로 지정합니다.

**Capacity**  
플릿에 할당된 초기 머신 수로, 병렬로 실행할 수 있는 빌드 수를 정의합니다.

**오버플로 동작**  
빌드 수가 플릿 용량을 초과할 때의 동작을 정의합니다.    
**온디맨드**  
오버플로 빌드는 CodeBuild 온디맨드에서 실행됩니다.  
VPC 연결 플릿을 생성하는 동안 오버플로 동작을 온디맨드로 설정하도록 선택한 경우 프로젝트 서비스 역할에 필요한 VPC 권한을 추가해야 합니다. 자세한 내용은 VPC 네트워크 인터페이스를 생성하는 데 필요한 AWS 서비스에 [CodeBuild 액세스를 허용하는 정책 설명 예제](auth-and-access-control-iam-identity-based-access-control.md#customer-managed-policies-example-create-vpc-network-interface)를 참조하세요.
오버플로 동작을 온디맨드로 설정하도록 선택하면 온디맨드 Amazon EC2와 마찬가지로 오버플로 빌드에 별도로 요금이 청구됩니다. 자세한 내용은 [https://aws.amazon.com/codebuild/pricing/](https://aws.amazon.com/codebuild/pricing/) 단원을 참조하십시오.  
**대기열**  
머신을 사용할 수 있을 때까지 빌드 실행이 대기열에 배치됩니다. 이렇게 하면 추가 머신이 할당되지 않으므로 추가 비용이 제한됩니다.

**Amazon Machine Image(AMI)**  
플릿의 Amazon Machine Image(AMI) 속성입니다. CodeBuild에서 다음 속성이 지원됩니다.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/fleets.reserved-capacity-fleets.html)

**추가 구성**    
**VPC - 선택 사항**  
CodeBuild 플릿이 액세스할 VPC입니다. 자세한 내용은 [Amazon Virtual Private Cloud AWS CodeBuild 와 함께 사용](vpc-support.md) 단원을 참조하십시오.  
StartBuild API를 직접 호출할 때 플릿 재정의가 지정되면 CodeBuild는 프로젝트 VPC 구성을 무시합니다.  
**서브넷**  
CodeBuild가 VPC 구성을 설정하는 데 사용하는 VPC 서브넷입니다. 예약 용량 플릿은 단일 가용 영역에서 하나의 서브넷만 지원합니다. 또한 서브넷에 NAT 게이트웨이가 포함되어 있는지 확인합니다.  
**보안 그룹**  
CodeBuild가 VPC와 함께 사용하는 VPC 보안 그룹입니다. 보안 그룹이 아웃바운드 연결을 허용하는지 확인합니다.  
**플릿 서비스 역할**  
계정의 기존 서비스 역할에서 플릿의 서비스 역할을 정의합니다.  
**프록시 구성 정의 - 선택 사항**  
예약 용량 인스턴스에 네트워크 액세스 제어를 적용하는 프록시 구성입니다. 자세한 내용은 [관리형 프록시 서버와 AWS CodeBuild 함께 사용](run-codebuild-in-managed-proxy-server.md) 단원을 참조하십시오.  
프록시 구성은 VPC, Windows 또는 MacOS를 지원하지 않습니다.  
**기본 동작**  
발신 트래픽의 동작을 정의합니다.    
**허용**  
기본적으로 모든 대상으로 전송되는 트래픽을 허용합니다.  
**거부**  
기본적으로 모든 대상으로 전송되는 트래픽을 거부합니다.  
**프록시 규칙**  
네트워크 액세스 제어를 허용하거나 거부할 대상 도메인 또는 IP를 지정합니다.

# 를 사용한 예약 용량 샘플 AWS CodeBuild
<a name="reserved-capacity-samples"></a>

이 샘플은 CodeBuild 내 예약 용량 플릿을 실험하는 데 사용할 수 있습니다.

**Topics**
+ [예약 용량 샘플을 사용한 캐싱](#reserved-capacity-samples.caching)

## 예약 용량 샘플을 사용한 캐싱
<a name="reserved-capacity-samples.caching"></a>

캐시는 빌드 환경에서 재사용할 수 있는 정보를 저장하여 여러 빌드에 사용할 수 있습니다. 이 샘플은 예약 용량을 사용하여 빌드 프로젝트 내에서 캐싱을 활성화하는 방법을 보여주었습니다. 자세한 내용은 [성능을 개선하기 위한 캐시 빌드](build-caching.md) 단원을 참조하십시오.

프로젝트 설정에서 하나 이상의 캐시 모드를 지정하여 시작할 수 있습니다.

```
Cache:
        Type: LOCAL
        Modes:
          - LOCAL_CUSTOM_CACHE
          - LOCAL_DOCKER_LAYER_CACHE
          - LOCAL_SOURCE_CACHE
```

**참고**  
Docker 계층 캐시를 사용하려면 권한 모드를 활성화해야 합니다.

프로젝트 buildspec 설정이 다음과 같아야 합니다.

```
version: 0.2
      phases:
        build:
          commands:
            - echo testing local source cache
            - touch /codebuild/cache/workspace/foobar.txt
            - git checkout -b cached_branch
            - echo testing local docker layer cache
            - docker run alpine:3.14 2>&1 | grep 'Pulling from' || exit 1
            - echo testing local custom cache
            - touch foo
            - mkdir bar && ln -s foo bar/foo2
            - mkdir bar/bar && touch bar/bar/foo3 && touch bar/bar/foo4
            - "[ -f foo ] || exit 1"
            - "[ -L bar/foo2 ] || exit 1"
            - "[ -f bar/bar/foo3 ] || exit 1"
            - "[ -f bar/bar/foo4 ] || exit 1"
      cache:
        paths:
           - './foo'
           - './bar/**/*'
           - './bar/bar/foo3'
```

캐시를 시드하는 새 프로젝트로 빌드를 실행하여 시작할 수 있습니다. 작업이 완료되면 다음과 같이 buildspec을 재정의하는 다른 빌드를 시작해야 합니다.

```
version: 0.2
      phases:
        build:
          commands:
            - echo testing local source cache
            - git branch | if grep 'cached_branch'; then (exit 0); else (exit 1); fi
            - ls /codebuild/cache/workspace | if grep 'foobar.txt'; then (exit 0); else (exit 1); fi
            - echo testing local docker layer cache
            - docker run alpine:3.14 2>&1 | if grep 'Pulling from'; then (exit 1); else (exit 0); fi
            - echo testing local custom cache
            - "[ -f foo ] || exit 1"
            - "[ -L bar/foo2 ] || exit 1"
            - "[ -f bar/bar/foo3 ] || exit 1"
            - "[ -f bar/bar/foo4 ] || exit 1"
      cache:
        paths:
           - './foo'
           - './bar/**/*'
           - './bar/bar/foo3'
```

# 배치로 빌드 실행
<a name="batch-build"></a>

 AWS CodeBuild 를 사용하여 배치 빌드가 있는 프로젝트의 동시 및 조정된 빌드를 실행할 수 있습니다.

**Topics**
+ [보안 역할](#batch_security_role)
+ [배치 빌드 유형](#batch_build_types)
+ [배치 보고서 모드](#batch-report-mode)
+ [추가 정보](#batch_more_info)

## 보안 역할
<a name="batch_security_role"></a>

배치 빌드는 배치 구성에 새로운 보안 역할을 도입합니다. CodeBuild가 사용자 대신 `StartBuild`, `StopBuild` 및 `RetryBuild` 작업을 호출하여 배치의 일부로 빌드를 실행할 수 있어야 하므로 이 새 역할이 필요합니다. 고객은 다음과 같은 두 가지 이유로 빌드에 사용하는 것과 동일한 역할이 아닌 새 역할을 사용해야 합니다.
+ 빌드 역할 `StartBuild`, `StopBuild` 및 `RetryBuild` 권한을 부여하면 단일 빌드에서 buildspec을 통해 더 많은 빌드를 시작할 수 있습니다.
+ CodeBuild 배치 빌드는 배치의 빌드에 사용할 수 있는 빌드 및 컴퓨팅 유형의 수를 제한하는 제한을 제공합니다. 빌드 역할에 이러한 권한이 있는 경우 빌드 자체가 이러한 제한을 우회할 수 있습니다.

## 배치 빌드 유형
<a name="batch_build_types"></a>

CodeBuild는 다음과 같은 배치 빌드 유형을 지원합니다.

**Topics**
+ [빌드 그래프](#batch_build_graph)
+ [빌드 목록](#batch_build_list)
+ [빌드 매트릭스](#batch_build_matrix)
+ [빌드 팬아웃](#batch_build_fanout)

### 빌드 그래프
<a name="batch_build_graph"></a>

빌드 그래프는 일괄 처리의 다른 태스크에 종속되는 일련의 태스크를 정의합니다.

다음 예제는 종속성 체인을 생성하는 빌드 그래프를 정의합니다.

```
batch:
  fast-fail: false
  build-graph:
    - identifier: build1
      env:
        variables:
          BUILD_ID: build1
      ignore-failure: false
    - identifier: build2
      buildspec: build2.yml
      env:
        variables:
          BUILD_ID: build2
      depend-on:
        - build1
    - identifier: build3
      env:
        variables:
          BUILD_ID: build3
      depend-on:
        - build2
    - identifier: build4
      env:
        compute-type: ARM_LAMBDA_1GB
    - identifier: build5
      env:
        fleet: fleet_name
```

이 예제에서는 다음이 적용됩니다.
+ 종속성이 없으므로 `build1`이 먼저 실행됩니다.
+ `build2`는 `build1`에 종속되어 있으므로 `build2`는 `build1` 완료 후에 실행됩니다.
+ `build3`는 `build2`에 종속되어 있으므로 `build3`는 `build2` 완료 후에 실행됩니다.

빌드 그래프 buildspec 구문에 대한 자세한 내용은 [`batch/build-graph`](batch-build-buildspec.md#build-spec.batch.build-graph) 섹션을 참조하세요.

### 빌드 목록
<a name="batch_build_list"></a>

빌드 목록은 병렬로 실행되는 여러 태스크를 정의합니다.

다음 예제에서는 빌드 목록을 정의합니다. `build1` 및 `build2` 빌드는 병렬로 실행됩니다.

```
batch:
  fast-fail: false
  build-list:
    - identifier: build1
      env:
        variables:
          BUILD_ID: build1
      ignore-failure: false
    - identifier: build2
      buildspec: build2.yml
      env:
        variables:
          BUILD_ID: build2
      ignore-failure: true
    - identifier: build3
      env:
        compute-type: ARM_LAMBDA_1GB
    - identifier: build4
      env:
        fleet: fleet_name
    - identifier: build5
      env:
        compute-type: GENERAL_LINUX_XLAGRE
```

빌드 목록 buildspec 구문에 대한 자세한 내용은 [`batch/build-list`](batch-build-buildspec.md#build-spec.batch.build-list) 섹션을 참조하세요.

### 빌드 매트릭스
<a name="batch_build_matrix"></a>

빌드 매트릭스는 병렬로 실행되는 다양한 구성의 태스크를 정의합니다. CodeBuild는 가능한 각 구성 조합에 대해 별도의 빌드를 생성합니다.

다음 예제는 buildspec 파일 2개와 환경 변수 값 3개가 포함된 빌드 매트릭스를 보여 줍니다.

```
batch:
  build-matrix:
    static:
      ignore-failure: false
    dynamic:
      buildspec: 
        - matrix1.yml
        - matrix2.yml
      env:
        variables:
          MY_VAR:
            - VALUE1
            - VALUE2
            - VALUE3
```

이 예제에서 CodeBuild는 6개의 빌드를 생성합니다.
+ `$MY_VAR=VALUE1`가 있는 `matrix1.yml`
+ `$MY_VAR=VALUE2`가 있는 `matrix1.yml`
+ `$MY_VAR=VALUE3`가 있는 `matrix1.yml`
+ `$MY_VAR=VALUE1`가 있는 `matrix2.yml`
+ `$MY_VAR=VALUE2`가 있는 `matrix2.yml`
+ `matrix2.yml`가 있는 `$MY_VAR=VALUE3`

각 빌드에는 다음과 같은 설정이 있습니다.
+ `ignore-failure`가 `false`로 설정됨
+ `env/type`이 `LINUX_CONTAINER`로 설정됨
+ `env/image`이 `aws/codebuild/amazonlinux-x86_64-standard:4.0`로 설정됨
+ `env/privileged-mode`가 `true`로 설정됨

이러한 빌드는 병렬로 실행됩니다.

매트릭스 buildspec 구문에 대한 자세한 내용은 [`batch/build-matrix`](batch-build-buildspec.md#build-spec.batch.build-matrix) 섹션을 참조하세요.

### 빌드 팬아웃
<a name="batch_build_fanout"></a>

빌드 팬아웃은 배치에서 여러 빌드로 분할되는 작업을 정의합니다. 이는 테스트를 병렬로 실행하는 데 사용할 수 있습니다. CodeBuild는 `parallelism` 필드에 설정된 값을 기반으로 테스트 사례의 각 샤드에 대해 별도의 빌드를 생성합니다.

다음 예제에서는 병렬로 실행되는 5개의 빌드를 생성하는 빌드 팬아웃을 정의합니다.

```
version: 0.2

batch:
   fast-fail: false 
   build-fanout:
     parallelism: 5
     ignore-failure: false

phases:
  install:
    commands:
      - npm install
   build:
    commands:
      - mkdir -p test-results
      - cd test-results
      - |
        codebuild-tests-run \
         --test-command 'npx jest --runInBand --coverage' \
         --files-search "codebuild-glob-search '**/test/**/*.test.js'" \
         --sharding-strategy 'equal-distribution'
```

이 예제에서 실행해야 하는 테스트가 100개 있다고 가정하면 CodeBuild는 각각 20개의 테스트를 병렬로 실행하는 5개의 빌드를 생성합니다.

빌드 그래프 buildspec 구문에 대한 자세한 내용은 [`batch/build-fanout`](batch-build-buildspec.md#build-spec.batch.build-fanout) 섹션을 참조하세요.

## 배치 보고서 모드
<a name="batch-report-mode"></a>

프로젝트의 소스 공급자가 Bitbucket, GitHub 또는 GitHub Enterprise이고 프로젝트가 소스 공급자에게 빌드 상태를 보고하도록 구성된 경우 배치 빌드 상태를 소스 공급자에게 보내는 방법을 선택할 수 있습니다. 상태를 배치에 대한 단일 집계 상태 보고서로 전송하거나, 배치에 있는 각 빌드의 상태를 개별적으로 보고하도록 선택할 수 있습니다.

자세한 내용은 다음 항목을 참조하세요.
+ [빌드 구성(생성)](create-project.md#create-project-console-batch-config)
+ [빌드 구성(업데이트)](change-project.md#change-project-console-batch-config)

## 추가 정보
<a name="batch_more_info"></a>

자세한 내용은 다음 항목을 참조하세요.
+ [배치 빌드 buildspec 참조](batch-build-buildspec.md)
+ [배치 구성](create-project.md#create-project-console-batch-config)
+ [배치 빌드 실행(AWS CLI)](run-batch-build-cli.md)
+ [AWS CodeBuild에서 배치 빌드 중지](stop-batch-build.md)

# 배치 빌드에서 병렬 테스트 실행
<a name="parallel-test"></a>

 AWS CodeBuild 를 사용하여 배치 빌드에서 병렬 테스트를 실행할 수 있습니다. 병렬 테스트 실행은 순차적으로 실행하는 대신 다양한 환경, 시스템 또는 브라우저에서 여러 테스트 사례를 동시에 실행하는 테스트 접근 방식입니다. 이 접근 방식을 사용하면 전체 테스트 실행 시간을 크게 줄이고 테스트 효율성을 개선할 수 있습니다. CodeBuild에서는 테스트를 여러 환경으로 분할하고 동시에 실행할 수 있습니다.

병렬 테스트 실행의 주요 이점은 다음과 같습니다.

1. **실행 시간 단축** - 순차적으로 진행하면 몇 시간이 걸리는 테스트를 몇 분 만에 완료할 수 있습니다.

1. **리소스 사용률 향상** - 사용 가능한 컴퓨팅 리소스를 효율적으로 사용합니다.

1. **이른 피드백** - 테스트 완료 속도가 빨라지면 개발자에게 더 빠른 피드백을 제공할 수 있습니다.

1. **비용 효율성** - 장기적으로 시간과 컴퓨팅 비용을 모두 절감합니다.

병렬 테스트 실행을 구현할 때는 일반적으로 별도의 환경과 멀티스레딩이라는 2가지 주요 접근 방식을 고려합니다. 두 방법 모두 동시 테스트 실행을 달성하는 것을 목표로 하지만, 구현과 효율성은 크게 다릅니다. 별도의 환경은 각 테스트 제품군이 독립적으로 실행되는 격리된 인스턴스를 생성하는 반면, 멀티스레딩은 서로 다른 스레드를 사용하여 동일한 프로세스 공간 내에서 여러 테스트를 동시에 실행합니다.

멀티스레딩이 아닌 별도의 환경 사용 시 얻을 수 있는 주요 이점은 다음과 같습니다.

1. **격리** - 각 테스트는 완전히 격리된 환경에서 실행되어 테스트 간 간섭을 방지합니다.

1. **리소스 충돌** - 멀티스레딩에서 자주 발생하는 공유 리소스에 대한 경쟁이 없습니다.

1. **안정성** - 경쟁 조건 및 동기화 문제에 덜 취약합니다.

1. **더 쉬운 디버깅** - 테스트가 실패하면 각 환경이 독립적이므로 원인을 식별하기가 더 쉽습니다.

1. **상태 관리** - 멀티스레드 테스트에 부정적인 영향을 주는 공유 상태 문제를 편하게 관리할 수 있습니다.

1. **확장성 향상** - 복잡성 없이 더 많은 환경을 쉽게 추가할 수 있습니다.

**Topics**
+ [에서 지원 AWS CodeBuild](#parallel-test-support)
+ [배치 빌드에서 병렬 테스트 실행 활성화](parallel-test-enable.md)
+ [`codebuild-tests-run` CLI 명령 사용](parallel-test-tests-run.md)
+ [`codebuild-glob-search` CLI 명령 사용](parallel-test-glob-search.md)
+ [테스트 분할 정보](parallel-test-splitting.md)
+ [개별 빌드 보고서 자동 병합](parallel-test-auto-merge.md)
+ [다양한 테스트 프레임워크 샘플에 대한 병렬 테스트 실행](sample-parallel-test.md)

## 에서 지원 AWS CodeBuild
<a name="parallel-test-support"></a>

AWS CodeBuild 는 별도의 환경 실행을 활용하도록 특별히 설계된 배치 빌드 기능을 통해 병렬 테스트 실행을 강력하게 지원합니다. 이 구현은 격리된 테스트 환경의 이점과 완벽하게 일치합니다.

**테스트 배포를 사용한 배치 빌드**  
CodeBuild의 배치 빌드 기능을 사용하면 동시에 실행되는 여러 빌드 환경을 생성할 수 있습니다. 각 환경은 자체 컴퓨팅 리소스, 런타임 환경 및 종속성과 함께 완전히 격리된 단위로 작동합니다. 배치 빌드 구성을 통해 필요한 병렬 환경 수와 이에 걸쳐 테스트를 배포하는 방법을 지정할 수 있습니다.

**샤딩 CLI 테스트**  
CodeBuild에는 자동으로 테스트를 다른 환경으로 나누는 CLI 도구인 `codebuild-tests-run`을 통해 내장된 테스트 배포 메커니즘이 포함되어 있습니다.

**보고서 집계**  
CodeBuild 구현의 주요 강점 중 하나는 테스트 결과 집계를 원활하게 처리하는 기능입니다. 별도의 환경에서 테스트가 실행되는 동안 CodeBuild는 각 환경의 테스트 보고서를 자동으로 수집하여 배치 빌드 수준에서 통합 테스트 보고서로 결합합니다. 이 통합은 병렬 실행의 효율성 이점을 유지하면서 테스트 결과에 대한 포괄적인 보기를 제공합니다.

다음은 AWS CodeBuild에서 병렬 테스트 실행의 전체 개념을 설명하는 다이어그램입니다.

![\[병렬 테스트 실행의 개념 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/parallel-test.png)


# 배치 빌드에서 병렬 테스트 실행 활성화
<a name="parallel-test-enable"></a>

테스트를 병렬로 실행하려면 아래와 같이 빌드 팬아웃 필드와 병렬 빌드 수를 포함하도록 배치 빌드 buildspec 파일을 업데이트하여 `parallelism` 필드에 테스트 제품군을 분할합니다. `parallelism` 필드는 테스트 제품군을 실행하도록 설정된 독립 실행기 수를 지정합니다.

여러 병렬 실행 환경에서 테스트를 실행하려면 `parallelism` 필드를 0보다 큰 값으로 설정합니다. 아래 예제에서 `parallelism`은 5로 설정됩니다. 즉, CodeBuild는 테스트 제품군의 일부를 병렬로 실행하는 동일한 빌드 5개를 시작합니다.

[codebuild-tests-run](parallel-test-tests-run.md) CLI 명령을 사용하여 테스트를 분할하고 실행할 수 있습니다. 테스트 파일이 분할되고 테스트의 일부가 각 빌드에서 실행됩니다. 이렇게 하면 전체 테스트 제품군을 실행하는 데 걸리는 총 시간이 줄어듭니다. 다음 예제에서는 테스트가 5개로 분할되고 테스트 이름을 기반으로 분할 지점이 계산됩니다.

```
version: 0.2

batch:
  fast-fail: false 
  build-fanout:
    parallelism: 5
    ignore-failure: false
    
phases:
  install:
    commands:
      - npm install jest-junit --save-dev
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - |
        codebuild-tests-run \
         --test-command 'npx jest --runInBand --coverage' \
         --files-search "codebuild-glob-search '**/_tests_/**/*.test.js'" \
         --sharding-strategy 'equal-distribution'

  post_build:
    commands:
      - codebuild-glob-search '**/*.xml'  
      - echo "Running post-build steps..."
      - echo "Build completed on `date`"

reports:
  test-reports:
    files:
      - '**/junit.xml'               
    base-directory: .
    discard-paths: yes           
    file-format: JUNITXML
```

보고서가 build-fanout 빌드용으로 구성된 경우 각 빌드에 대해 개별적으로 테스트 보고서가 생성되며, 콘솔에서 해당 빌드의 **보고서** 탭에서 확인할 수 있습니다 AWS CodeBuild .

배치에서 병렬 테스트를 실행하는 방법에 대한 자세한 내용은 [다양한 테스트 프레임워크 샘플에 대한 병렬 테스트 실행](sample-parallel-test.md)를 참조하세요.

# `codebuild-tests-run` CLI 명령 사용
<a name="parallel-test-tests-run"></a>

AWS CodeBuild 는 테스트 명령과 테스트 파일 위치를 입력으로 사용하는 CLI를 제공합니다. 이러한 입력이 있는 CLI는 테스트 파일 이름을 기반으로 `parallelism` 필드에 지정된 대로 테스트를 샤드 수로 분할합니다. 테스트 파일을 샤드에 할당하는 것은 샤딩 전략에 따라 결정됩니다.

```
codebuild-tests-run \
    --files-search "codebuild-glob-search '**/__tests__/*.js'" \
    --test-command 'npx jest --runInBand --coverage' \
    --sharding-strategy 'equal-distribution'
```

다음 표는 `codebuild-tests-run` CLI 명령의 필드를 설명합니다.


| 필드 이름 | Type | 필수 또는 선택 | 정의 | 
| --- | --- | --- | --- | 
|  `test-command`  |  문자열  |  필수  |  이 명령은 테스트를 실행하는 데 사용됩니다.  | 
|  `files-search`  |  문자열  |  필수  |  이 명령은 테스트 파일 목록을 제공합니다. AWS CodeBuild 제공된 [codebuild-glob-search](parallel-test-glob-search.md) CLI 명령 또는 원하는 다른 파일 검색 도구를 사용할 수 있습니다.  `files-search` 명령이 각각 새 줄로 구분된 파일 이름을 출력하는지 확인합니다.   | 
|  `sharding-strategy`  |  Enum  |  선택 사항  |  유효한 값: `equal-distribution`(기본값), `stability`  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/parallel-test-tests-run.html) 자세한 내용은 [테스트 분할 정보](parallel-test-splitting.md) 단원을 참조하십시오.  | 

`codebuild-tests-run` CLI는 먼저 `files-search` 파라미터에 제공된 명령을 사용하여 테스트 파일 목록을 식별합니다. 그런 다음 지정된 샤딩 전략을 사용하여 현재 샤드(환경)에 지정된 테스트 파일의 하위 집합을 결정합니다. 마지막으로 이 테스트 파일의 하위 집합은 공백으로 구분된 목록으로 형식이 지정되고 실행되기 전에 `test-command` 파라미터에 제공된 명령의 끝에 추가됩니다.

공백으로 구분된 목록을 허용하지 않는 테스트 프레임워크의 경우 `codebuild-tests-run` CLI는 `CODEBUILD_CURRENT_SHARD_FILES` 환경 변수를 통해 유연한 대안을 제공합니다. 이 변수에는 현재 빌드 샤드에 지정된 테스트 파일 경로의 줄 바꿈으로 구분된 목록이 포함되어 있습니다. 이 환경 변수를 활용하면 다양한 테스트 프레임워크 요구 사항에 쉽게 적응하여 공백으로 구분된 목록과 다른 입력 형식을 기대하는 바람에 부응할 수 있습니다. 또한, 테스트 프레임워크의 필요에 따라 테스트 파일 이름의 형식을 지정할 수도 있습니다. 다음은 Linux에서 Django 프레임워크와 함께 `CODEBUILD_CURRENT_SHARD_FILES`를 사용하는 예제입니다. 여기서 `CODEBUILD_CURRENT_SHARD_FILES`는 Django에서 지원하는 *점 표기법* 파일 경로를 가져오는 데 사용됩니다.

```
codebuild-tests-run \
    —files-search "codebuild-glob-search '/tests/test_.py'" \
    —test-command 'python3 manage.py test $(echo "$CODEBUILD_CURRENT_SHARD_FILES" | sed -E "s/\//__/g; s/\.py$//; s/__/./g")' \
    —sharding-strategy 'equal-distribution'
```

**참고**  
`CODEBUILD_CURRENT_SHARD_FILES` 환경 변수는 `codebuild-tests-run` CLI의 범위 내에서만 사용할 수 있습니다.  
또한, 테스트 명령 내부에서 `CODEBUILD_CURRENT_SHARD_FILES`를 사용하는 경우 위의 예제와 같이 `CODEBUILD_CURRENT_SHARD_FILES`를 큰따옴표 안에 넣습니다.

# `codebuild-glob-search` CLI 명령 사용
<a name="parallel-test-glob-search"></a>

AWS CodeBuild 는 하나 이상의 glob 패턴을 기반으로 작업 디렉터리의 파일을 검색할 수 `codebuild-glob-search` 있는 라는 내장 CLI 도구를 제공합니다. 이 도구는 프로젝트 내의 특정 파일 또는 디렉터리에서 테스트를 실행하려는 경우에 특히 유용할 수 있습니다.

## 사용법
<a name="parallel-test-glob-search.usage"></a>

`codebuild-glob-search` CLI에는 다음과 같은 사용 구문이 있습니다.

```
codebuild-glob-search <glob_pattern1> [<glob_pattern2> ...]
```
+ `<glob_pattern1>`, `<glob_pattern2>` 등: 작업 디렉터리의 파일과 일치시킬 하나 이상의 glob 패턴입니다.
+ `*`: 모든 문자 시퀀스와 일치합니다(경로 구분자 제외).
+ `**`: 모든 문자 시퀀스와 일치합니다(경로 구분자 포함).

**참고**  
glob 문자열에 따옴표가 있는지 확인합니다. 패턴 일치 결과를 확인하려면 `echo` 명령을 사용합니다.  

```
version: 0.2

phases:
  build:
    commands:
      - echo $(codebuild-glob-search '**/__tests__/*.js')
      - codebuild-glob-search '**/__tests__/*.js' | xargs -n 1 echo
```

## 출력
<a name="parallel-test-glob-search.output"></a>

CLI는 제공된 glob 패턴과 일치하는 파일 경로의 줄 바꿈으로 구분된 목록을 출력합니다. 반환되는 파일 경로는 작업 디렉터리를 기준으로 합니다.

제공된 패턴과 일치하는 파일을 찾을 수 없는 경우 CLI는 파일을 찾을 수 없다는 메시지를 출력합니다.

지정된 패턴으로 인해 발견된 디렉터리는 검색 결과에서 제외됩니다.

## 예제
<a name="parallel-test-glob-search.example"></a>

`.js` 확장자가 있는 테스트 디렉터리 및 하위 디렉터리 내의 파일만 검색하려면 `codebuild-glob-search` CLI와 함께 다음 명령을 사용할 수 있습니다.

```
codebuild-glob-search '**/__tests__/*.js'
```

이 명령은 패턴으로 표시된 대로 `__tests__` 디렉터리 및 해당 하위 디렉터리 내에 `.js` 확장자가 있는 모든 파일을 검색합니다.

# 테스트 분할 정보
<a name="parallel-test-splitting"></a>

AWS CodeBuild의 테스트 분할 기능을 사용하면 여러 컴퓨팅 인스턴스에서 테스트 제품군 실행을 병렬화하여 전체 테스트 실행 시간을 줄일 수 있습니다. 이 기능은 CodeBuild 프로젝트 설정의 배치 구성과 buildspec 파일의 `codebuild-tests-run`유틸리티를 통해 활성화됩니다.

테스트는 지정된 샤딩 전략에 따라 분할됩니다. CodeBuild는 아래와 같이 2가지 샤딩 전략을 제공합니다.

균등 배포  
`equal-distribution` 샤딩 전략은 테스트 파일 이름의 알파벳 순서에 따라 병렬 빌드로 테스트를 나눕니다. 이 접근 방식은 먼저 테스트 파일을 정렬한 다음 청크 기반 메서드로 배포하여 유사한 파일이 묶여 테스트되도록 합니다. 비교적 작은 테스트 파일 세트를 처리할 때 권장됩니다. 이 방법은 각 샤드에 최대 차이가 1일 만큼 거의 동일한 수의 파일을 할당하는 것을 목표로 하지만, 안정성을 보장하지는 않습니다. 후속 빌드에서 테스트 파일을 추가하거나 제거하면 기존 파일의 배포가 변경되어 샤드 간에 재할당이 발생할 수 있습니다.

안정성  
`stability` 샤딩 전략은 일관된 해싱 알고리즘을 사용하여 샤드 간에 테스트를 분할하므로 파일 배포가 안정적으로 유지됩니다. 새 파일을 추가하거나 제거할 때 이 접근 방식을 사용하면 기존 파일-샤드 할당이 거의 변경되지 않습니다. 대규모 테스트 제품군의 경우 안정성 옵션을 사용하여 샤드 간에 테스트를 균등하게 분산하는 것이 좋습니다. 이 메커니즘은 거의 동일한 배포를 제공하여 각 샤드가 최소한의 분산만으로 비슷한 수의 파일을 수신하도록 하는 것을 목표로 합니다. 안정성 전략은 이상적인 균등 배포를 보장하지는 않지만, 파일이 추가되거나 제거되더라도 빌드 전반의 파일 할당 일관성을 유지하는 거의 균등한 배포를 제공합니다.

테스트 분할을 활성화하려면 CodeBuild 프로젝트 설정에서 배치 섹션을 구성하여 원하는 `parallelism` 수준 및 기타 관련 파라미터를 지정해야 합니다. 또한, 적절한 테스트 명령 및 분할 방법과 함께 buildspec 파일에 `codebuild-tests-run` 유틸리티를 포함해야 합니다.

# 개별 빌드 보고서 자동 병합
<a name="parallel-test-auto-merge"></a>

팬아웃 배치 빌드에서는 개별 빌드 보고서를 통합 배치 수준 보고서로 자동 병합할 수 있도록 AWS CodeBuild 지원합니다. 이 기능은 배치 내의 모든 빌드에서 테스트 결과 및 코드 적용 범위를 포괄적으로 보여줍니다.

## 작동 방식
<a name="parallel-test-auto-merge.how"></a>

`fanout` 배치 빌드를 실행할 때 각 개별 빌드는 [테스트 보고서](test-reporting.md)를 생성합니다. 그런 다음 CodeBuild는 서로 다른 빌드의 동일한 보고서를 배치 빌드에 연결된 통합 보고서로 자동으로 통합합니다. 이러한 통합 보고서는 [BatchGetBuildBatches](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_BatchGetBuildBatches.html#CodeBuild-BatchGetBuildBatches-response-buildBatches) API의 `reportArns` 필드를 통해 쉽게 액세스할 수 있으며 콘솔의 **보고서** 탭에서도 볼 수 있습니다. 이 병합 기능은 자동 검색된 보고서로도 확장됩니다.

통합 보고서는 buildspec에 지정되거나 CodeBuild에서 자동으로 검색하는 [보고서 그룹](test-report-group.md)에 생성됩니다. 이러한 보고서 그룹에서 바로 병합된 보고서의 추세를 분석하여 동일한 빌드 배치 프로젝트의 과거 빌드에 걸쳐 전체 빌드 성능 및 품질 지표에 대한 귀중한 인사이트를 제공할 수 있습니다.

배치 내의 각 개별 빌드에 대해 CodeBuild는 자동으로 별도의 보고서 그룹을 생성합니다. 이는 특정 명명 규칙을 따르며 배치 빌드 보고서 그룹 이름을 `BuildFanoutShard<shard_number>` 접미사와 결합합니다. 여기서 `shard_number`는 보고서 그룹이 생성되는 샤드의 수를 나타냅니다. 이 조직을 사용하면 통합 및 개별 빌드 수준 모두에서 추세를 추적하고 분석하여 빌드 프로세스를 모니터링하고 평가하는 방법에 유연성을 더할 수 있습니다.

배치 빌드 보고서는 [개별 빌드 보고서](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_Report.html)와 동일한 구조를 따릅니다. **보고서** 탭의 다음 키 필드는 배치 빌드 보고서에만 해당됩니다.

**배치 빌드 보고서 상태**  
배치 빌드 보고서의 상태는 보고서 유형에 따라 특정 규칙을 따릅니다.  
+ 테스트 보고서:
  + 성공: 모든 개별 빌드 보고서가 성공하면 상태가 성공으로 설정됩니다.
  + 실패: 개별 빌드 보고서가 실패한 경우 상태가 실패로 설정됩니다.
  + 미완료: 개별 빌드 보고서가 누락되었거나 미완료 상태인 경우 상태가 미완료로 표시됩니다.
+ 코드 적용 범위 보고서:
  + 완료: 모든 개별 빌드 보고서가 완료되면 상태가 완료로 설정됩니다.
  + 실패: 개별 빌드 보고서가 실패한 경우 상태가 실패로 설정됩니다.
  + 미완료: 개별 빌드 보고서가 누락되었거나 미완료 상태인 경우 상태가 미완료로 표시됩니다.

**테스트 요약**  
병합된 테스트 보고서는 모든 개별 빌드 보고서의 다음 필드를 통합합니다.  
+ duration-in-nano-seconds: 모든 개별 빌드 보고서에서 나노초 단위의 최대 테스트 기간입니다.
+ total: 각 빌드의 총 테스트 수를 합산한 모든 테스트 사례의 총 수입니다.
+ status-counts: 모든 개별 빌드에서 각 상태 유형의 수를 집계하여 계산된 통과, 실패, 건너뜀 등 테스트 상태에 대한 통합 보기를 제공합니다.

**코드 적용 범위 요약**  
병합된 코드 적용 범위 보고서는 다음 계산을 사용하여 모든 개별 빌드의 필드를 결합합니다.  
+ branchs-covered: 개별 보고서에서 다루는 모든 브랜치의 합계입니다.
+ branches-missed: 개별 보고서에서 누락된 모든 브랜치의 합계입니다.
+ branch-coverage-percentage: `(Total covered branches / Total branches) * 100`
+ lines-covered: 개별 보고서에서 다루는 모든 줄의 합계입니다.
+ lines-missed: 개별 보고서에서 누락된 모든 줄의 합계입니다.
+ lines-coverage-percentage: `(Total covered lines / Total lines) * 100`

**실행 ID**  
배치 빌드 ARN입니다.

**테스트 사례**  
병합된 보고서에는 콘솔의 [DescribeTestCases](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_DescribeTestCases.html) API와 배치 빌드 보고서를 통해 액세스할 수 있는 개별 빌드의 모든 테스트 사례에 대한 통합 목록이 포함되어 있습니다.

**코드 적용 범위**  
병합된 코드 적용 범위 보고서는 콘솔의 [DescribeCodeCoverages](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_DescribeCodeCoverages.html) API와 배치 빌드 보고서를 통해 액세스할 수 있는 모든 개별 빌드의 각 파일에 대한 통합 줄 및 브랜치 적용 범위 정보를 제공합니다. 참고: 여러 샤드에 분산된 다양한 테스트 파일이 포함된 파일의 경우 병합된 보고서는 다음 선택 기준을 사용합니다.  

1. 기본 선택은 샤드 중에서 가장 높은 줄 적용 범위를 기준으로 합니다.

1. 여러 샤드에서 줄 적용 범위가 같으면 브랜치 적용 범위가 가장 높은 샤드가 선택됩니다.

# 다양한 테스트 프레임워크 샘플에 대한 병렬 테스트 실행
<a name="sample-parallel-test"></a>

`codebuild-tests-run` CLI 명령을 사용하여 병렬 실행 환경에서 테스트를 분할하고 실행할 수 있습니다. 다음 섹션에서는 `codebuild-tests-run` 명령 사용을 보여주는 다양한 프레임워크에 대한 `buildspec.yml` 샘플을 제공합니다.
+ 아래 각 예제에는 5개의 `parallelism` 수준이 포함되어 있습니다. 즉, 테스트를 분할하기 위해 5개의 동일한 실행 환경이 생성됩니다. `build-fanout` 섹션의 `parallelism` 값을 수정하여 프로젝트에 적합한 `parallelism` 수준을 선택할 수 있습니다.
+ 아래 각 예제는 기본적으로 테스트 파일 이름으로 분할되도록 테스트를 구성하는 방법을 보여줍니다. 이렇게 하면 병렬 실행 환경에 테스트가 균등하게 분산됩니다.

시작하기 전에 [배치 빌드에서 병렬 테스트 실행](parallel-test.md)에서 자세한 내용을 참조하세요.

`codebuild-tests-run` CLI 명령을 사용할 때의 전체 옵션 목록은 [`codebuild-tests-run` CLI 명령 사용](parallel-test-tests-run.md)에서 확인하세요.

**Topics**
+ [Django를 사용하여 병렬 테스트 구성](sample-parallel-test-django.md)
+ [Elixir를 사용하여 병렬 테스트 구성](sample-parallel-test-elixir.md)
+ [Go를 사용하여 병렬 테스트 구성](sample-parallel-test-go.md)
+ [Java(Maven)를 사용하여 병렬 테스트 구성](sample-parallel-test-java-maven.md)
+ [Javascript(Jest)를 사용하여 병렬 테스트 구성](sample-parallel-test-javascript.md)
+ [Kotlin을 사용하여 병렬 테스트 구성](sample-parallel-test-kotlin.md)
+ [PHPUnit을 사용하여 병렬 테스트 구성](sample-parallel-test-phpunit.md)
+ [Pytest를 사용하여 병렬 테스트 구성](sample-parallel-test-python.md)
+ [Ruby(Cucumber)를 사용하여 병렬 테스트 구성](sample-parallel-test-ruby-cucumber.md)
+ [Ruby(RSpec)를 사용하여 병렬 테스트 구성](sample-parallel-test-ruby.md)

# Django를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-django"></a>

다음은 Ubuntu 플랫폼에서 Django를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5

phases:
  install:
    commands:
      - echo 'Installing Python dependencies'
      - sudo yum install -y python3 python3-pip 
      - python3 -m ensurepip --upgrade 
      - python3 -m pip install django
  pre_build:
    commands:
      - echo 'Prebuild'
  build:
    commands:
      - echo 'Running Django Tests'
      - |
        codebuild-tests-run \
         --test-command 'python3 manage.py test $(echo "$CODEBUILD_CURRENT_SHARD_FILES" | sed -E "s/\//__/g; s/\.py$//; s/__/./g")' \ 
         --files-search "codebuild-glob-search '**/tests/*test_*.py'" \
         --sharding-strategy 'equal-distribution'
  post_build:
    commands:
      - echo 'Test execution completed'
```

위 예제에서는 `CODEBUILD_CURRENT_SHARD_FILES` 환경 변수를 사용하는 모습을 보여줍니다. 여기서 `CODEBUILD_CURRENT_SHARD_FILES`는 Django에서 지원하는 점 표기법 파일 경로를 가져오는 데 사용됩니다. 위와 같이 큰따옴표 안에 `CODEBUILD_CURRENT_SHARD_FILES`를 사용합니다.

# Elixir를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-elixir"></a>

다음은 Ubuntu 플랫폼에서 Elixir를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5

phases:
  install:
    commands:
      - echo 'Installing Elixir dependencies'
      - sudo apt update
      - sudo DEBIAN_FRONTEND=noninteractive apt install -y elixir
      - elixir --version
      - mix --version
  pre_build:
    commands:
      - echo 'Prebuild'
  build:
    commands:
      - echo 'Running Elixir Tests'
      - |
        codebuild-tests-run \
         --test-command 'mix test' \
         --files-search "codebuild-glob-search '**/test/**/*_test.exs'" \ 
         --sharding-strategy 'equal-distribution'
  post_build:
    commands:
      - echo "Test execution completed"
```

# Go를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-go"></a>

다음은 Linux 플랫폼에서 Go를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Fetching Go version'
      - go version
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo 'Running go Tests'
      - go mod init calculator
      - cd calc
      - |
        codebuild-tests-run \
         --test-command "go test -v calculator.go" \
         --files-search "codebuild-glob-search '**/*test.go'"
  post_build:
    commands:
      - echo "Test execution completed"
```

위 예제에서 `calculator.go` 함수에는 테스트할 간단한 수학 함수가 포함되어 있으며 모든 테스트 파일과 `calculator.go` 파일은 `calc` 폴더 내에 있습니다.

# Java(Maven)를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-java-maven"></a>

다음은 Linux 플랫폼에서 Java를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false 
  build-fanout:
    parallelism: 5
    ignore-failure: false
    
phases:
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo "Running mvn test"
      - |
        codebuild-tests-run \
          --test-command 'mvn test -Dtest=$(echo "$CODEBUILD_CURRENT_SHARD_FILES" | sed "s|src/test/java/||g; s/\.java//g; s|/|.|g; s/ /,/g" | tr "\n" "," | sed "s/,$//")' \
          --files-search "codebuild-glob-search '**/test/**/*.java'"
         
  post_build:
    commands:
      - echo "Running post-build steps..."
      - echo "Test execution completed"
```

주어진 예제에서 `CODEBUILD_CURRENT_SHARD_FILES` 환경 변수는 현재 샤드에 새 줄로 구분된 테스트 파일을 포함합니다. 이러한 파일은 Maven의 `-Dtest` 파라미터에서 허용하는 형식으로 쉼표로 구분된 클래스 이름 목록으로 변환됩니다.

# Javascript(Jest)를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-javascript"></a>

다음은 Ubuntu 플랫폼에서 Javascript를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: true
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Installing Node.js dependencies'
      - apt-get update
      - apt-get install -y nodejs
      - npm install
      - npm install --save-dev jest-junit
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo 'Running JavaScript Tests'
      - |
         codebuild-tests-run \
          --test-command "npx jest" \
          --files-search "codebuild-glob-search '**/test/**/*.test.js'" \
          --sharding-strategy 'stability'
    post_build:
      commands:
        - echo 'Test execution completed'
```

# Kotlin을 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-kotlin"></a>

다음은 Linux 플랫폼에서 Kotlin을 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 2
    ignore-failure: false

phases:
  install:
    runtime-versions:
      java: corretto11 
    commands:
      - echo 'Installing dependencies'
      - KOTLIN_VERSION="1.8.20" # Replace with your desired version
      - curl -o kotlin-compiler.zip -L "https://github.com/JetBrains/kotlin/releases/download/v${KOTLIN_VERSION}/kotlin-compiler-${KOTLIN_VERSION}.zip"
      - unzip kotlin-compiler.zip -d /usr/local
      - export PATH=$PATH:/usr/local/kotlinc/bin
      - kotlin -version
      - curl -O https://repo1.maven.org/maven2/org/junit/platform/junit-platform-console-standalone/1.8.2/junit-platform-console-standalone-1.8.2.jar
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo 'Running Kotlin Tests'
      - |
        codebuild-tests-run \
          --test-command 'kotlinc src/main/kotlin/*.kt $(echo "$CODEBUILD_CURRENT_SHARD_FILES" | tr "\n" " ") -d classes -cp junit-platform-console-standalone-1.8.2.jar' \
          --files-search "codebuild-glob-search 'src/test/kotlin/*.kt'"
      - |
        codebuild-tests-run \
          --test-command '
            java -jar junit-platform-console-standalone-1.8.2.jar --class-path classes \
              $(for file in $CODEBUILD_CURRENT_SHARD_FILES; do
                 class_name=$(basename "$file" .kt)
                 echo "--select-class $class_name"
               done)
          ' \
          --files-search "codebuild-glob-search 'src/test/kotlin/*.kt'"
  post_build:
    commands:
      - echo "Test execution completed"
```

위 예제에서는 `codebuild-tests-run` CLI가 두 번 사용됩니다. 첫 번째 실행 중에 kotlinc는 파일을 컴파일합니다. `CODEBUILD_CURRENT_SHARD_FILES` 변수는 현재 샤드에 할당된 테스트 파일을 검색한 다음 공백으로 구분된 목록으로 변환합니다. 두 번째 실행에서는 JUnit가 테스트를 실행합니다. 다시 `CODEBUILD_CURRENT_SHARD_FILES`는 현재 샤드에 할당된 테스트 파일을 가져오지만, 이번에는 클래스 이름으로 변환됩니다.

# PHPUnit을 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-phpunit"></a>

다음은 Linux 플랫폼에서 PHPUnit를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2
 
batch:
   fast-fail: false
   build-fanout:
     parallelism: 5
     ignore-failure: false
 
phases:
   install:
     commands:
       - echo 'Install dependencies'
       - composer require --dev phpunit/phpunit
   pre_build:
     commands:
       - echo 'prebuild'
   build:
     commands:
       - echo 'Running phpunit Tests'
       - composer dump-autoload
       - | 
         codebuild-tests-run \
          --test-command "./vendor/bin/phpunit --debug" \ 
          --files-search "codebuild-glob-search '**/tests/*Test.php'"
   post_build:
       commands:
         - echo 'Test execution completed'
```

# Pytest를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-python"></a>

다음은 Ubuntu 플랫폼에서 Pytest를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Installing Python dependencies'
      - apt-get update
      - apt-get install -y python3 python3-pip
      - pip3 install --upgrade pip
      - pip3 install pytest
  build:
    commands:
      - echo 'Running Python Tests'
      - |
         codebuild-tests-run \
          --test-command 'python -m pytest' \
          --files-search "codebuild-glob-search 'tests/test_*.py'" \
          --sharding-strategy 'equal-distribution'
  post_build:
    commands:
      - echo "Test execution completed"
```

다음은 Windows 플랫폼에서 Pytest를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Installing Python dependencies'
      - pip install pytest
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo 'Running pytest'
      - |
        & codebuild-tests-run `
         --test-command 'pytest @("$env:CODEBUILD_CURRENT_SHARD_FILES" -split \"`r?`n\")'  `
         --files-search "codebuild-glob-search '**/test_*.py' '**/*_test.py'" `
         --sharding-strategy 'equal-distribution' 
  post_build:
    commands:
      - echo "Test execution completed"
```

위 예제에서 `CODEBUILD_CURRENT_SHARD_FILES` 환경 변수는 현재 샤드에 할당되고 pytest 명령에 배열로 전달되는 테스트 파일을 가져오는 데 사용됩니다.

# Ruby(Cucumber)를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-ruby-cucumber"></a>

다음은 Linux 플랫폼에서 Cucumber를 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Installing Ruby dependencies'
      - gem install bundler
      - bundle install
  pre_build:
    commands:
      - echo 'prebuild'
  build:
    commands:
      - echo 'Running Cucumber Tests'
      - cucumber --init
      - |
        codebuild-tests-run \
         --test-command "cucumber" \
         --files-search "codebuild-glob-search '**/*.feature'"
  post_build:
    commands:
      - echo "Test execution completed"
```

# Ruby(RSpec)를 사용하여 병렬 테스트 구성
<a name="sample-parallel-test-ruby"></a>

다음은 Ubuntu 플랫폼에서 RSpec을 사용한 병렬 테스트 실행을 보여주는 `buildspec.yml`의 샘플입니다.

```
version: 0.2

batch:
  fast-fail: false
  build-fanout:
    parallelism: 5
    ignore-failure: false

phases:
  install:
    commands:
      - echo 'Installing Ruby dependencies'
      - apt-get update
      - apt-get install -y ruby ruby-dev build-essential
      - gem install bundler
      - bundle install
  build:
    commands:
      - echo 'Running Ruby Tests'
      - |
         codebuild-tests-run \
          --test-command 'bundle exec rspec' \
          --files-search "codebuild-glob-search 'spec/**/*_spec.rb'" \
          --sharding-strategy 'equal-distribution'
  post_build:
    commands:
      - echo "Test execution completed"
```

# 성능을 개선하기 위한 캐시 빌드
<a name="build-caching"></a>

프로젝트가 빌드될 때 캐시를 사용하여 시간을 절약할 수 있습니다. 캐시는 빌드 환경에서 재사용할 수 있는 정보를 저장하여 여러 빌드에 사용할 수 있습니다. 빌드 프로젝트는 Amazon S3 또는 로컬의 두 캐싱 유형 중 하나를 사용할 수 있습니다. 로컬 캐시를 사용하는 경우 다음 세 캐시 모드에서 하나 이상을 선택해야 합니다. 소스 캐시, Docker 계층 캐시 및 사용자 지정 캐시.

**참고**  
Docker 계층 캐시 모드는 Linux 환경에서만 사용할 수 있습니다. 이 모드를 선택할 경우 권한이 있는 모드에서 빌드를 실행해야 합니다. CodeBuild 프로젝트에서 부여된 권한 모드는 해당 컨테이너에 모든 디바이스에 대한 액세스 권한을 부여합니다. 자세한 내용은 Docker 문서 웹 사이트의 [런타임 권한 및 Linux 기능](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)을 참조하십시오.

**Topics**
+ [Amazon S3 캐싱](caching-s3.md)
+ [로컬 캐싱](caching-local.md)
+ [로컬 캐시 지정](specify-caching-local.md)

# Amazon S3 캐싱
<a name="caching-s3"></a>

Amazon S3 캐싱은 여러 빌드 호스트에 사용 가능한 캐시를 Amazon S3 버킷에 저장합니다. 이는 다운로드보다 빌드가 더 비용이 많이 드는 소형-중형 빌드 아티팩트에 적합한 옵션입니다.

빌드에서 Amazon S3를 사용하려면 `buildspec.yml`에서 캐싱하려는 파일의 경로를 지정할 수 있습니다. CodeBuild는 캐시를 자동으로 저장하고 프로젝트에 구성된 Amazon S3 위치로 업데이트합니다. 파일 경로를 지정하지 않으면 CodeBuild는 빌드 속도를 높이는 데 도움이 되도록 공통 언어 종속성을 캐싱하는 데 최선을 다합니다. 빌드 로그에서 캐시 세부 정보를 볼 수 있습니다.

또한, 여러 버전의 캐시를 사용하려는 경우 `buildspec.yml`에서 캐시 키를 정의할 수 있습니다. CodeBuild는 이 캐시 키의 컨텍스트에 캐시를 저장하고 생성된 후에는 업데이트되지 않는 고유한 캐시 복사본을 생성합니다. 캐시 키는 프로젝트 간에도 공유할 수 있습니다. 동적 키, 캐시 버전 관리, 빌드 간 캐시 공유와 같은 기능은 키가 지정된 경우에만 사용할 수 있습니다.

buildspec 파일의 캐시 구문에 대한 자세한 내용은 buildspec 참조의 [cache](build-spec-ref.md#build-spec.cache)를 참조하세요.

**Topics**
+ [동적 키 생성](#caching-s3-dynamic)
+ [codebuild-hash-files](#caching-s3-dynamic.codebuild-hash-files)
+ [캐시 버전](#caching-s3-version)
+ [프로젝트 간 캐시 공유](#caching-s3-sharing)
+ [buildspec 예제](#caching-s3-examples)

## 동적 키 생성
<a name="caching-s3-dynamic"></a>

캐시 키는 쉘 명령과 환경 변수를 포함하여 고유하게 만들 수 있으므로, 키가 변경될 때 자동 캐시 업데이트가 가능합니다. 예를 들어, `package-lock.json` 파일의 해시를 사용하여 키를 정의할 수 있습니다. 해당 파일의 종속성이 변경되면 해시와 캐시 키가 변경되어 새 캐시의 자동 생성이 트리거됩니다.

```
cache:
    key: npm-key-$(codebuild-hash-files package-lock.json)
```

CodeBuild는 `$(codebuild-hash-files package-lock.json)` 표현식을 평가하여 최종 키를 가져옵니다.

```
npm-key-abc123
```

`CODEBUILD_RESOLVED_SOURCE_VERSION`과 같은 환경 변수를 사용하여 캐시 키를 정의할 수도 있습니다. 이렇게 하면 소스가 변경될 때마다 새 키가 생성되어 새 캐시가 자동으로 저장됩니다.

```
cache:
   key: npm-key-$CODEBUILD_RESOLVED_SOURCE_VERSION
```

CodeBuild는 표현식을 평가하고 최종 키를 가져옵니다.

```
npm-key-046e8b67481d53bdc86c3f6affdd5d1afae6d369
```

## codebuild-hash-files
<a name="caching-s3-dynamic.codebuild-hash-files"></a>

`codebuild-hash-files`는 glob 패턴을 사용하여 CodeBuild 소스 디렉터리의 파일 세트에 대한 SHA-256 해시를 계산하는 CLI 도구입니다.

```
codebuild-hash-files <glob-pattern-1> <glob-pattern-2> ...
```

여기에 `codebuild-hash-files`를 사용하는 몇 가지 예가 있습니다.

```
codebuild-hash-files package-lock.json
codebuild-hash-files '**/*.md'
```

## 캐시 버전
<a name="caching-s3-version"></a>

캐시 버전은 캐시되는 디렉터리의 경로에서 생성된 해시입니다. 두 캐시의 버전이 다른 경우 일치하는 프로세스 중에 캐시가 고유한 캐시로 처리됩니다. 예를 들어, 다음 두 캐시는 서로 다른 경로를 참조하기 때문에 서로 다른 것으로 간주됩니다.

```
version: 0.2

phases:
  build:
    commands:
      - pip install pandas==2.2.3 --target pip-dependencies
cache:
  key: pip-dependencies 
  paths:
    - "pip-dependencies/**/*"
```

```
version: 0.2

phases:
  build:
    commands:
      - pip install pandas==2.2.3 --target tmp/pip-dependencies
cache:
  key: pip-dependencies 
  paths:
    - "tmp/pip-dependencies/**/*"
```

## 프로젝트 간 캐시 공유
<a name="caching-s3-sharing"></a>

`cache` 섹션 아래의 `cacheNamespace` API 필드를 사용하여 여러 프로젝트에서 캐시를 공유할 수 있습니다. 이 필드는 캐시의 범위를 정의합니다. 캐시를 공유하려면 다음을 수행해야 합니다.
+ 동일한 `cacheNamespace`를 사용합니다.
+ 동일한 `key` 캐시를 지정합니다.
+ 동일한 캐시 경로를 정의합니다.
+ 설정된 경우 동일한 Amazon S3 버킷 및 `pathPrefix`를 사용합니다.

이렇게 하면 일관성이 보장되고 프로젝트 간에 캐시 공유가 활성화됩니다.

### 캐시 네임스페이스 지정(콘솔)
<a name="caching-s3-sharing.console"></a>

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

1. **프로젝트 생성**을 선택합니다. 자세한 내용은 [빌드 프로젝트 만들기(콘솔)](create-project.md#create-project-console) 및 [빌드 실행(콘솔)](run-build-console.md) 섹션을 참조하세요.

1. **아티팩트**에서 **추가 구성**을 선택합니다.

1. **캐시 유형**에서 **Amazon S3**를 선택합니다.

1. **캐시 네임스페이스 - 선택 사항**에서 네임스페이스 값을 입력합니다.  
![\[CodeBuild 콘솔의 캐시 네임스페이스 파라미터입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/s3-cache-namespace.png)

1. 기본값으로 계속 진행한 다음 **빌드 프로젝트 생성**을 선택합니다.

### 캐시 네임스페이스 지정(AWS CLI)
<a name="caching-s3-sharing.cli"></a>

의 `--cache` 파라미터를 사용하여 캐시 네임스페이스를 AWS CLI 지정할 수 있습니다.

```
--cache '{"type": "S3", "location": "your-s3-bucket", "cacheNamespace": "test-cache-namespace"}'
```

## buildspec 예제
<a name="caching-s3-examples"></a>

다음은 일반적인 언어에 대한 몇 가지 buildspec 예제입니다.

**Topics**
+ [캐시 Node.js 종속성](#caching-s3-examples.nodejs)
+ [캐시 Python 종속성](#caching-s3-examples.python)
+ [캐시 Ruby 종속성](#caching-s3-examples.ruby)
+ [캐시 Go 종속성](#caching-s3-examples.go)

### 캐시 Node.js 종속성
<a name="caching-s3-examples.nodejs"></a>

프로젝트에 `package-lock.json` 파일이 포함되어 있고 `npm`를 사용하여 Node.js 종속성을 관리하는 경우, 다음 예제에서 캐싱을 설정하는 방법을 보여줍니다. 기본적으로 `npm`에서는 `node_modules` 디렉터리에 종속성을 설치합니다.

```
version: 0.2

phases:
  build:
    commands:
      - npm install
cache:
  key: npm-$(codebuild-hash-files package-lock.json)
  paths:
    - "node_modules/**/*"
```

### 캐시 Python 종속성
<a name="caching-s3-examples.python"></a>

프로젝트에 `requirements.txt` 파일이 포함되어 있고 pip를 사용하여 Python 종속성을 관리하는 경우, 다음 예제에서 캐싱을 구성하는 방법을 보여줍니다. 기본적으로 pip는 시스템 `site-packages` 디렉터리에 패키지를 설치합니다.

```
version: 0.2

phases:
  build:
    commands:
      - pip install -r requirements.txt
cache:
  key: python-$(codebuild-hash-files requirements.txt)
  paths:
    - "/root/.pyenv/versions/${python_version}/lib/python${python_major_version}/site-packages/**/*"
```

또한, 특정 디렉터리에 종속성을 설치하고 해당 디렉터리에 대한 캐싱을 구성할 수 있습니다.

```
version: 0.2

phases:
  build:
    commands:
      - pip install -r requirements.txt --target python-dependencies
cache:
  key: python-$(codebuild-hash-files requirements.txt)
  paths:
    - "python-dependencies/**/*"
```

### 캐시 Ruby 종속성
<a name="caching-s3-examples.ruby"></a>

프로젝트에 `Gemfile.lock` 파일이 포함되어 있고 `Bundler`를 사용하여 gem 종속성을 관리하는 경우, 다음 예제에서 캐싱을 효율적으로 구성하는 방법을 보여줍니다.

```
version: 0.2

phases:
  build:
    commands:
      - bundle install --path vendor/bundle
cache:
  key: ruby-$(codebuild-hash-files Gemfile.lock)
  paths:
    - "vendor/bundle/**/*"
```

### 캐시 Go 종속성
<a name="caching-s3-examples.go"></a>

프로젝트에 `go.sum` 파일이 포함되어 있고 Go 모듈을 사용하여 종속성을 관리하는 경우, 다음 예제에서 캐싱을 구성하는 방법을 보여줍니다. 기본적으로 Go 모듈은 다운로드되어 `${GOPATH}/pkg/mod` 디렉터리에 저장됩니다.

```
version: 0.2

phases:
  build:
    commands:
      - go mod download
cache:
  key: go-$(codebuild-hash-files go.sum)
  paths:
    - "/go/pkg/mod/**/*"
```

# 로컬 캐싱
<a name="caching-local"></a>

로컬 캐싱은 해당 빌드 호스트에만 사용할 수 있는 캐시를 빌드에 로컬로 저장합니다. 빌드 호스트에서 즉각적으로 캐시를 사용할 수 있으므로 중형-대형 빌드 아티팩트에 적합한 옵션입니다. 빌드가 드문 경우에는 최선의 옵션이 아닙니다. 이는 빌드 성능이 네트워크 전송 시간의 영향을 받지 않는다는 의미입니다.

로컬 캐싱을 선택할 경우 다음 캐시 모드 중 하나 이상을 선택해야 합니다.
+ 소스 캐시 모드는 기본 및 보조 소스를 위해 Git 메타데이터를 캐싱합니다. 캐시가 생성되면 이후의 빌드는 커밋 사이의 변경 사항만 끌어옵니다. 이 모드는 클린 작업 디렉터리를 사용하고 소스가 대규모 Git 리포지토리인 프로젝트에 적합한 선택입니다. 이 옵션을 선택하고 프로젝트가 Git 리포지토리(AWS CodeCommit, GitHub, GitHub Enterprise Server 또는 Bitbucket)를 사용하지 않을 경우 이 옵션은 무시됩니다.
+ Docker 계층 캐시 모드는 기존 Docker 계층을 캐싱합니다. 이 모드는 대용량 도커 이미지를 빌드하거나 끌어오는 프로젝트에 적합한 선택입니다. 네트워크에서 대용량 도커 이미지를 끌어올 때 발생하는 성능 문제를 방지할 수 있습니다.
**참고**  
Docker 계층 캐시는 Linux 환경에서만 사용할 수 있습니다.
프로젝트가 필요한 Docker 권한을 가지도록 `privileged` 플래그를 설정해야 합니다.  
기본적으로 비 VPC 빌드에는 Docker 데몬이 활성화됩니다. VPC 빌드에 Docker 컨테이너를 사용하려면 Docker Docs 웹 사이트의 [런타임 권한 및 Linux 기능](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)을 참조하고 권한 부여 모드를 활성화합니다. 또한 Windows는 권한 모드를 지원하지 않습니다.
Docker 계층 캐시를 사용하기 전에 보안에 미치는 영향을 고려해야 합니다.
+ 사용자 지정 캐시 모드는 buildspec 파일에 지정한 디렉터리를 캐싱합니다. 이 모드는 다른 두 로컬 캐시 모드에 적합하지 않은 빌드 시나리오에 적합한 선택입니다. 사용자 지정 캐시를 사용할 경우 
  + 캐싱을 위해 디렉터리만 지정할 수 있습니다. 개별 파일은 지정할 수 없습니다.
  + Symlink를 사용하여 캐싱된 디렉터리를 참조합니다.
  + 캐싱된 디렉터리는 프로젝트 소스를 다운로드하기 전에 빌드에 연결됩니다. 캐시된 항목은 이름이 같은 경우 소스 항목을 재정의합니다. 디렉터리는 buildspec 파일에서 경로를 사용하여 지정합니다. 자세한 내용은 [buildspec 구문](build-spec-ref.md#build-spec-ref-syntax) 단원을 참조하십시오.
  + 소스와 캐시에서 동일한 디렉터리 이름은 사용하지 마십시오. 로컬로 캐시된 디렉터리는 소스 리포지토리에서 이름이 같은 디렉터리의 내용을 재정의하거나 삭제할 수 있습니다.

**참고**  
`LINUX_GPU_CONTAINER` 환경 유형 및 `BUILD_GENERAL1_2XLARGE` 컴퓨팅 유형에서는 로컬 캐싱이 지원되지 않습니다. 자세한 내용은 [빌드 환경 컴퓨팅 모드 및 유형](build-env-ref-compute-types.md) 단원을 참조하십시오.

**참고**  
VPC에서 사용할 CodeBuild를 구성하는 경우 로컬 캐싱은 지원되지 않습니다. CodeBuild에서 VPC를 사용하는 방법에 대한 자세한 내용은 [Amazon Virtual Private Cloud AWS CodeBuild 와 함께 사용](vpc-support.md) 섹션을 참조하세요.

# 로컬 캐시 지정
<a name="specify-caching-local"></a>

 AWS CLI, 콘솔, SDK 또는를 사용하여 로컬 캐시를 CloudFormation 지정할 수 있습니다. 로컬 캐싱에 대한 자세한 정보는 [로컬 캐싱](caching-local.md) 섹션을 참조하세요.

**Topics**
+ [로컬 캐싱 지정(CLI)](#caching-local-cli)
+ [로컬 캐싱 지정(콘솔)](#caching-local-console)
+ [로컬 캐싱 지정(CloudFormation)](#caching-local-cfn)

## 로컬 캐싱 지정(CLI)
<a name="caching-local-cli"></a>

의 `--cache` 파라미터를 사용하여 세 가지 로컬 캐시 유형을 각각 AWS CLI 지정할 수 있습니다.
+ 소스 캐시를 지정하려면 

  ```
  --cache type=LOCAL,mode=[LOCAL_SOURCE_CACHE]
  ```
+ Docker 계층 캐시를 지정하려면 

  ```
  --cache type=LOCAL,mode=[LOCAL_DOCKER_LAYER_CACHE]
  ```
+ 사용자 지정 캐시를 지정하려면 

  ```
  --cache type=LOCAL,mode=[LOCAL_CUSTOM_CACHE]
  ```

자세한 내용은 [빌드 프로젝트 생성(AWS CLI)](create-project.md#create-project-cli) 단원을 참조하십시오.

## 로컬 캐싱 지정(콘솔)
<a name="caching-local-console"></a>

콘솔의 **결과물** 섹션에서 캐시를 지정합니다. **캐시 유형**은 **Amazon S3** 또는 **로컬**을 선택합니다. **로컬**을 선택한 경우 세 로컬 캐시 옵션 중 하나 이상을 선택합니다.

![\[세 가지 로컬 캐시 옵션 중 하나 이상을 선택하여 로컬 캐시를 지정합니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/local-cache.png)


자세한 내용은 [빌드 프로젝트 만들기(콘솔)](create-project.md#create-project-console) 단원을 참조하십시오.

## 로컬 캐싱 지정(CloudFormation)
<a name="caching-local-cfn"></a>

 CloudFormation 를 사용하여 로컬 캐시를 지정하는 경우 `Cache` 속성에서에 대해를 `Type`지정합니다`LOCAL`. 다음 샘플 YAML 형식 CloudFormation 코드는 세 가지 로컬 캐시 유형을 모두 지정합니다. 각 유형을 임의로 조합하여 지정할 수 있습니다. Docker 계층 캐시를 사용하는 경우 `Environment`에서 `PrivilegedMode`를 `true`로 설정하고 `Type`을 `LINUX_CONTAINER`로 설정해야 합니다.

```
CodeBuildProject:
    Type: AWS::CodeBuild::Project
    Properties:
      Name: MyProject
      ServiceRole: <service-role>
      Artifacts:
        Type: S3
        Location: <bucket-name>
        Name: myArtifact
        EncryptionDisabled: true
        OverrideArtifactName: true
      Environment:
        Type: LINUX_CONTAINER
        ComputeType: BUILD_GENERAL1_SMALL
        Image: aws/codebuild/standard:5.0
        Certificate: <bucket/cert.zip>
        # PrivilegedMode must be true if you specify LOCAL_DOCKER_LAYER_CACHE
        PrivilegedMode: true
      Source:
        Type: GITHUB
        Location: <github-location>
        InsecureSsl: true
        GitCloneDepth: 1
        ReportBuildStatus: false
      TimeoutInMinutes: 10
      Cache:
        Type: LOCAL
        Modes: # You can specify one or more cache mode, 
          - LOCAL_CUSTOM_CACHE
          - LOCAL_DOCKER_LAYER_CACHE
          - LOCAL_SOURCE_CACHE
```

**참고**  
기본적으로 비 VPC 빌드에는 Docker 데몬이 활성화됩니다. VPC 빌드에 Docker 컨테이너를 사용하려면 Docker Docs 웹 사이트의 [런타임 권한 및 Linux 기능](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)을 참조하고 권한 부여 모드를 활성화합니다. 또한 Windows는 권한 모드를 지원하지 않습니다.

자세한 내용은 [빌드 프로젝트 생성(CloudFormation)](create-project.md#create-project-cloud-formation) 단원을 참조하십시오.

# 에서 빌드 디버그 AWS CodeBuild
<a name="debug-builds"></a>

AWS CodeBuild는 개발 및 문제 해결 중에 빌드를 디버깅하는 두 가지 방법을 제공합니다. CodeBuild 샌드박스 환경을 사용하여 문제를 조사하고 실시간으로 수정 사항을 검증하거나 AWS Systems Manager Session Manager를 사용하여 빌드 컨테이너에 연결하고 컨테이너 상태를 볼 수 있습니다.

## CodeBuild 샌드박스를 사용하여 빌드 디버그
<a name="debug-codebuild-sandbox"></a>

CodeBuild 샌드박스 환경은 안전하고 격리된 환경에서 대화형 디버그 세션을 제공합니다. AWS Management Console 또는를 통해 환경과 직접 상호 작용하고 AWS CLI, 명령을 실행하고, 단계별로 빌드 프로세스를 검증할 수 있습니다. 비용 효율적인 초당 결제 모델을 사용하며 빌드 환경과 동일한 소스 공급자 및 AWS 서비스와의 기본 통합을 지원합니다. SSH 클라이언트를 사용하거나 통합 개발 환경(IDE)에서 샌드박스 환경에 연결할 수도 있습니다.

CodeBuild 샌드박스 요금에 대한 자세한 내용은 [CodeBuild 요금 설명서](https://aws.amazon.com/codebuild/pricing/#Sandbox)를 참조하세요. 자세한 지침은 [CodeBuild 샌드박스를 사용하여 빌드 디버그](sandbox.md) 설명서를 참조하세요.

## Session Manager를 사용하여 빌드 디버그
<a name="debug-codebuild-session-manager"></a>

AWS Systems Manager Session Manager를 사용하면 실제 실행 환경에서 실행 중인 빌드에 직접 액세스할 수 있습니다. 이 접근 방식을 사용하면 활성 빌드 컨테이너에 연결하고 빌드 프로세스를 실시간으로 검사할 수 있습니다. 파일 시스템을 검사하고, 실행 중인 프로세스를 모니터링하고, 발생하는 문제를 해결할 수 있습니다.

자세한 지침은 [Session Manager를 사용하여 빌드 디버그](session-manager.md) 설명서를 참조하세요.

# CodeBuild 샌드박스를 사용하여 빌드 디버그
<a name="sandbox"></a>

에서는 CodeBuild 샌드박스를 사용하여 사용자 지정 명령을 실행하고 빌드 문제를 해결하여 빌드를 디버깅할 AWS CodeBuild수 있습니다.

**Topics**
+ [사전 조건](#sandbox-prereq)
+ [CodeBuild 샌드박스를 사용하여 빌드 디버그(콘솔)](#sandbox-console)
+ [CodeBuild 샌드박스를 사용하여 빌드 디버그(AWS CLI)](#sandbox-cli)
+ [자습서: SSH를 사용하여 샌드박스에 연결](sandbox-ssh-tutorial.md)
+ [AWS CodeBuild 샌드박스 SSH 연결 문제 해결](sandbox-troubleshooting.md)

## 사전 조건
<a name="sandbox-prereq"></a>

CodeBuild 샌드박스를 사용하기 전에 CodeBuild 서비스 역할에 다음 SSM 정책이 있는지 확인합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssmmessages:CreateControlChannel",
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenControlChannel",
                "ssmmessages:OpenDataChannel"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:111122223333:build/*",
                "arn:aws:ssm:us-east-1::document/AWS-StartSSHSession"
            ]
        }
    ]
}
```

------

## CodeBuild 샌드박스를 사용하여 빌드 디버그(콘솔)
<a name="sandbox-console"></a>

다음 지침에 따라 명령을 실행하고 콘솔에서 SSH 클라이언트를 CodeBuild 샌드박스에 연결합니다.

### CodeBuild 샌드박스를 사용하여 명령 실행(콘솔)
<a name="sandbox-console.commands"></a>

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

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트를 선택한 다음 **빌드 디버그**를 선택합니다.  
![\[콘솔의 빌드 디버그 프로젝트 세부 정보 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/sandbox-debug-build.png)

1. **명령 실행** 탭에서 사용자 지정 명령을 입력한 다음 **명령 실행**을 선택합니다.  
![\[콘솔의 실행 명령 세부 정보 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/debug-build-run.png)

1. 그러면 CodeBuild 샌드박스가 초기화되고 사용자 지정 명령 실행이 시작됩니다. 출력이 완료되면 **출력** 탭에 출력이 표시됩니다.  
![\[콘솔의 실행 명령 출력 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/debug-build-run-output.png)

1. 문제 해결이 완료되면 **샌드박스 중지**를 선택하여 샌드박스를 중지할 수 있습니다. 그런 다음 **중지**를 선택하여 샌드박스가 중지되는지 확인합니다.  
![\[샌드박스 중지 대화 상자입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/stop-sandbox.png)  
![\[콘솔에서 중지된 샌드박스가 있는 실행 명령 출력 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/stopped-sandbox.png)

### CodeBuild 샌드박스를 사용하여 SSH 클라이언트에 연결(콘솔)
<a name="sandbox-console.ssh"></a>

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

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트를 선택한 다음 **빌드 디버그**를 선택합니다.  
![\[콘솔의 빌드 디버그 프로젝트 세부 정보 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/sandbox-debug-build.png)

1. **SSH 클라이언트** 탭에서 **샌드박스 시작**을 선택합니다.  
![\[콘솔의 SSH 클라이언트 샌드박스 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/ssh-client-sandbox.png)

1. CodeBuild 샌드박스가 실행되기 시작하면 콘솔 지침에 따라 SSH 클라이언트를 샌드박스에 연결합니다.  
![\[콘솔의 SSH 클라이언트 샌드박스 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/ssh-client-sandbox-terminal.png)

1. 문제 해결이 완료되면 **샌드박스 중지**를 선택하여 샌드박스를 중지할 수 있습니다. 그런 다음 **중지**를 선택하여 샌드박스가 중지되는지 확인합니다.  
![\[샌드박스 중지 대화 상자입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/stop-sandbox-2.png)  
![\[콘솔에서 중지된 샌드박스가 있는 실행 명령 출력 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/stopped-sandbox-2.png)

## CodeBuild 샌드박스를 사용하여 빌드 디버그(AWS CLI)
<a name="sandbox-cli"></a>

다음 지침에 따라 명령을 실행하고 SSH 클라이언트를 CodeBuild 샌드박스에 연결합니다.

### CodeBuild 샌드박스 시작(AWS CLI)
<a name="sandbox-cli.start-sandbox"></a>

------
#### [ CLI command ]

```
aws codebuild start-sandbox --project-name $PROJECT_NAME
```
+ `--project-name`: CodeBuild 프로젝트 이름

------
#### [ Sample request ]

```
aws codebuild start-sandbox --project-name "project-name"
```

------
#### [ Sample response ]

```
{
    "id": "project-name",
    "arn": "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name",
    "projectName": "project-name",
    "requestTime": "2025-02-06T11:24:15.560000-08:00",
    "status": "QUEUED",
    "source": {
        "type": "S3",
        "location": "arn:aws:s3:::cofa-e2e-test-1-us-west-2-beta-default-build-sources/eb-sample-jetty-v4.zip",
        "insecureSsl": false
    },
    "environment": {
        "type": "LINUX_CONTAINER",
        "image": "aws/codebuild/standard:6.0",
        "computeType": "BUILD_GENERAL1_SMALL",
        "environmentVariables": [{
                "name": "foo",
                "value": "bar",
                "type": "PLAINTEXT"
            },
            {
                "name": "bar",
                "value": "baz",
                "type": "PLAINTEXT"
            }
        ],
        "privilegedMode": false,
        "imagePullCredentialsType": "CODEBUILD"
    },
    "timeoutInMinutes": 10,
    "queuedTimeoutInMinutes": 480,
    "logConfig": {
        "cloudWatchLogs": {
            "status": "ENABLED",
            "groupName": "group",
            "streamName": "stream"
        },
        "s3Logs": {
            "status": "ENABLED",
            "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
            "encryptionDisabled": false
        }
    },
    "encryptionKey": "arn:aws:kms:us-west-2:962803963624:alias/SampleEncryptionKey",
    "serviceRole": "arn:aws:iam::962803963624:role/BuildExecutionServiceRole",
    "currentSession": {
        "id": "0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
        "currentPhase": "QUEUED",
        "status": "QUEUED",
        "startTime": "2025-02-06T11:24:15.626000-08:00",
        "logs": {
            "groupName": "group",
            "streamName": "stream/0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream$252F0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/0103e0e7-52aa-4a3d-81dd-bfc27226fa54.gz?region=us-west-2",
            "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream/0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/0103e0e7-52aa-4a3d-81dd-bfc27226fa54.gz",
            "cloudWatchLogs": {
                "status": "ENABLED",
                "groupName": "group",
                "streamName": "stream"
            },
            "s3Logs": {
                "status": "ENABLED",
                "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                "encryptionDisabled": false
            }
        }
    }
}
```

------

### 샌드박스 상태에 대한 정보 가져오기(AWS CLI)
<a name="sandbox-cli.batch-get-sandboxes"></a>

------
#### [ CLI command ]

```
aws codebuild batch-get-sandboxes --ids $SANDBOX_IDs
```

------
#### [ Sample request ]

```
aws codebuild stop-sandbox --id "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name"
```
+ `--ids`: `sandboxIds` 또는 `sandboxArns`의 쉼표로 구분된 값 목록.

샌드박스 ID 또는 샌드박스 ARN을 제공할 수 있습니다.
+ 샌드박스 ID: `<codebuild-project-name>:<UUID>`

  예를 들어 `project-name:d25be134-05cb-404a-85da-ac5f85d2d72c`입니다.
+ 샌드박스 ARN: arn:aws:codebuild:*<region>*:*<account-id>*:sandbox/*<codebuild-project-name>*:*<UUID>*

  예를 들어 `arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name:d25be134-05cb-404a-85da-ac5f85d2d72c`입니다.

------
#### [ Sample response ]

```
{
    "sandboxes": [{
        "id": "project-name",
        "arn": "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name",
        "projectName": "project-name",
        "requestTime": "2025-02-06T11:24:15.560000-08:00",
        "endTime": "2025-02-06T11:39:21.587000-08:00",
        "status": "STOPPED",
        "source": {
            "type": "S3",
            "location": "arn:aws:s3:::cofa-e2e-test-1-us-west-2-beta-default-build-sources/eb-sample-jetty-v4.zip",
            "insecureSsl": false
        },
        "environment": {
            "type": "LINUX_CONTAINER",
            "image": "aws/codebuild/standard:6.0",
            "computeType": "BUILD_GENERAL1_SMALL",
            "environmentVariables": [{
                    "name": "foo",
                    "value": "bar",
                    "type": "PLAINTEXT"
                },
                {
                    "name": "bar",
                    "value": "baz",
                    "type": "PLAINTEXT"
                }
            ],
            "privilegedMode": false,
            "imagePullCredentialsType": "CODEBUILD"
        },
        "timeoutInMinutes": 10,
        "queuedTimeoutInMinutes": 480,
        "logConfig": {
            "cloudWatchLogs": {
                "status": "ENABLED",
                "groupName": "group",
                "streamName": "stream"
            },
            "s3Logs": {
                "status": "ENABLED",
                "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                "encryptionDisabled": false
            }
        },
        "encryptionKey": "arn:aws:kms:us-west-2:962803963624:alias/SampleEncryptionKey",
        "serviceRole": "arn:aws:iam::962803963624:role/BuildExecutionServiceRole",
        "currentSession": {
            "id": "0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "currentPhase": "COMPLETED",
            "status": "STOPPED",
            "startTime": "2025-02-06T11:24:15.626000-08:00",
            "endTime": "2025-02-06T11:39:21.600000-08:00",
            "phases": [{
                    "phaseType": "SUBMITTED",
                    "phaseStatus": "SUCCEEDED",
                    "startTime": "2025-02-06T11:24:15.577000-08:00",
                    "endTime": "2025-02-06T11:24:15.606000-08:00",
                    "durationInSeconds": 0
                },
                {
                    "phaseType": "QUEUED",
                    "phaseStatus": "SUCCEEDED",
                    "startTime": "2025-02-06T11:24:15.606000-08:00",
                    "endTime": "2025-02-06T11:24:16.067000-08:00",
                    "durationInSeconds": 0
                },
                {
                    "phaseType": "PROVISIONING",
                    "phaseStatus": "SUCCEEDED",
                    "startTime": "2025-02-06T11:24:16.067000-08:00",
                    "endTime": "2025-02-06T11:24:20.519000-08:00",
                    "durationInSeconds": 4,
                    "contexts": [{
                        "statusCode": "",
                        "message": ""
                    }]
                },
                {
                    "phaseType": "DOWNLOAD_SOURCE",
                    "phaseStatus": "SUCCEEDED",
                    "startTime": "2025-02-06T11:24:20.519000-08:00",
                    "endTime": "2025-02-06T11:24:22.238000-08:00",
                    "durationInSeconds": 1,
                    "contexts": [{
                        "statusCode": "",
                        "message": ""
                    }]
                },
                {
                    "phaseType": "RUNNING_SANDBOX",
                    "phaseStatus": "TIMED_OUT",
                    "startTime": "2025-02-06T11:24:22.238000-08:00",
                    "endTime": "2025-02-06T11:39:21.560000-08:00",
                    "durationInSeconds": 899,
                    "contexts": [{
                        "statusCode": "BUILD_TIMED_OUT",
                        "message": "Build has timed out. "
                    }]
                },
                {
                    "phaseType": "COMPLETED",
                    "startTime": "2025-02-06T11:39:21.560000-08:00"
                }
            ],
            "logs": {
                "groupName": "group",
                "streamName": "stream/0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
                "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream$252F0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
                "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/0103e0e7-52aa-4a3d-81dd-bfc27226fa54.gz?region=us-west-2",
                "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream/0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
                "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/0103e0e7-52aa-4a3d-81dd-bfc27226fa54.gz",
                "cloudWatchLogs": {
                    "status": "ENABLED",
                    "groupName": "group",
                    "streamName": "stream"
                },
                "s3Logs": {
                    "status": "ENABLED",
                    "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                    "encryptionDisabled": false
                }
            }
        }
    }],
    "sandboxesNotFound": []
}
```

------

### 샌드박스 중지(AWS CLI)
<a name="sandbox-cli.stop-sandbox"></a>

------
#### [ CLI command ]

```
aws codebuild stop-sandbox --id $SANDBOX-ID
```
+ `--id`: `sandboxId` 또는 `sandboxArn`

------
#### [ Sample request ]

```
aws codebuild stop-sandbox --id "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name"
```

------
#### [ Sample response ]

```
{
    "id": "project-name",
    "arn": "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name",
    "projectName": "project-name",
    "requestTime": "2025-02-06T11:24:15.560000-08:00",
    "status": "STOPPING",
    "source": {
        "type": "S3",
        "location": "arn:aws:s3:::cofa-e2e-test-1-us-west-2-beta-default-build-sources/eb-sample-jetty-v4.zip",
        "insecureSsl": false
    },
    "environment": {
        "type": "LINUX_CONTAINER",
        "image": "aws/codebuild/standard:6.0",
        "computeType": "BUILD_GENERAL1_SMALL",
        "environmentVariables": [{
                "name": "foo",
                "value": "bar",
                "type": "PLAINTEXT"
            },
            {
                "name": "bar",
                "value": "baz",
                "type": "PLAINTEXT"
            }
        ],
        "privilegedMode": false,
        "imagePullCredentialsType": "CODEBUILD"
    },
    "timeoutInMinutes": 10,
    "queuedTimeoutInMinutes": 480,
    "logConfig": {
        "cloudWatchLogs": {
            "status": "ENABLED",
            "groupName": "group",
            "streamName": "stream"
        },
        "s3Logs": {
            "status": "ENABLED",
            "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
            "encryptionDisabled": false
        }
    },
    "encryptionKey": "arn:aws:kms:us-west-2:962803963624:alias/SampleEncryptionKey",
    "serviceRole": "arn:aws:iam::962803963624:role/BuildExecutionServiceRole",
    "currentSession": {
        "id": "0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
        "currentPhase": "RUN_SANDBOX",
        "status": "STOPPING",
        "startTime": "2025-02-06T11:24:15.626000-08:00",
        "phases": [{
                "phaseType": "SUBMITTED",
                "phaseStatus": "SUCCEEDED",
                "startTime": "2025-02-08T14:33:26.144000-08:00",
                "endTime": "2025-02-08T14:33:26.173000-08:00",
                "durationInSeconds": 0
            },
            {
                "phaseType": "QUEUED",
                "phaseStatus": "SUCCEEDED",
                "startTime": "2025-02-08T14:33:26.173000-08:00",
                "endTime": "2025-02-08T14:33:26.702000-08:00",
                "durationInSeconds": 0
            },
            {
                "phaseType": "PROVISIONING",
                "phaseStatus": "SUCCEEDED",
                "startTime": "2025-02-08T14:33:26.702000-08:00",
                "endTime": "2025-02-08T14:33:30.530000-08:00",
                "durationInSeconds": 3,
                "contexts": [{
                    "statusCode": "",
                    "message": ""
                }]
            },
            {
                "phaseType": "DOWNLOAD_SOURCE",
                "phaseStatus": "SUCCEEDED",
                "startTime": "2025-02-08T14:33:30.530000-08:00",
                "endTime": "2025-02-08T14:33:33.478000-08:00",
                "durationInSeconds": 2,
                "contexts": [{
                    "statusCode": "",
                    "message": ""
                }]
            },
            {
                "phaseType": "RUN_SANDBOX",
                "startTime": "2025-02-08T14:33:33.478000-08:00"
            }
        ],
        "logs": {
            "groupName": "group",
            "streamName": "stream/0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream$252F0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/0103e0e7-52aa-4a3d-81dd-bfc27226fa54.gz?region=us-west-2",
            "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream/0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/0103e0e7-52aa-4a3d-81dd-bfc27226fa54.gz",
            "cloudWatchLogs": {
                "status": "ENABLED",
                "groupName": "group",
                "streamName": "stream"
            },
            "s3Logs": {
                "status": "ENABLED",
                "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                "encryptionDisabled": false
            }
        }
    }
}
```

------

### 명령 실행 시작(AWS CLI)
<a name="sandbox-cli.start-command-execution"></a>

------
#### [ CLI command ]

```
aws codebuild start-command-execution --command $COMMAND --type $TYPE --sandbox-id $SANDBOX-ID
```
+ `--command`: 실행해야 하는 명령
+ `--sandbox-id`: `sandboxId` 또는 `sandboxArn`
+ `--type`: 명령 유형 `SHELL`

------
#### [ Sample request ]

```
aws codebuild start-command-execution --command "echo "Hello World"" --type SHELL --sandbox-id "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name
```

------
#### [ Sample response ]

```
{
    "id": "e1c658c2-02bb-42a8-9abb-94835241fcd6",
    "sandboxId": "f7126a4a-b0d5-452f-814c-fea73718f805",
    "submitTime": "2025-02-06T20:12:02.683000-08:00",
    "status": "SUBMITTED",
    "command": "echo \"Hello World\"",
    "type": "SHELL",
    "logs": {
        "groupName": "group",
        "streamName": "stream",
        "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream",
        "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/f7126a4a-b0d5-452f-814c-fea73718f805.gz?region=us-west-2",
        "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream",
        "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/f7126a4a-b0d5-452f-814c-fea73718f805.gz",
        "cloudWatchLogs": {
            "status": "ENABLED",
            "groupName": "group",
            "streamName": "stream"
        },
        "s3Logs": {
            "status": "ENABLED",
            "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
            "encryptionDisabled": false
        }
    }
}
```

------

### 명령 실행에 대한 정보 가져오기(AWS CLI)
<a name="sandbox-cli.batch-get-command-executions"></a>

------
#### [ CLI command ]

```
aws codebuild batch-get-command-executions --command-execution-ids $COMMAND-IDs --sandbox-id $SANDBOX-IDs
```
+ `--command-execution-ids`: `commandExecutionIds`의 쉼표로 구분된 값 목록
+ `--sandbox-id`: `sandboxId` 또는 `sandboxArn`

------
#### [ Sample request ]

```
aws codebuild batch-get-command-executions --command-execution-ids"c3c085ed-5a8f-4531-8e95-87d547f27ffd" --sandbox-id "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name"
```

------
#### [ Sample response ]

```
{
    "commandExecutions": [{
        "id": "c3c085ed-5a8f-4531-8e95-87d547f27ffd",
        "sandboxId": "cd71e456-2a4c-4db4-ada5-da892b0bba05",
        "submitTime": "2025-02-10T20:18:17.118000-08:00",
        "startTime": "2025-02-10T20:18:17.939000-08:00",
        "endTime": "2025-02-10T20:18:17.976000-08:00",
        "status": "SUCCEEDED",
        "command": "echo \"Hello World\"",
        "type": "SHELL",
        "exitCode": "0",
        "standardOutputContent": "Hello World\n",
        "logs": {
            "groupName": "group",
            "streamName": "stream",
            "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream",
            "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/cd71e456-2a4c-4db4-ada5-da892b0bba05.gz?region=us-west-2",
            "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream",
            "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/cd71e456-2a4c-4db4-ada5-da892b0bba05.gz",
            "cloudWatchLogs": {
                "status": "ENABLED",
                "groupName": "group",
                "streamName": "stream"
            },
            "s3Logs": {
                "status": "ENABLED",
                "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                "encryptionDisabled": false
            }
        }
    }],
    "commandExecutionsNotFound": []
}
```

------

### 샌드박스에 대한 명령 실행 나열(AWS CLI)
<a name="sandbox-cli.list-command-executions-for-sandbox"></a>

------
#### [ CLI command ]

```
aws codebuild list-command-executions-for-sandbox --sandbox-id $SANDBOX-ID --next-token $NEXT_TOKEN --max-results $MAX_RESULTS --sort-order $SORT_ORDER
```
+ `--next-token`: 페이지가 지정된 결과(있는 경우)를 가져오는 다음 토큰. 목록 샌드박스의 이전 실행에서 이 값을 가져옵니다.
+ `--max-results`: (선택 사항) 검색할 최대 샌드박스 레코드 수
+ `--sort-order`: 샌드박스 레코드를 검색해야 하는 순서

------
#### [ Sample request ]

```
aws codebuild list-command-executions-for-sandbox --sandbox-id "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name"
```

------
#### [ Sample response ]

```
{
    "commandExecutions": [{
            "id": "aad6687e-07bc-45ab-a1fd-f5440229b528",
            "sandboxId": "cd71e456-2a4c-4db4-ada5-da892b0bba05",
            "submitTime": "2025-02-10T20:18:35.304000-08:00",
            "startTime": "2025-02-10T20:18:35.615000-08:00",
            "endTime": "2025-02-10T20:18:35.651000-08:00",
            "status": "FAILED",
            "command": "fail command",
            "type": "SHELL",
            "exitCode": "127",
            "standardErrContent": "/codebuild/output/tmp/script.sh: 4: fail: not found\n",
            "logs": {
                "groupName": "group",
                "streamName": "stream",
                "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream",
                "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/cd71e456-2a4c-4db4-ada5-da892b0bba05.gz?region=us-west-2",
                "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream",
                "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/cd71e456-2a4c-4db4-ada5-da892b0bba05.gz",
                "cloudWatchLogs": {
                    "status": "ENABLED",
                    "groupName": "group",
                    "streamName": "stream"
                },
                "s3Logs": {
                    "status": "ENABLED",
                    "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                    "encryptionDisabled": false
                }
            }
        },
        {
            "id": "c3c085ed-5a8f-4531-8e95-87d547f27ffd",
            "sandboxId": "cd71e456-2a4c-4db4-ada5-da892b0bba05",
            "submitTime": "2025-02-10T20:18:17.118000-08:00",
            "startTime": "2025-02-10T20:18:17.939000-08:00",
            "endTime": "2025-02-10T20:18:17.976000-08:00",
            "status": "SUCCEEDED",
            "command": "echo \"Hello World\"",
            "type": "SHELL",
            "exitCode": "0",
            "standardOutputContent": "Hello World\n",
            "logs": {
                "groupName": "group",
                "streamName": "stream",
                "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream",
                "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/cd71e456-2a4c-4db4-ada5-da892b0bba05.gz?region=us-west-2",
                "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream",
                "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/cd71e456-2a4c-4db4-ada5-da892b0bba05.gz",
                "cloudWatchLogs": {
                    "status": "ENABLED",
                    "groupName": "group",
                    "streamName": "stream"
                },
                "s3Logs": {
                    "status": "ENABLED",
                    "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                    "encryptionDisabled": false
                }
            }
        }
    ]
}
```

------

### 샌드박스 나열(AWS CLI)
<a name="sandbox-cli.list-sandboxes"></a>

------
#### [ CLI command ]

```
aws codebuild list-sandboxes --next-token $NEXT_TOKEN --max-results $MAX_RESULTS --sort-order $SORT_ORDER
```

------
#### [ Sample request ]

```
aws codebuild list-sandboxes
```

------
#### [ Sample response ]

```
{
    "ids": [
        "s3-log-project-integ-test-temp173925062814985d64e0f-7880-41df-9a3c-fb6597a266d2:827a5243-0841-4b69-a720-4438796f6967",
        "s3-log-project-integ-test-temp1739249999716bbd438dd-8bb8-47bd-ba6b-0133ac65b3d3:e2fa4eab-73af-42e3-8903-92fddaf9f378",
        "s3-log-project-integ-test-temp17392474779450fbdacc2-2d6e-4190-9ad5-28f891bb7415:cd71e456-2a4c-4db4-ada5-da892b0bba05",
        "s3-log-project-integ-test-temp17392246284164301421c-5030-4fa1-b4d3-ca15e44771c5:9e26ab3f-65e4-4896-a19c-56b1a95e630a",
        "s3-log-project-integ-test-temp173921367319497056d8d-6d8e-4f5a-a37c-a62f5686731f:22d91b06-df1e-4e9c-a664-c0abb8d5920b",
        "s3-log-project-integ-test-temp1739213439503f6283f19-390c-4dc8-95a9-c8480113384a:82cc413e-fc46-47ab-898f-ae23c83a613f",
        "s3-log-project-integ-test-temp1739054385570b1f1ddc2-0a23-4062-bd0c-24e9e4a99b99:c02562f3-2396-42ec-98da-38e3fe5da13a",
        "s3-log-project-integ-test-temp173905400540237dab1ac-1fde-4dfb-a8f5-c0114333dc89:d2f30493-f65e-4fa0-a7b6-08a5e77497b9",
        "s3-log-project-integ-test-temp17390534055719c534090-7bc4-48f1-92c5-34acaec5bf1e:df5f1c8a-f017-43b7-91ba-ad2619e2c059",
        "s3-log-project-integ-test-temp1739052719086a61813cc-ebb9-4db4-9391-7f43cc984ee4:d61917ec-8037-4647-8d52-060349272c4a",
        "s3-log-project-integ-test-temp173898670094078b67edb-c42f-42ed-9db2-4b5c1a5fc66a:ce33dfbc-beeb-4466-8c99-a3734a0392c7",
        "s3-log-project-integ-test-temp17389863425584d21b7cd-32e2-4f11-9175-72c89ecaffef:046dadf0-1f3a-4d51-a2c0-e88361924acf",
        "s3-log-project-integ-test-temp1738985884273977ccd23-394b-46cc-90d3-7ab94cf764dc:0370dc41-9339-4b0a-91ed-51929761b244",
        "s3-log-project-integ-test-temp1738985365972241b614f-8e41-4387-bd25-2b8351fbc9e0:076c392a-9630-47d8-85a9-116aa34edfff",
        "s3-log-project-integ-test-temp1738985043988a51a9e2b-09d6-4d24-9c3c-1e6e21ac9fa8:6ea3949c-435b-4177-aa4d-614d5956244c",
        "s3-log-project-integ-test-temp1738984123354c68b31ad-49d1-4f4b-981d-b66c00565ff6:6c3fff6c-815b-48b5-ada3-737400a6dee8",
        "s3-log-project-integ-test-temp1738977263715d4d5bf6c-370a-48bf-8ea6-905358a6cf92:968a0f54-724a-42d1-9207-6ed854b2fae8",
        "s3-log-project-integ-test-temp173897358796816ce8d7d-2a5e-41ef-855b-4a94a8d2795d:80f9a7ce-930a-402e-934e-d8b511d68b04",
        "s3-log-project-integ-test-temp17389730633301af5e452-0966-467c-b684-4e36d47f568c:cabbe989-2e8a-473c-af25-32edc8c28646",
        "s3-log-project-integ-test-temp1738901503813173fd468-b723-4d7b-9f9f-82e88d17f264:f7126a4a-b0d5-452f-814c-fea73718f805",
        "s3-log-project-integ-test-temp1738890502472c13616fb-bd0f-4253-86cc-28b74c97a0ba:c6f197e5-3a53-45b6-863e-0e6353375437",
        "s3-log-project-integ-test-temp17388903044683610daf3-8da7-43c6-8580-9978432432ce:d20aa317-8838-4966-bbfc-85b908213df1",
        "s3-log-project-integ-test-temp173888857196780b5ab8b-e54b-44fd-a222-c5a374fffe96:ab4b9970-ffae-47a0-b3a8-7b6790008cad",
        "s3-log-project-integ-test-temp1738888336931c11d378d-e74d-49a4-a723-3b92e6f7daac:4922f0e8-9b7d-4119-9c9f-115cd85e703e",
        "s3-log-project-integ-test-temp17388881717651612a397-c23f-4d88-ba87-2773cd3fc0c9:be91c3fc-418e-4feb-8a3a-ba58ff8f4e8a",
        "s3-log-project-integ-test-temp17388879727174c3c62ed-6195-4afb-8a03-59674d0e1187:a48826a8-3c0d-43c5-a1b5-1c98a0f978e9",
        "s3-log-project-integ-test-temp1738885948597cef305e4-b8b4-46b0-a65b-e2d0a7b83294:c050e77d-e3f8-4829-9a60-46149628fe96",
        "s3-log-project-integ-test-temp173888561463001a7d2a8-e4e4-4434-94db-09d3da9a9e17:8c3ac3f5-7111-4297-aec9-2470d3ead873",
        "s3-log-project-integ-test-temp1738869855076eb19cafd-04fe-41bd-8aa0-40826d0c0d27:d25be134-05cb-404a-85da-ac5f85d2d72c",
        "s3-project-integ-test-temp1738868157467148eacfc-d39b-49fc-a137-e55381cd2978:4909557b-c221-4814-b4b6-7d9e93d37c35",
        "s3-project-integ-test-temp1738820926895abec0af2-e33d-473c-9cf4-2122dd9d6876:8f5cf218-71d6-40a4-a4be-6cacebd7765f",
        "s3-project-integ-test-temp173881998877574f969a6-1c2e-4441-b463-ab175b45ce32:04396851-c901-4986-9117-585528e3877f",
        "s3-project-integ-test-temp17388189812309abd2604-29ba-4cf6-b6bf-073207b7db9c:540075c7-f5ec-41e8-9341-2233c09247eb",
        "s3-project-integ-test-temp1738818843474d3ea9ac1-b609-461b-bbdb-2da245c9bc96:865d4c3c-fbfe-4ece-9c92-d0c928341404",
        "s3-project-integ-test-temp1738818542236006e9169-e6d9-4344-9b59-f557e7aec619:1f9ffa87-da15-4290-83e2-eebdd877497b",
        "s3-project-integ-test-temp173881809557486ad11fd-7931-48d7-81d5-499cea52a6bc:c4c2efc4-685f-4e13-8b0f-1ef85ec300b1",
        "s3-project-integ-test-temp173881794103322941020-3f0b-49c3-b836-fcd818ec9484:0344cfba-de48-456d-b2a8-6566bd4a5d6e",
        "s3-project-integ-test-temp1738817680747b93d0d0b-ea16-497f-9559-af25ee6dcfdf:654a3a55-d92a-4dc6-8da8-56fd4d40d7e1",
        "s3-project-integ-test-temp17388174027191255c3da-086c-4270-b047-acac0b7bee0d:b7e82740-2c69-42fc-ab5a-dbf15bc016a1",
        "s3-project-integ-test-temp1738817099799016e7fa3-b9b5-46a2-bcd5-0888c646743f:8705a6a4-79ff-427a-a1c3-85c4e8fe462e",
        "s3-project-integ-test-temp1738816479281bb0c3606-5ebf-4623-bed5-12b60e9d3512:f23fc74b-a981-4835-8e28-375fcd4c99e4",
        "s3-project-integ-test-temp1738816263585c939a133-4d37-482c-9238-1dbff34b7674:ca28e234-0045-4ae6-8732-938b17597f50",
        "s3-project-integ-test-temp173881580873072d18733-8fe4-43b1-83f7-95f25bb27ccf:c6f0f55b-5736-47c7-a3aa-1b8461a6d5ed"
    ]
}
```

------

# 자습서: SSH를 사용하여 샌드박스에 연결
<a name="sandbox-ssh-tutorial"></a>

이 자습서에서는 SSH 클라이언트를 사용하여 CodeBuild 샌드박스에 연결하는 방법을 보여줍니다.

이 자습서를 완료하려면 먼저 다음을 수행해야 합니다.
+ 기존 AWS CodeBuild 프로젝트가 있는지 확인합니다.
+ CodeBuild 프로젝트 역할에 대해 구성된 적절한 IAM 권한을 설정합니다.
+ 로컬 AWS CLI 시스템에를 설치하고 구성합니다.

## 1단계: 샌드박스 시작
<a name="sandbox-ssh-tutorial.start-sandbox"></a>

**콘솔에서 CodeBuild 샌드박스를 시작하려면**

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

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트를 선택한 다음 **빌드 디버그**를 선택합니다.  
![\[콘솔의 빌드 프로젝트 세부 정보 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/project-debug-build.png)

1. **SSH 클라이언트** 탭에서 **샌드박스 시작**을 선택합니다.  
![\[콘솔의 'SSH 클라이언트' 탭과 '샌드박스 시작' 버튼입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/ssh-client-sandbox.png)

1. 샌드박스 초기화 프로세스에 시간이 걸릴 수 있습니다. 상태가 `RUN_SANDDBOX`로 변경될 때 샌드박스에 연결할 수 있습니다.  
![\[상태가 'RUN_SANDDBOX'로 변경된 후의 SSH 샌드박스 연결입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/run-sandbox.png)

## 2단계: 로컬 SSH 구성 수정
<a name="sandbox-ssh-tutorial.modify-ssh"></a>

샌드박스에 처음 연결하는 경우 다음 단계를 사용하여 일회성 설정 프로세스를 수행해야 합니다.

**콘솔에서 로컬 SSH 구성을 수정하려면**

1. 운영 체제의 설정 명령을 찾습니다.

1. 로컬 터미널을 연 다음 제공된 명령을 복사하고 실행하여 로컬 SSH 구성을 설정할 수 있도록 스크립트를 다운로드하고 실행합니다. 예를 들어, 운영 체제가 macOS인 경우 다음 명령을 사용합니다.  
![\[콘솔에서 CodeBuild 샌드박스에 대한 SSH 연결을 위한 macOS 명령입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/modify-ssh-macOS.png)

1. 구성 스크립트는 샌드박스에 연결하는 데 필요한 구성을 추가합니다. 이러한 변경 사항을 수락하라는 메시지가 표시됩니다.

1. 구성에 성공하면 CodeBuild 샌드박스에 대한 새 SSH 구성 항목이 생성됩니다.  
![\[SSH 샌드박스 연결에 성공했습니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/ssh-terminal-success.png)

## 3단계: 샌드박스에 연결
<a name="sandbox-ssh-tutorial.connect-sandbox"></a>

**콘솔에서 로컬 SSH 구성을 수정하려면**

1.  AWS CLI 인증을 구성하고 AWS CLI 사용자에게 `codebuild:StartSandboxConnection` 권한이 있는지 확인합니다. 자세한 내용은 *AWS 명령줄 인터페이스 사용 설명서 버전 1*의 [AWS CLI용 IAM 사용자 자격 증명을 사용하여 인증](https://docs.aws.amazon.com/cli/v1/userguide/cli-authentication-user.html)을 참조하세요.

1. 다음 명령을 사용하여 샌드박스에 연결합니다.

   ```
   ssh codebuild-sandbox-ssh=arn:aws:codebuild:us-east-1:<account-id>:sandbox/<sandbox-id>
   ```
**참고**  
연결 실패 문제를 해결하려면 `-v` 플래그를 사용하여 상세 정보 출력을 활성화합니다. 예를 들어 `ssh -v codebuild-sandbox-ssh=arn:aws:codebuild:us-east-1:<account-id>:sandbox/<sandbox-id>`입니다.  
추가적인 문제 해결 지침은 [AWS CodeBuild 샌드박스 SSH 연결 문제 해결](sandbox-troubleshooting.md)를 참조하세요.

## 4단계: 결과 검토
<a name="sandbox-ssh-tutorial.review-results"></a>

연결되면 빌드 실패를 디버깅하고, 빌드 명령을 테스트하고, 구성 변경을 실험하고, 샌드박스를 사용하여 환경 변수 및 종속성을 확인할 수 있습니다.

# AWS CodeBuild 샌드박스 SSH 연결 문제 해결
<a name="sandbox-troubleshooting"></a>

이 주제의 정보를 활용하면 CodeBuild 샌드박스 SSH 연결 문제를 식별, 진단 및 해결하는 데 도움이 됩니다.

**Topics**
+ [`StartSandboxConnection` `InvalidInputException` SSH가 CodeBuild 샌드박스 환경으로 전환될 때 오류 발생](#sandbox-troubleshooting.invalid-input)
+ [오류: SSH가 CodeBuild 샌드박스 환경으로 전환될 때 '자격 증명을 찾을 수 없음'](#sandbox-troubleshooting.credentials)
+ [`StartSandboxConnection` `AccessDeniedException` SSH가 CodeBuild 샌드박스 환경으로 전환될 때 오류 발생](#sandbox-troubleshooting.access-denied)
+ [오류: SSH가 CodeBuild 샌드박스 환경으로 전환될 때 'ssh: 호스트 이름을 확인할 수 없음'](#sandbox-troubleshooting.hostname)

## `StartSandboxConnection` `InvalidInputException` SSH가 CodeBuild 샌드박스 환경으로 전환될 때 오류 발생
<a name="sandbox-troubleshooting.invalid-input"></a>

**문제:** `ssh codebuild-sandbox-ssh=<sandbox-arn>` 명령을 사용하여 CodeBuild 샌드박스 환경에 연결하려고 하면 다음과 같은 `InvalidInputException` 오류가 발생할 수 있습니다.

```
An error occurred (InvalidInputException) when calling the StartSandboxConnection 
operation: Failed to start SSM session for {sandbox-arn}
User: arn:aws:sts::<account-ID>:assumed-role/<service-role-name>/AWSCodeBuild-<UUID> 
is not authorized to perform: ssm:StartSession on resource.
```

```
An error occurred (InvalidInputException) when calling the StartSandboxConnection 
operation: Failed to start SSM session for 
sandbox <sandbox-arn>: codebuild:<UUID> is not connected.
```

**가능한 원인:**
+ Amazon EC2 Systems Manager Agent 누락: 빌드 이미지에 SSM 에이전트가 제대로 설치되거나 구성되지 않았습니다.
+ 권한 부족: CodeBuild 프로젝트 서비스 역할에 필요한 SSM 권한이 없습니다.

**권장 솔루션:** 빌드에 사용자 지정 이미지를 사용하는 경우 다음을 수행합니다.

1. SSM Agent 설치 자세한 내용은 **에서 [Linux용 Amazon EC2 인스턴스에 수동으로 SSM Agent 설치 및 제거](https://docs.aws.amazon.com/systems-manager/latest/userguide/manually-install-ssm-agent-linux.html)를 참조하세요. SSM Agent는 `3.0.1295.0` 이상 버전이어야 합니다.

1. [https://github.com/aws/aws-codebuild-docker-images/blob/master/ubuntu/standard/7.0/amazon-ssm-agent.json](https://github.com/aws/aws-codebuild-docker-images/blob/master/ubuntu/standard/7.0/amazon-ssm-agent.json) 파일을 이미지의 `/etc/amazon/ssm/` 디렉터리에 복사합니다. 이렇게 하면 SSM Agent에서 **컨테이너 모드**가 활성화됩니다.

1. CodeBuild 프로젝트의 서비스 역할에 다음 권한이 있는지 확인한 다음 샌드박스 환경을 다시 시작합니다.

   ```
   {
      "Effect": "Allow",
         "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
         ],
         "Resource": "*"
    },
    {
       "Effect": "Allow",
       "Action": [
          "ssm:StartSession"
        ],
        "Resource": [
           "arn:aws:codebuild:region:account-id:build/*",
           "arn:aws:ssm:region::document/AWS-StartSSHSession"
        ]
    }
   ```

## 오류: SSH가 CodeBuild 샌드박스 환경으로 전환될 때 '자격 증명을 찾을 수 없음'
<a name="sandbox-troubleshooting.credentials"></a>

**문제:** `ssh codebuild-sandbox-ssh=<sandbox-arn>` 명령을 사용하여 CodeBuild 샌드박스 환경에 연결하려고 하면 다음과 같은 자격 증명 오류가 발생할 수 있습니다.

```
Unable to locate credentials. You can configure credentials by running 
"aws configure".
```

**가능한 원인:** AWS 자격 증명이 로컬 환경에서 제대로 구성되지 않았습니다.

**권장 솔루션:** *AWS 버전 2용 명령줄 인터페이스 사용 설명서*의 공식 설명서: [에 대한 설정 구성 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)에 따라 AWS CLI 자격 증명을 구성합니다.

## `StartSandboxConnection` `AccessDeniedException` SSH가 CodeBuild 샌드박스 환경으로 전환될 때 오류 발생
<a name="sandbox-troubleshooting.access-denied"></a>

**문제:** `ssh codebuild-sandbox-ssh=<sandbox-arn>` 명령을 사용하여 CodeBuild 샌드박스 환경에 연결하려고 하면 다음과 같은 권한 오류가 발생할 수 있습니다.

```
An error occurred (AccessDeniedException) when calling the StartSandboxConnection 
operation: 
User: arn:aws:sts::account-id:assumed-role/role-name
is not authorized to perform: codebuild:StartSandboxConnection on resource: 
sandbox-arn
because no identity-based policy allows the codebuild:StartSandboxConnection action
```

**가능한 원인:** 자격 AWS 증명에이 작업을 수행하는 데 필요한 CodeBuild 권한이 없습니다.

**권장 솔루션:** 자격 AWS CLI 증명과 연결된 IAM 사용자 또는 역할에 다음 권한이 있는지 확인합니다.

```
{
    "Effect": "Allow",
    "Action": [
       "codebuild:StartSandboxConnection"
     ],
     "Resource": [
        "arn:aws:codebuild:region:account-id:sandbox/*"
     ]
}
```

## 오류: SSH가 CodeBuild 샌드박스 환경으로 전환될 때 'ssh: 호스트 이름을 확인할 수 없음'
<a name="sandbox-troubleshooting.hostname"></a>

**문제:** `ssh codebuild-sandbox-ssh=<sandbox-arn>` 명령을 사용하여 CodeBuild 샌드박스 환경에 연결하려고 하면 다음과 같은 호스트 이름 확인 오류가 발생합니다.

```
ssh: Could not resolve hostname
```

**가능한 원인:** 이 오류는 일반적으로 로컬 환경에서 필요한 CodeBuild 샌드박스 연결 스크립트가 제대로 실행되지 않은 경우에 발생합니다.

**권장 솔루션**

1. CodeBuild 샌드박스 연결 스크립트를 다운로드합니다.

1. 터미널에서 스크립트를 실행하여 필요한 SSH 구성을 설정합니다.

1. 샌드박스 환경에 대한 SSH 연결을 다시 시도합니다.

# Session Manager를 사용하여 빌드 디버그
<a name="session-manager"></a>

에서 실행 중인 빌드를 일시 중지한 다음 AWS Systems Manager 세션 관리자를 사용하여 빌드 컨테이너에 연결하고 컨테이너의 상태를 볼 AWS CodeBuild수 있습니다.

**참고**  
이 기능은 Windows 환경에서는 제공되지 않습니다.

**Topics**
+ [사전 조건](#ssm.prerequisites)
+ [빌드 일시 중지](#ssm-pause-build)
+ [빌드를 시작합니다.](#ssm-start-build)
+ [빌드 컨테이너에 연결](#ssm-connect)
+ [빌드 재개](#ssm-resume-build)

## 사전 조건
<a name="ssm.prerequisites"></a>

Session Manager를 빌드 세션과 함께 사용할 수 있게 하려면 빌드의 세션 연결을 활성화해야 합니다. 다음과 같은 두 가지 사전 요구 사항이 있습니다.
+ CodeBuild Linux 표준 큐레이트된 이미지에는 이미 SSM Agent가 설치되어 있고 SSM Agent 컨테이너 모드가 활성화되어 있습니다.

  빌드에 사용자 지정 이미지를 사용하는 경우 다음을 수행하세요.

  1. SSM Agent 설치 자세한 내용은 AWS Systems Manager 사용 설명서의 [Linux용 EC2 인스턴스에 수동으로 SSM Agent 설치](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html)를 참조하세요. SSM Agent는 3.0.1295.0 이상 버전이어야 합니다.

  1. [https://github.com/aws/aws-codebuild-docker-images/blob/master/ubuntu/standard/5.0/amazon-ssm-agent.json](https://github.com/aws/aws-codebuild-docker-images/blob/master/ubuntu/standard/5.0/amazon-ssm-agent.json) 파일을 이미지의 `/etc/amazon/ssm/` 디렉터리에 복사합니다. 이렇게 하면 SSM 에이전트에서 컨테이너 모드가 활성화됩니다.
**참고**  
이 기능이 예상대로 작동하려면 사용자 지정 이미지에 최근 업데이트한 SSM 에이전트가 필요합니다.
+ CodeBuild 서비스 역할에는 다음과 같은 SSM 정책이 있어야 합니다.

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

****  

  ```
  {
     "Version":"2012-10-17",		 	 	  
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
         ],
         "Resource": "*"
       }
     ]
  }
  ```

------

  빌드를 시작할 때 CodeBuild 콘솔이 이 정책을 서비스 역할에 자동으로 연결하도록 할 수 있습니다. 또는 이 정책을 서비스 역할에 수동으로 연결할 수도 있습니다.
+ Systems Manager 기본 설정에서 **감사 및 로깅 세션 활동**을 활성화한 경우 CodeBuild 서비스 역할에도 추가 권한이 있어야 합니다. 권한은 로그가 저장되는 위치에 따라 다릅니다.  
CloudWatch Logs  
CloudWatch Logs를 사용하여 로그를 저장하는 경우 CodeBuild 서비스 역할에 다음 권한을 추가합니다.    
****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "logs:DescribeLogGroups",
              "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:*:*"
          },
          {
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogStream",
                  "logs:PutLogEvents"
              ],
              "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:MyLogGroup:*"
          }
      ]
  }
  ```  
Amazon S3  
Amazon S3를 사용하여 로그를 저장하는 경우 CodeBuild 서비스 역할에 다음 권한을 추가합니다.    
****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "s3:GetEncryptionConfiguration",
          "s3:PutObject"
        ],
        "Resource": [
          "arn:aws:s3:::<bucket-name>",
          "arn:aws:s3:::<bucket-name>/*"
        ]
      }
    ]
  }
  ```

  자세한 내용은AWS Systems Manager 사용 설명서의 [세션 활동 감사 및 로깅](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-logging-auditing.html)을 참조하세요.**

## 빌드 일시 중지
<a name="ssm-pause-build"></a>

빌드를 일시 중지하려면 buildspec 파일의 모든 빌드 단계에 **codebuild-breakpoint** 명령을 삽입합니다. 이 시점에서 빌드가 일시 중지되므로 빌드 컨테이너에 연결하여 컨테이너를 현재 상태로 볼 수 있습니다.

예를 들어, buildspec 파일의 빌드 단계에 다음을 추가합니다.

```
phases:
  pre_build:
    commands:
      - echo Entered the pre_build phase...
      - echo "Hello World" > /tmp/hello-world
      - codebuild-breakpoint
```

이 코드는 `/tmp/hello-world` 파일을 생성한 다음, 이 시점에서 빌드를 일시 중지합니다.

## 빌드를 시작합니다.
<a name="ssm-start-build"></a>

Session Manager를 빌드 세션과 함께 사용할 수 있게 하려면 빌드의 세션 연결을 활성화해야 합니다. 이렇게 하려면 빌드를 시작할 때 다음 절차를 따르세요.

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

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트를 선택한 다음, **재정의로 빌드 시작**을 선택합니다.

1. **Advanced build overrides(고급 빌드 재정의)**를 선택합니다.

1. **환경** 섹션에서 **세션 연결 활성화** 옵션을 선택합니다. 이 옵션을 선택하지 않으면 **codebuild-breakpoint** 및 **codebuild-resume** 명령이 모두 무시됩니다.

1. 다른 사항을 원하는 대로 변경하고 **빌드 시작**을 선택합니다.

1. 콘솔에서 빌드 상태를 모니터링합니다. 세션을 사용할 수 있게 되면 **빌드 상태** 섹션에 **AWS Session Manager** 링크가 나타납니다.

## 빌드 컨테이너에 연결
<a name="ssm-connect"></a>

다음 두 방법 중 하나로 빌드 컨테이너에 연결할 수 있습니다.

CodeBuild 콘솔  
웹 브라우저에서 **AWS Session Manager** 링크를 열어 빌드 컨테이너에 연결합니다. 빌드 컨테이너를 탐색하고 제어할 수 있는 터미널 세션이 열립니다.

AWS CLI  
이 절차를 수행하려면 로컬 컴퓨터에 Session Manager 플러그인이 설치되어 있어야 합니다. 자세한 내용은 AWS Systems Manager 사용 설명서[의 AWS CLI용 세션 관리자 플러그인 설치를](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html) 참조하세요.

1. 빌드 ID로 **batch-get-builds** API를 호출하여 세션 대상 식별자를 비롯한 빌드 관련 정보를 가져옵니다. 세션 대상 식별자 속성 이름은 `aws` 명령의 출력 유형에 따라 달라집니다. 바로 이 때문에 `--output json`이 명령에 추가된 것입니다.

   ```
   aws codebuild batch-get-builds --ids <buildID> --region <region> --output json
   ```

1. `sessionTarget` 속성 값을 복사합니다. `sessionTarget` 속성 이름은 `aws` 명령의 출력 유형에 따라 달라질 수 있습니다. 바로 이 때문에 `--output json`이 이전 단계의 명령에 추가된 것입니다.

1. 다음 명령을 사용하여 빌드 컨테이너에 연결합니다.

   ```
   aws ssm start-session --target <sessionTarget> --region <region>
   ```

이 예제에서는 `/tmp/hello-world` 파일이 존재하고 텍스트 `Hello World`가 포함되어 있는지 확인하세요.

## 빌드 재개
<a name="ssm-resume-build"></a>

빌드 컨테이너 검사를 마친 후 컨테이너 쉘에서 **codebuild-resume** 명령을 실행합니다.

```
$ codebuild-resume
```

# AWS CodeBuild에서 빌드 삭제
<a name="delete-builds"></a>

AWS CLI 또는 AWS SDK를 사용하여 AWS CodeBuild에서 빌드를 삭제할 수 있습니다.

**Topics**
+ [빌드 삭제(AWS CLI)](#delete-builds-cli)
+ [빌드 삭제(AWS SDK)](#delete-builds-sdks)

## 빌드 삭제(AWS CLI)
<a name="delete-builds-cli"></a>

`batch-delete-builds` 명령을 실행합니다.

```
aws codebuild batch-delete-builds --ids ids
```

이전 명령에서 다음 자리표시자를 바꿉니다.
+ *ids*: 필수 문자열입니다. 삭제할 빌드의 ID입니다. 여러 개의 빌드를 지정하려면 각 빌드 ID를 공백으로 구분합니다. 빌드 ID 목록을 가져오려면 다음 주제를 참조하십시오.
  + [빌드 ID 목록 보기(AWS CLI)](view-build-list.md#view-build-list-cli)
  + [빌드 프로젝트의 빌드 ID 목록 보기(AWS CLI)](view-builds-for-project.md#view-builds-for-project-cli)

성공하면 성공적으로 삭제된 각 빌드의 Amazon 리소스 이름(ARN)이 포함된 `buildsDeleted` 배열이 출력에 나타납니다. 성공적으로 삭제되지 않은 빌드에 대한 정보는 `buildsNotDeleted` 배열 내 출력에 표시됩니다.

예를 들면 다음 명령을 실행하는 경우

```
aws codebuild batch-delete-builds --ids my-demo-build-project:f8b888d2-5e1e-4032-8645-b115195648EX my-other-demo-build-project:a18bc6ee-e499-4887-b36a-8c90349c7eEX
```

다음과 비슷한 정보가 출력에 나타납니다.

```
{
  "buildsNotDeleted": [
    {
      "id": "arn:aws:codebuild:us-west-2:123456789012:build/my-demo-build-project:f8b888d2-5e1e-4032-8645-b115195648EX",
      "statusCode": "BUILD_IN_PROGRESS"
    }
  ], 
  "buildsDeleted": [
    "arn:aws:codebuild:us-west-2:123456789012:build/my-other-demo-build-project:a18bc6ee-e499-4887-b36a-8c90349c7eEX"
  ]
}
```

## 빌드 삭제(AWS SDK)
<a name="delete-builds-sdks"></a>

AWS CodeBuild를 AWS SDK와 함께 사용하는 방법에 대한 자세한 정보는 [AWS SDKs 및 도구 참조](sdk-ref.md) 단원을 참조하십시오.

# 에서 수동으로 빌드 재시도 AWS CodeBuild
<a name="retry-build"></a>

 AWS CodeBuild 콘솔 AWS CLI또는 AWS SDKs를 사용하여 단일 빌드 또는 배치 빌드를 수동으로 재시도할 수 있습니다 AWS CodeBuild.

**Topics**
+ [빌드를 수동으로 재시도(콘솔)](#retry-build-console)
+ [빌드를 수동으로 재시도(AWS CLI)](#retry-build-cli)
+ [빌드 수동 재시AWS SDKs)](#retry-build-sdks)

## 빌드를 수동으로 재시도(콘솔)
<a name="retry-build-console"></a>

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

1. 다음 중 하나를 수행하세요.
   + ***build-project-name*:*build-ID*** 페이지가 표시되면 **빌드 재시도**를 선택합니다.
   + 탐색 창에서 [**Build history**]를 선택합니다. 빌드 목록에서 해당 빌드의 확인란을 선택한 다음, **빌드 재시도**를 선택합니다.
   + 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트 목록의 **이름** 열에서 빌드 프로젝트 이름에 대한 링크를 선택합니다. 빌드 목록에서 해당 빌드의 확인란을 선택한 다음, **빌드 재시도**를 선택합니다.

**참고**  
기본적으로 가장 최근에 실행한 100개의 최신 빌드 또는 빌드 프로젝트가 표시됩니다. 더 많은 빌드 또는 빌드 프로젝트를 보려면 기어 아이콘을 선택한 다음 **페이지당 빌드 수** 또는 **페이지당 프로젝트 수**에서 다른 값을 선택하거나 뒤로 및 앞으로 화살표를 선택합니다.

## 빌드를 수동으로 재시도(AWS CLI)
<a name="retry-build-cli"></a>
+ **retry-build** 명령을 실행합니다.

  ```
  aws codebuild retry-build --id <build-id> --idempotency-token <idempotencyToken>
  ```

  이전 명령에서 다음 자리표시자를 바꿉니다.
  + *<build-id>*: 필수 문자열입니다. 재시도할 빌드 또는 배치 빌드의 ID입니다. 빌드 ID 목록을 가져오려면 다음 주제를 참조하십시오.
    + [빌드 ID 목록 보기(AWS CLI)](view-build-list.md#view-build-list-cli)
    + [배치 빌드 ID 목록 보기(AWS CLI)](view-build-list.md#view-batch-build-list-cli)
    + [빌드 프로젝트의 빌드 ID 목록 보기(AWS CLI)](view-builds-for-project.md#view-builds-for-project-cli)
    + [빌드 프로젝트의 배치 빌드 ID 목록 보기(AWS CLI)](view-builds-for-project.md#view-batch-builds-for-project-cli)
  + `--idempotency-token`: 선택 사항입니다. **retry-build** 명령을 옵션과 함께 실행하면 고유의 대소문자 구분 식별자 또는 토큰이 `retry-build` 요청에 포함됩니다. 토큰은 요청 후 5분 동안 유효합니다. 동일한 토큰을 사용하여 `retry-build` 요청을 반복하고 파라미터를 변경하면 CodeBuild는 파라미터 불일치 오류를 반환합니다.

## 빌드 수동 재시AWS SDKs)
<a name="retry-build-sdks"></a>

를 SDK와 AWS CodeBuild 함께 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요[AWS SDKs 및 도구 참조](sdk-ref.md). AWS SDKs

# AWS CodeBuild에서 자동으로 빌드 재시도
<a name="auto-retry-build"></a>

AWS CodeBuild 콘솔, AWS CLI 또는 AWS SDK를 사용하여 AWS CodeBuild에서 빌드를 자동으로 재시도할 수 있습니다. 자동 재시도를 활성화하면 CodeBuild는 빌드가 실패한 후 프로젝트의 서비스 역할을 사용하여 지정된 한도까지 자동으로 `RetryBuild`를 호출합니다. 예를 들어 자동 재시도 제한이 2로 설정된 경우 CodeBuild는 `RetryBuild` API를 호출하여 빌드를 추가로 최대 2회 자동 재시도합니다.

**참고**  
CodeBuild는 CodePipeline에 대한 자동 재시도를 지원하지 않습니다.

**Topics**
+ [빌드 자동 재시도(콘솔)](#auto-retry-build-console)
+ [빌드 자동 재시도(AWS CLI)](#auto-retry-build-cli)
+ [빌드 자동 재시도(AWS SDK)](#auto-retry-build-sdks)

## 빌드 자동 재시도(콘솔)
<a name="auto-retry-build-console"></a>

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

1. **프로젝트 생성**을 선택합니다. 자세한 내용은 [빌드 프로젝트 만들기(콘솔)](create-project.md#create-project-console) 및 [빌드 실행(콘솔)](run-build-console.md) 섹션을 참조하세요.
   +  **환경**에서 다음과 같이 합니다.
     +  **자동 재시도 제한**에 빌드 실패 후 원하는 최대 자동 재시도 횟수를 입력합니다.

1. **환경**에서 **추가 구성**을 선택합니다.

1. 기본값으로 계속 진행한 다음 **빌드 프로젝트 생성**을 선택합니다.

## 빌드 자동 재시도(AWS CLI)
<a name="auto-retry-build-cli"></a>
+ **create-project** 명령을 실행합니다.

  ```
  aws codebuild create-project \
      --name "<project-name>" \
      --auto-retry-limit <auto-retry-limit> \
      --source "<source>" \
      --artifacts {<artifacts>} \
      --environment "{\"type\": \"environment-type>\",\"image\": \"image-type>\",\"computeType\": \"compute-type>\"}" \
      --service-role "service-role>"
  ```

  이전 명령에서 다음 자리표시자를 바꿉니다.
  + *<auto-retry-limit>*: 자동 재시도 제한을 빌드 실패 후 원하는 최대 자동 재시도 횟수로 설정합니다.
  + *<project-name>*, *<source>*, *<artifacts>*, *environment-type>*, *image-type>*, *<compute-type>* 및 *<service-role>*: 원하는 프로젝트 구성 설정을 설정합니다.

## 빌드 자동 재시도(AWS SDK)
<a name="auto-retry-build-sdks"></a>

AWS CodeBuild와 AWS SDK를 함께 사용하는 방법에 대한 자세한 내용은 [AWS SDKs 및 도구 참조](sdk-ref.md) 단원을 참조하십시오.

# AWS CodeBuild에서 빌드 중지
<a name="stop-build"></a>

AWS CodeBuild 콘솔, AWS CLI 또는 AWS SDK를 사용하여 AWS CodeBuild에서 빌드를 중지할 수 있습니다.

**Topics**
+ [빌드 중지(콘솔)](#stop-build-console)
+ [빌드 중지(AWS CLI)](#stop-build-cli)
+ [빌드 중지(AWS SDK)](#stop-build-sdks)

## 빌드 중지(콘솔)
<a name="stop-build-console"></a>

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

1. 다음 중 하나를 수행합니다.
   + ***build-project-name*:*build-ID*** 페이지가 표시되면 **빌드 중지**를 선택합니다.
   + 탐색 창에서 [**Build history**]를 선택합니다. 빌드 목록에서 해당 빌드의 확인란을 선택한 다음, **빌드 중지**를 선택합니다.
   + 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트 목록의 **이름** 열에서 빌드 프로젝트 이름에 대한 링크를 선택합니다. 빌드 목록에서 해당 빌드의 확인란을 선택한 다음, **빌드 중지**를 선택합니다.

**참고**  
기본적으로 가장 최근에 실행한 100개의 최신 빌드 또는 빌드 프로젝트가 표시됩니다. 더 많은 빌드 또는 빌드 프로젝트를 보려면 기어 아이콘을 선택한 다음 **페이지당 빌드 수** 또는 **페이지당 프로젝트 수**에서 다른 값을 선택하거나 뒤로 및 앞으로 화살표를 선택합니다.  
AWS CodeBuild에서 빌드를 성공적으로 중지할 수 없는 경우(예: 빌드 프로세스가 이미 완료된 경우) **중지** 버튼이 비활성화되거나 표시되지 않을 수 있습니다.

## 빌드 중지(AWS CLI)
<a name="stop-build-cli"></a>
+ **stop-build** 명령을 실행합니다.

  ```
  aws codebuild stop-build --id id
  ```

  이전 명령에서 다음 자리표시자를 바꿉니다.
  + *id*: 필수 문자열입니다. 중지할 빌드의 ID입니다. 빌드 ID 목록을 가져오려면 다음 주제를 참조하십시오.
    + [빌드 ID 목록 보기(AWS CLI)](view-build-list.md#view-build-list-cli)
    + [빌드 프로젝트의 빌드 ID 목록 보기(AWS CLI)](view-builds-for-project.md#view-builds-for-project-cli)

  AWS CodeBuild에서 빌드를 성공적으로 중지한 경우 출력에서 `build` 객체의 `buildStatus` 값은 `STOPPED`입니다.

  CodeBuild가 빌드를 성공적으로 중지할 수 없는 경우(예: 빌드가 이미 완료된 경우) 출력에서 `build` 객체의 `buildStatus` 값이 최종 빌드 상태(예: `SUCCEEDED`)입니다.

## 빌드 중지(AWS SDK)
<a name="stop-build-sdks"></a>

AWS CodeBuild와 AWS SDK를 함께 사용하는 방법에 대한 자세한 내용은 [AWS SDKs 및 도구 참조](sdk-ref.md) 단원을 참조하십시오.

# AWS CodeBuild에서 배치 빌드 중지
<a name="stop-batch-build"></a>

AWS CodeBuild 콘솔, AWS CLI 또는 AWS SDK를 사용하여 AWS CodeBuild에서 배치 빌드를 중지할 수 있습니다.

**참고**  
배치 빌드에서 Lambda 컴퓨팅을 사용하는 경우 진행 중인 Lambda 빌드를 중지할 수 없습니다.

**Topics**
+ [배치 빌드 중지(콘솔)](#stop-batch-build-console)
+ [배치 빌드 중지(AWS CLI)](#stop-batch-build-cli)
+ [배치 빌드 중지(AWS SDK)](#stop-batch-build-sdks)

## 배치 빌드 중지(콘솔)
<a name="stop-batch-build-console"></a>

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

1. 다음 중 하나를 수행합니다.
   + ***build-project-name*:*build-ID*** 페이지가 표시되면 **빌드 중지**를 선택합니다.
   + 탐색 창에서 [**Build history**]를 선택합니다. 빌드 목록에서 해당 빌드의 확인란을 선택한 다음, **빌드 중지**를 선택합니다.
   + 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트 목록의 **이름** 열에서 빌드 프로젝트 이름에 대한 링크를 선택합니다. 빌드 목록에서 해당 빌드의 확인란을 선택한 다음, **빌드 중지**를 선택합니다.

**참고**  
기본적으로 가장 최근에 실행한 100개의 최신 빌드 또는 빌드 프로젝트가 표시됩니다. 더 많은 빌드 또는 빌드 프로젝트를 보려면 기어 아이콘을 선택한 다음 **페이지당 빌드 수** 또는 **페이지당 프로젝트 수**에서 다른 값을 선택하거나 뒤로 및 앞으로 화살표를 선택합니다.

## 배치 빌드 중지(AWS CLI)
<a name="stop-batch-build-cli"></a>
+ [https://docs.aws.amazon.com/cli/latest/reference/codebuild/stop-build-batch.html](https://docs.aws.amazon.com/cli/latest/reference/codebuild/stop-build-batch.html) 명령을 실행합니다.

  ```
  aws codebuild stop-build-batch --id <batch-build-id>
  ```

  이전 명령에서 다음 자리표시자를 바꿉니다.
  + *<batch-build-id>*: 필수 문자열입니다. 중지할 배치 빌드의 식별자입니다. 배치 빌드 식별자 목록을 가져오려면 다음 주제를 참조하세요.
    + [배치 빌드 ID 목록 보기(AWS CLI)](view-build-list.md#view-batch-build-list-cli)
    + [빌드 프로젝트의 배치 빌드 ID 목록 보기(AWS CLI)](view-builds-for-project.md#view-batch-builds-for-project-cli)

## 배치 빌드 중지(AWS SDK)
<a name="stop-batch-build-sdks"></a>

AWS CodeBuild와 AWS SDK를 함께 사용하는 방법에 대한 자세한 내용은 [AWS SDKs 및 도구 참조](sdk-ref.md) 단원을 참조하십시오.

# AWS CodeBuild 빌드를 자동으로 트리거
<a name="build-triggers"></a>

프로젝트에 트리거를 생성하여 1시간, 1일 또는 일주일에 한 번씩 빌드를 예약할 수 있습니다. Amazon CloudWatch cron 표현식이 포함된 사용자 지정 규칙을 사용하여 트리거를 편집할 수도 있습니다. 예를 들어 cron 표현식을 사용하여 매주 평일 특정 시간에 빌드를 예약할 수 있습니다. 트리거 생성 및 편집에 대한 자세한 내용은 [AWS CodeBuild 트리거 생성](#trigger-create) 및 [AWS CodeBuild 트리거 편집](triggers-edit.md) 섹션을 참조하십시오.

**Topics**
+ [AWS CodeBuild 트리거 생성](#trigger-create)
+ [AWS CodeBuild 트리거 편집](triggers-edit.md)

## AWS CodeBuild 트리거 생성
<a name="trigger-create"></a>

프로젝트에 트리거를 생성하여 1시간, 1일 또는 일주일에 한 번씩 빌드를 예약할 수 있습니다. Amazon CloudWatch cron 표현식이 포함된 사용자 지정 규칙을 사용하여 트리거를 생성할 수도 있습니다. 예를 들어 cron 표현식을 사용하여 매주 평일 특정 시간에 빌드를 예약할 수 있습니다.

**참고**  
빌드 트리거, Amazon EventBridge 이벤트 또는 AWS Step Functions 태스크에서 배치 빌드를 시작하는 것은 불가능합니다.

**Topics**
+ [AWS CodeBuild 트리거 생성(콘솔)](#trigger-create-console)
+ [프로그래밍 방식으로 AWS CodeBuild 트리거 생성](#trigger-create-code)

### AWS CodeBuild 트리거 생성(콘솔)
<a name="trigger-create-console"></a>

다음 절차를 통해 AWS Management Console을 사용하여 트리거를 생성합니다.

**트리거를 생성하려면** 

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

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다.

1. 트리거를 추가하려는 빌드 프로젝트의 링크를 선택한 후 **빌드 트리거** 탭을 선택합니다.
**참고**  
기본적으로 가장 최근의 빌드 프로젝트 100개가 표시됩니다. 더 많은 빌드 프로젝트를 보려면 기어 아이콘을 선택하고 **페이지당 프로젝트 수**에서 다른 값을 선택하거나 뒤로 및 앞으로 화살표를 사용합니다.

1. **트리거 생성**을 선택합니다.

1. **트리거 이름**에 이름을 입력합니다.

1. **빈도** 드롭다운 목록에서 트리거의 빈도를 선택합니다. cron 표현식으로 빈도를 만들고 싶다면, **사용자 지정**을 선택하십시오.

1. 트리거의 빈도에 대한 파라미터를 지정합니다. 텍스트 상자에 선택 항목의 처음 몇 자를 입력하면 드롭다운 메뉴 항목을 필터링할 수 있습니다.
**참고**  
 시작 시간과 분은 0 기준입니다. 시작 분은 0에서 59 사이의 숫자입니다. 시작 시간은 0에서 23 사이의 숫자입니다. 예를 들어, 매일 오후 12시 15분에 시작하는 일일 트리거는 시작 시간이 12이고 시작 분이 15입니다. 매일 자정에 시작하는 일일 트리거는 시작 시간이 0이고 시작 분이 0입니다. 매일 오후 11시 59분에 시작하는 일일 트리거는 시작 시간이 23이고 시작 분이 59입니다.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/build-triggers.html)

1.  **Enable this trigger(이 트리거 사용)**를 선택합니다.

1.  (선택 사항) **고급 섹션**을 확장합니다. **소스 버전**에서 소스의 버전을 입력합니다.
   +  Amazon S3의 경우 빌드하려는 입력 아티팩트의 버전에 해당하는 버전 ID를 입력합니다. **소스 버전**을 비워 두면 최신 버전이 사용됩니다.
   +  AWS CodeCommit의 경우, 커밋 ID를 입력하십시오. **소스 버전**을 비워 두면 기본 브랜치의 HEAD 커밋 ID가 사용됩니다.
   + GitHub 또는 GitHub Enterprise의 경우, 빌드하려는 소스 코드의 버전에 해당하는 커밋 ID, 풀 요청 ID, 분기 이름 또는 태그 이름을 입력합니다. 풀 요청 ID를 지정하는 경우 `pr/pull-request-ID` 형식을 사용해야 합니다(예: `pr/25`). 분기 이름을 지정할 경우 분기의 HEAD 커밋 ID가 사용됩니다. [**Source version**]이 비어 있으면 기본 분기의 HEAD 커밋 ID가 사용됩니다.
   + Bitbucket의 경우, 빌드하려는 소스 코드의 버전에 해당하는 커밋 ID, 분기 이름 또는 태그 이름을 입력하십시오. 분기 이름을 지정할 경우 분기의 HEAD 커밋 ID가 사용됩니다. [**Source version**]이 비어 있으면 기본 분기의 HEAD 커밋 ID가 사용됩니다.

1. (선택 사항) 제한 시간을 5분에서 2160분(36시간) 사이로 지정합니다. 이 값은 AWS CodeBuild가 중지되기 전에 빌드를 시도하는 시간을 지정합니다. **시간**과 **분**을 비워 두면 프로젝트에 지정된 기본 제한 시간 값이 사용됩니다.

1. **트리거 생성**을 선택합니다.

### 프로그래밍 방식으로 AWS CodeBuild 트리거 생성
<a name="trigger-create-code"></a>

CodeBuild는 빌드 트리거에 대해 Amazon EventBridge 규칙을 사용합니다. EventBridge API를 사용하여 CodeBuild 프로젝트에 대한 빌드 트리거를 프로그래밍 방식으로 생성할 수 있습니다. 자세한 내용은 [Amazon EventBridge API 참조](https://docs.aws.amazon.com/eventbridge/latest/APIReference/)를 참조하세요.

# AWS CodeBuild 트리거 편집
<a name="triggers-edit"></a>

프로젝트에서 트리거를 편집하여 시간, 일 또는 주에 한 번씩 빌드를 예약할 수 있습니다. Amazon CloudWatch cron 표현식이 포함된 사용자 지정 규칙을 사용하여 트리거를 편집할 수도 있습니다. 예를 들어 cron 표현식을 사용하여 매주 평일 특정 시간에 빌드를 예약할 수 있습니다. 트리거 생성에 대한 자세한 내용은 [AWS CodeBuild 트리거 생성](build-triggers.md#trigger-create) 섹션을 참조하세요.

**Topics**
+ [AWS CodeBuild 트리거 편집 (콘솔)](#triggers-edit-console)
+ [프로그래밍 방식으로 AWS CodeBuild 트리거 편집](#trigger-edit-code)

## AWS CodeBuild 트리거 편집 (콘솔)
<a name="triggers-edit-console"></a>

다음 절차를 통해 AWS Management Console을 사용하여 트리거를 편집합니다.

**트리거를 편집하려면**

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

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다.

1. 변경하려는 빌드 프로젝트의 링크를 선택한 다음, **빌드 트리거** 탭을 선택합니다.
**참고**  
기본적으로 가장 최근의 빌드 프로젝트 100개가 표시됩니다. 더 많은 빌드 프로젝트를 보려면 기어 아이콘을 선택하고 **페이지당 프로젝트 수**에서 다른 값을 선택하거나 뒤로 및 앞으로 화살표를 사용합니다.

1. 변경할 트리거 옆에 있는 라디오 버튼을 선택한 다음, **편집**을 선택합니다.

1. **빈도** 드롭다운 목록에서 트리거의 빈도를 선택합니다. cron 표현식으로 빈도를 만들고 싶다면, **사용자 지정**을 선택하십시오.

1. 트리거의 빈도에 대한 파라미터를 지정합니다. 텍스트 상자에 선택 항목의 처음 몇 자를 입력하면 드롭다운 메뉴 항목을 필터링할 수 있습니다.
**참고**  
 시작 시간과 분은 0 기준입니다. 시작 분은 0에서 59 사이의 숫자입니다. 시작 시간은 0에서 23 사이의 숫자입니다. 예를 들어, 매일 오후 12시 15분에 시작하는 일일 트리거는 시작 시간이 12이고 시작 분이 15입니다. 매일 자정에 시작하는 일일 트리거는 시작 시간이 0이고 시작 분이 0입니다. 매일 오후 11시 59분에 시작하는 일일 트리거는 시작 시간이 23이고 시작 분이 59입니다.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/triggers-edit.html)

1.  **Enable this trigger(이 트리거 사용)**를 선택합니다.

**참고**  
[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 Amazon CloudWatch 콘솔을 사용하여 소스 버전, 제한 시간 및 AWS CodeBuild에서 사용할 수 없는 기타 옵션을 편집할 수 있습니다.

## 프로그래밍 방식으로 AWS CodeBuild 트리거 편집
<a name="trigger-edit-code"></a>

CodeBuild는 빌드 트리거에 대해 Amazon EventBridge 규칙을 사용합니다. EventBridge API를 사용하여 CodeBuild 프로젝트에 대한 빌드 트리거를 프로그래밍 방식으로 편집할 수 있습니다. 자세한 내용은 [Amazon EventBridge API 참조](https://docs.aws.amazon.com/eventbridge/latest/APIReference/)를 참조하세요.

# 에서 빌드 세부 정보 보기 AWS CodeBuild
<a name="view-build-details"></a>

 AWS CodeBuild 콘솔 AWS CLI, 또는 AWS SDKs를 사용하여 CodeBuild에서 관리하는 빌드에 대한 세부 정보를 볼 수 있습니다.

**Topics**
+ [빌드 세부 정보 보기(콘솔)](#view-build-details-console)
+ [빌드 세부 정보 보기(AWS CLI)](#view-build-details-cli)
+ [빌드 세부 정보(AWS SDKs) 보기](#view-build-details-sdks)
+ [빌드 단계 진행](view-build-details-phases.md)

## 빌드 세부 정보 보기(콘솔)
<a name="view-build-details-console"></a>

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

1. 다음 중 하나를 수행하세요.
   + 탐색 창에서 [**Build history**]를 선택합니다. 빌드 목록의 **빌드 실행** 열에서 빌드에 대한 링크를 선택합니다.
   + 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트 목록의 **이름** 열에서 빌드 프로젝트 이름에 해당하는 링크를 선택합니다. 그런 다음 빌드 목록의 **빌드 실행** 열에서 빌드에 대한 링크를 선택합니다.
**참고**  
기본적으로 가장 최근에 실행한 10개의 최신 빌드 또는 빌드 프로젝트가 표시됩니다. 더 많은 빌드 또는 빌드 프로젝트를 보려면 기어 아이콘을 선택한 다음 **페이지당 빌드 수** 또는 **페이지당 프로젝트 수**에서 다른 값을 선택하거나 뒤로 및 앞으로 화살표를 선택합니다.

## 빌드 세부 정보 보기(AWS CLI)
<a name="view-build-details-cli"></a>

와 AWS CLI 함께를 사용하는 방법에 대한 자세한 내용은 단원을 AWS CodeBuild참조하십시오[명령줄 참조](cmd-ref.md).

**batch-get-builds** 명령을 실행합니다.

```
aws codebuild batch-get-builds --ids ids
```

다음과 같이 자리 표시자를 바꿉니다.
+ *ids*: 필수 문자열입니다. 세부 정보를 보려는 하나 이상의 빌드 ID입니다. 둘 이상의 빌드 ID를 지정하려면 각 빌드 ID를 공백을 사용하여 구분해야 합니다. 최대 100개의 빌드 ID를 지정할 수 있습니다. 빌드 ID 목록을 가져오려면 다음 주제를 참조하십시오.
  + [빌드 ID 목록 보기(AWS CLI)](view-build-list.md#view-build-list-cli)
  + [빌드 프로젝트의 빌드 ID 목록 보기(AWS CLI)](view-builds-for-project.md#view-builds-for-project-cli)

예를 들면 다음 명령을 실행하는 경우

```
aws codebuild batch-get-builds --ids codebuild-demo-project:e9c4f4df-3f43-41d2-ab3a-60fe2EXAMPLE codebuild-demo-project:815e755f-bade-4a7e-80f0-efe51EXAMPLE my-other-project:813bb6c6-891b-426a-9dd7-6d8a3EXAMPLE
```

명령이 제대로 실행되면 [요약된 빌드 정보를 보려면](getting-started-overview.md#getting-started-cli-monitor-build-cli) 단원에 설명된 것과 유사한 데이터가 출력에 표시됩니다.

## 빌드 세부 정보(AWS SDKs) 보기
<a name="view-build-details-sdks"></a>

를 SDK와 AWS CodeBuild 함께 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요[AWS SDKs 및 도구 참조](sdk-ref.md). AWS SDKs

# 빌드 단계 진행
<a name="view-build-details-phases"></a>

의 빌드는 단계적으로 AWS CodeBuild 진행됩니다.



![\[CodeBuild 단계.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/build-phases.png)




**중요**  
`BUILD` 단계가 실패하더라도 `UPLOAD_ARTIFACTS` 단계는 항상 시도됩니다.

# 에서 빌드 IDs 목록 보기 AWS CodeBuild
<a name="view-build-list"></a>

 AWS CodeBuild 콘솔 AWS CLI, 또는 AWS SDKs 사용하여 CodeBuild에서 관리하는 빌드의 빌드 IDs 목록을 볼 수 있습니다.

**Topics**
+ [빌드 ID 목록 보기(콘솔)](#view-build-list-console)
+ [빌드 ID 목록 보기(AWS CLI)](#view-build-list-cli)
+ [배치 빌드 ID 목록 보기(AWS CLI)](#view-batch-build-list-cli)
+ [빌드 IDs(AWS SDKs) 목록 보기](#view-build-list-sdks)

## 빌드 ID 목록 보기(콘솔)
<a name="view-build-list-console"></a>

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

1. 탐색 창에서 [**Build history**]를 선택합니다.
**참고**  
기본적으로 가장 최근의 빌드 10개만 표시됩니다. 더 많은 빌드를 보려면 기어 아이콘을 선택하고 **페이지당 빌드 수**에서 다른 값을 선택하거나 뒤로 및 앞으로 화살표를 사용합니다.

## 빌드 ID 목록 보기(AWS CLI)
<a name="view-build-list-cli"></a>

CodeBuild AWS CLI 에서를 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요[명령줄 참조](cmd-ref.md).
+ **list-builds** 명령을 실행합니다.

  ```
  aws codebuild list-builds --sort-order sort-order --next-token next-token
  ```

  이전 명령에서 다음 자리표시자를 바꿉니다.
  + *sort-order*: 빌드 ID를 나열하는 방법을 나타내는 데 사용되는 선택적 문자열입니다. 유효한 값에는 `ASCENDING` 및 `DESCENDING`(이)가 있습니다.
  + *next-token*: 선택적 문자열입니다. 이전 실행 중에 목록에 100개가 넘는 항목이 있는 경우 *next token*이라는 고유한 문자열과 함께 처음 100개 항목만 반환됩니다. 목록에서 다음 항목 배치를 가져오려면 호출에 다음 토큰을 추가하여 이 명령을 다시 실행합니다. 목록에 있는 모든 항목을 가져오려면 다음 토큰이 더 이상 반환되지 않을 때까지 다음 토큰마다 이 명령을 계속 실행합니다.

  예를 들면 다음 명령을 실행하는 경우

  ```
  aws codebuild list-builds --sort-order ASCENDING
  ```

  다음과 비슷한 결과가 출력에 나타납니다.

  ```
  {
    "nextToken": "4AEA6u7J...The full token has been omitted for brevity...MzY2OA==",
    "ids": [
      "codebuild-demo-project:815e755f-bade-4a7e-80f0-efe51EXAMPLE"
      "codebuild-demo-project:84a7f3d1-d40e-4956-b4cf-7a9d4EXAMPLE"
      ... The full list of build IDs has been omitted for brevity ...
      "codebuild-demo-project:931d0b72-bf6f-4040-a472-5c707EXAMPLE"
    ]
  }
  ```

  이 명령을 다시 실행하는 경우:

  ```
  aws codebuild list-builds --sort-order ASCENDING --next-token 4AEA6u7J...The full token has been omitted for brevity...MzY2OA==
  ```

  다음과 비슷한 결과가 출력에 나타납니다.

  ```
  {
    "ids": [
      "codebuild-demo-project:49015049-21cf-4b50-9708-df115EXAMPLE",
      "codebuild-demo-project:543e7206-68a3-46d6-a4da-759abEXAMPLE",
      ... The full list of build IDs has been omitted for brevity ...
      "codebuild-demo-project:c282f198-4582-4b38-bdc0-26f96EXAMPLE"
    ]
  }
  ```

## 배치 빌드 ID 목록 보기(AWS CLI)
<a name="view-batch-build-list-cli"></a>

CodeBuild AWS CLI 에서를 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요[명령줄 참조](cmd-ref.md).
+ **list-build-batches** 명령을 실행합니다.

  ```
  aws codebuild list-build-batches --sort-order sort-order --next-token next-token
  ```

  이전 명령에서 다음 자리표시자를 바꿉니다.
  + *sort-order*: 배치 빌드 ID를 나열하는 방법을 나타내는 데 사용되는 선택적 문자열입니다. 유효한 값에는 `ASCENDING` 및 `DESCENDING`(이)가 있습니다.
  + *next-token*: 선택적 문자열입니다. 이전 실행 중에 목록에 100개가 넘는 항목이 있는 경우 *next token*이라는 고유한 문자열과 함께 처음 100개 항목만 반환됩니다. 목록에서 다음 항목 배치를 가져오려면 호출에 다음 토큰을 추가하여 이 명령을 다시 실행합니다. 목록에 있는 모든 항목을 가져오려면 다음 토큰이 더 이상 반환되지 않을 때까지 다음 토큰마다 이 명령을 계속 실행합니다.

  예를 들면 다음 명령을 실행하는 경우

  ```
  aws codebuild list-build-batches --sort-order ASCENDING
  ```

  다음과 비슷한 결과가 출력에 나타납니다.

  ```
  {
    "nextToken": "4AEA6u7J...The full token has been omitted for brevity...MzY2OA==",
    "ids": [
      "codebuild-demo-project:815e755f-bade-4a7e-80f0-efe51EXAMPLE"
      "codebuild-demo-project:84a7f3d1-d40e-4956-b4cf-7a9d4EXAMPLE"
      ... The full list of build IDs has been omitted for brevity ...
      "codebuild-demo-project:931d0b72-bf6f-4040-a472-5c707EXAMPLE"
    ]
  }
  ```

  이 명령을 다시 실행하는 경우:

  ```
  aws codebuild list-build-batches --sort-order ASCENDING --next-token 4AEA6u7J...The full token has been omitted for brevity...MzY2OA==
  ```

  다음과 비슷한 결과가 출력에 나타납니다.

  ```
  {
    "ids": [
      "codebuild-demo-project:49015049-21cf-4b50-9708-df115EXAMPLE",
      "codebuild-demo-project:543e7206-68a3-46d6-a4da-759abEXAMPLE",
      ... The full list of build IDs has been omitted for brevity ...
      "codebuild-demo-project:c282f198-4582-4b38-bdc0-26f96EXAMPLE"
    ]
  }
  ```

## 빌드 IDs(AWS SDKs) 목록 보기
<a name="view-build-list-sdks"></a>

CodeBuild를 AWS SDKs와 함께 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요[AWS SDKs 및 도구 참조](sdk-ref.md).

# 에서 빌드 프로젝트의 빌드 IDs 목록 보기 AWS CodeBuild
<a name="view-builds-for-project"></a>

 AWS CodeBuild 콘솔 AWS CLI, 또는 AWS SDKs 사용하여 CodeBuild에서 빌드 프로젝트의 빌드 IDs 목록을 볼 수 있습니다.

**Topics**
+ [빌드 프로젝트의 빌드 ID 목록 보기(콘솔)](#view-builds-for-project-console)
+ [빌드 프로젝트의 빌드 ID 목록 보기(AWS CLI)](#view-builds-for-project-cli)
+ [빌드 프로젝트의 배치 빌드 ID 목록 보기(AWS CLI)](#view-batch-builds-for-project-cli)
+ [빌드 프로젝트(AWS SDKs)의 빌드 IDs 목록 보기](#view-builds-for-project-sdks)

## 빌드 프로젝트의 빌드 ID 목록 보기(콘솔)
<a name="view-builds-for-project-console"></a>

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

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트 목록의 **이름** 열에서 빌드 프로젝트를 선택합니다.

**참고**  
기본적으로 가장 최근에 실행한 100개의 최신 빌드 또는 빌드 프로젝트가 표시됩니다. 더 많은 빌드 또는 빌드 프로젝트를 보려면 기어 아이콘을 선택한 다음 **페이지당 빌드 수** 또는 **페이지당 프로젝트 수**에서 다른 값을 선택하거나 뒤로 및 앞으로 화살표를 선택합니다.

## 빌드 프로젝트의 빌드 ID 목록 보기(AWS CLI)
<a name="view-builds-for-project-cli"></a>

와 AWS CLI 함께를 사용하는 방법에 대한 자세한 내용은 단원을 AWS CodeBuild참조하십시오[명령줄 참조](cmd-ref.md).

다음과 같이 **list-builds-for-project** 명령을 실행합니다.

```
aws codebuild list-builds-for-project --project-name project-name --sort-order sort-order --next-token next-token
```

이전 명령에서 다음 자리표시자를 바꿉니다.
+ *project-name*: 빌드 ID를 나열할 빌드 프로젝트의 이름을 나타내는 데 사용되는 필수 문자열입니다. 빌드 프로젝트 목록을 가져오려면 [빌드 프로젝트 이름 목록 보기(AWS CLI)](view-project-list.md#view-project-list-cli) 단원을 참조하십시오.
+ *sort-order*: 빌드 ID를 나열하는 방법을 나타내는 데 사용되는 선택적 문자열입니다. 유효한 값에는 `ASCENDING` 및 `DESCENDING`(이)가 있습니다.
+ *next-token*: 선택적 문자열입니다. 이전 실행 중에 목록에 100개가 넘는 항목이 있는 경우 *next token*이라는 고유한 문자열과 함께 처음 100개 항목만 반환됩니다. 목록에서 다음 항목 배치를 가져오려면 호출에 다음 토큰을 추가하여 이 명령을 다시 실행합니다. 목록에 있는 모든 항목을 가져오려면 다음 토큰이 더 이상 반환되지 않을 때까지 반환되는 다음 토큰마다 이 명령을 계속 실행합니다.

예를 들면 다음과 비슷한 명령을 실행하는 경우

```
aws codebuild list-builds-for-project --project-name codebuild-demo-project --sort-order ASCENDING
```

다음과 같은 결과가 출력에 나타날 수 있습니다.

```
{
  "nextToken": "4AEA6u7J...The full token has been omitted for brevity...MzY2OA==",
  "ids": [
    "codebuild-demo-project:9b175d16-66fd-4e71-93a0-50a08EXAMPLE"
    "codebuild-demo-project:a9d1bd09-18a2-456b-8a36-7d65aEXAMPLE"
    ... The full list of build IDs has been omitted for brevity ...
    "codebuild-demo-project:fe70d102-c04f-421a-9cfa-2dc15EXAMPLE"
  ]
}
```

이 명령을 다시 실행하는 경우:

```
aws codebuild list-builds-for-project --project-name codebuild-demo-project --sort-order ASCENDING --next-token 4AEA6u7J...The full token has been omitted for brevity...MzY2OA==
```

출력에서 다음과 같은 결과를 볼 수 있습니다.

```
{
  "ids": [
    "codebuild-demo-project:98253670-7a8a-4546-b908-dc890EXAMPLE"
    "codebuild-demo-project:ad5405b2-1ab3-44df-ae2d-fba84EXAMPLE"
    ... The full list of build IDs has been omitted for brevity ...
    "codebuild-demo-project:f721a282-380f-4b08-850a-e0ac1EXAMPLE"
  ]
}
```

## 빌드 프로젝트의 배치 빌드 ID 목록 보기(AWS CLI)
<a name="view-batch-builds-for-project-cli"></a>

와 AWS CLI 함께를 사용하는 방법에 대한 자세한 내용은 단원을 AWS CodeBuild참조하십시오[명령줄 참조](cmd-ref.md).

다음과 같이 **list-build-batches-for-project** 명령을 실행합니다.

```
aws codebuild list-build-batches-for-project --project-name project-name --sort-order sort-order --next-token next-token
```

이전 명령에서 다음 자리표시자를 바꿉니다.
+ *project-name*: 빌드 ID를 나열할 빌드 프로젝트의 이름을 나타내는 데 사용되는 필수 문자열입니다. 빌드 프로젝트 목록을 가져오려면 [빌드 프로젝트 이름 목록 보기(AWS CLI)](view-project-list.md#view-project-list-cli) 단원을 참조하십시오.
+ *sort-order*: 빌드 ID를 나열하는 방법을 나타내는 데 사용되는 선택적 문자열입니다. 유효한 값에는 `ASCENDING` 및 `DESCENDING`(이)가 있습니다.
+ *next-token*: 선택적 문자열입니다. 이전 실행 중에 목록에 100개가 넘는 항목이 있는 경우 *next token*이라는 고유한 문자열과 함께 처음 100개 항목만 반환됩니다. 목록에서 다음 항목 배치를 가져오려면 호출에 다음 토큰을 추가하여 이 명령을 다시 실행합니다. 목록에 있는 모든 항목을 가져오려면 다음 토큰이 더 이상 반환되지 않을 때까지 반환되는 다음 토큰마다 이 명령을 계속 실행합니다.

예를 들면 다음과 비슷한 명령을 실행하는 경우

```
aws codebuild list-build-batches-for-project --project-name codebuild-demo-project --sort-order ASCENDING
```

다음과 같은 결과가 출력에 나타날 수 있습니다.

```
{
  "nextToken": "4AEA6u7J...The full token has been omitted for brevity...MzY2OA==",
  "ids": [
    "codebuild-demo-project:9b175d16-66fd-4e71-93a0-50a08EXAMPLE"
    "codebuild-demo-project:a9d1bd09-18a2-456b-8a36-7d65aEXAMPLE"
    ... The full list of build IDs has been omitted for brevity ...
    "codebuild-demo-project:fe70d102-c04f-421a-9cfa-2dc15EXAMPLE"
  ]
}
```

이 명령을 다시 실행하는 경우:

```
aws codebuild list-build-batches-for-project --project-name codebuild-demo-project --sort-order ASCENDING --next-token 4AEA6u7J...The full token has been omitted for brevity...MzY2OA==
```

출력에서 다음과 같은 결과를 볼 수 있습니다.

```
{
  "ids": [
    "codebuild-demo-project:98253670-7a8a-4546-b908-dc890EXAMPLE"
    "codebuild-demo-project:ad5405b2-1ab3-44df-ae2d-fba84EXAMPLE"
    ... The full list of build IDs has been omitted for brevity ...
    "codebuild-demo-project:f721a282-380f-4b08-850a-e0ac1EXAMPLE"
  ]
}
```

## 빌드 프로젝트(AWS SDKs)의 빌드 IDs 목록 보기
<a name="view-builds-for-project-sdks"></a>

를 SDK와 AWS CodeBuild 함께 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요[AWS SDKs 및 도구 참조](sdk-ref.md). AWS SDKs