

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

# 용 Amazon Elastic File System 샘플 AWS CodeBuild
<a name="sample-efs"></a>

 Amazon EC2 인스턴스에 대한 확장 가능한 공유 파일 서비스인 Amazon Elastic File System에서 AWS CodeBuild 빌드를 생성할 수 있습니다. Amazon EC2 Amazon EFS를 통한 스토리지 용량은 탄력적이므로 파일이 추가 및 제거될 때 확장되거나 축소됩니다. 또한 파일 시스템을 만들고 구성할 수 있는 간편한 웹 서비스 인터페이스를 제공합니다. 이 서비스는 모든 파일 스토리지 인프라를 관리하므로, 파일 시스템 구성을 배포하거나 패치를 적용하거나 유지 보수하는 데 신경을 쓸 필요가 없습니다. 자세한 내용은 Amazon Elastic File System 사용 설명서에서 [Amazon Elastic File System이란?](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)을 참조하세요.**

 이 예제는 Amazon EFS 파일 시스템에 Java 애플리케이션을 마운트 및 빌드하도록 CodeBuild 프로젝트를 구성하는 방법을 보여 줍니다. 시작하기 전에 S3 입력 버킷 또는 AWS CodeCommit GitHub, GitHub Enterprise Server 또는 Bitbucket 리포지토리에 업로드되는 Java 애플리케이션을 빌드할 준비가 되어 있어야 합니다.

파일 시스템에 전송되는 데이터는 암호화됩니다. 다른 이미지를 사용하여 전송 중인 데이터를 암호화하려면 [전송 중 데이터 암호화](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html)를 참조하십시오.

**Topics**
+ [Amazon Elastic File System과 AWS CodeBuild 함께 사용](#sample-efs-high-level-steps)
+ [Amazon EFS 통합 문제 해결](sample-efs-troubleshooting.md)

## Amazon Elastic File System과 AWS CodeBuild 함께 사용
<a name="sample-efs-high-level-steps"></a>

이 샘플에서는 Amazon EFS를와 함께 사용하는 데 필요한 4가지 상위 수준 단계를 다룹니다 AWS CodeBuild. 스크립트는 다음과 같습니다.

1.  AWS 계정에서 Virtual Private Cloud(VPC)를 생성합니다.

1. 이 VPC를 사용하는 파일 시스템을 생성합니다.

1. VPC를 사용하는 CodeBuild 프로젝트를 생성하고 빌드합니다. CodeBuild 프로젝트는 다음을 사용하여 파일 시스템을 식별합니다.
   +  고유한 파일 시스템 식별자. 식별자는 빌드 프로젝트에서 파일 시스템을 지정할 때 선택합니다.
   + 파일 시스템 ID. Amazon EFS 콘솔에서 파일 시스템을 볼 때 ID가 표시됩니다.
   +  탑재 지점. 파일 시스템을 탑재하는 Docker 컨테이너에 있는 디렉터리입니다.
   + 탑재 옵션. 여기에는 파일 시스템을 탑재하는 방법에 대한 세부 정보가 포함됩니다.

1. 빌드 프로젝트를 검토하여 올바른 프로젝트 파일과 변수가 생성되었는지 확인합니다.

**참고**  
 Amazon EFS에서 생성한 파일 시스템은 Linux 플랫폼에서만 지원됩니다.

 

**Topics**
+ [1단계:를 사용하여 VPC 생성 CloudFormation](#sample-efs-create-vpc)
+ [2단계: VPC에서 Amazon Elastic File System 파일 시스템 생성](#sample-efs-create-efs)
+ [3단계: Amazon EFS에서 사용할 CodeBuild 프로젝트 생성](#sample-efs-create-acb)
+ [4단계: 빌드 프로젝트 검토](#sample-efs-summary)

### 1단계:를 사용하여 VPC 생성 CloudFormation
<a name="sample-efs-create-vpc"></a>

 CloudFormation 템플릿을 사용하여 VPC를 생성합니다.

1.  의 지침에 따라 [CloudFormation VPC 템플릿](cloudformation-vpc-template.md)를 CloudFormation 사용하여 VPC를 생성합니다.
**참고**  
 이 CloudFormation 템플릿으로 생성된 VPC에는 프라이빗 서브넷 2개와 퍼블릭 서브넷 2개가 있습니다. AWS CodeBuild 을 사용하여 Amazon EFS에서 생성한 파일 시스템을 탑재할 때는 프라이빗 서브넷만 사용해야 합니다. 퍼블릭 서브넷 중 하나를 사용할 경우 빌드가 실패합니다.

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

1.  생성한 VPC를 선택합니다 CloudFormation.

1. **설명** 탭에 표시된 VPC의 이름과 ID를 기록해 둡니다. VPC 이름과 ID 모두 이 예제 뒷부분에서 AWS CodeBuild 프로젝트를 만들 때 필요합니다.

### 2단계: VPC에서 Amazon Elastic File System 파일 시스템 생성
<a name="sample-efs-create-efs"></a>

 이 예제를 위해 앞에서 만든 VPC를 사용하여 간단한 Amazon EFS 파일 시스템을 생성합니다.

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

1.  **파일 시스템 생성**을 선택합니다.

1.  이 예제 앞부분에서 기록해 둔 VPC 이름을 **VPC**에서 선택합니다.

1.  가용 영역은 선택한 서브넷과 연결된 채로 둡니다.

1.  **다음 단계**를 선택합니다.

1.  **태그 추가**에서 기본 **이름** 키의 **값**에 Amazon EFS 파일 시스템의 이름을 입력합니다.

1.  기본 성능 및 처리량 모드로 선택한 **Bursting(버스팅)** 및 **범용** 모드를 그대로 두고 **다음 단계**를 선택합니다.

1. **클라이언트 액세스 구성**에서 **다음 단계**를 선택합니다.

1.  **파일 시스템 생성**을 선택합니다.

1.  (선택 사항) 전송 중 데이터를 암호화하는 정책을 Amazon EFS 파일 시스템에 추가하는 것이 좋습니다. Amazon EFS 콘솔에서 **파일 시스템 정책**을 선택하고 **편집**을 선택한 다음, **모든 클라이언트에 전송 중 암호화 적용**이라는 레이블이 붙은 상자를 선택하고 **저장**을 선택합니다.

### 3단계: Amazon EFS에서 사용할 CodeBuild 프로젝트 생성
<a name="sample-efs-create-acb"></a>

 이 샘플의 앞부분에서 생성한 VPC를 사용하는 AWS CodeBuild 프로젝트를 생성합니다. 빌드가 실행되면 이전에 생성된 Amazon EFS 파일 시스템을 탑재합니다. 그런 다음 Java 애플리케이션에서 생성된 .jar 파일을 파일 시스템의 탑재 지점 디렉터리에 저장합니다.

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

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

1.  **프로젝트 이름**에 프로젝트의 이름을 입력합니다.

1.  **소스 공급자**에서 빌드하려는 Java 애플리케이션을 포함하는 리포지토리를 선택합니다.

1.  CodeBuild가 애플리케이션을 찾기 위해 사용하는 리포지토리 URL 등과 같은 정보를 입력합니다. 옵션은 소스 공급자마다 다릅니다. 자세한 내용은 [Choose source provider](create-project.md#create-project-source-provider) 단원을 참조하십시오.

1.  **환경 이미지**에서 **관리형 이미지**를 선택합니다.

1.  **운영 체제**에서 **Amazon Linux 2**를 선택합니다.

1. **런타임**에서 **표준**을 선택합니다.

1.  **이미지**에서 **aws/codebuild/amazonlinux-x86\$164-standard:4.0**을 선택합니다.

1.  **환경 유형**에서 **Linux**를 선택합니다.

1.  **서비스 역할**에서 **새 서비스 역할**을 선택합니다. **역할 이름**에 CodeBuild가 생성할 역할 이름을 입력합니다.

1. **추가 구성**을 확장합니다.

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

1.  **VPC**에서 VPC ID를 선택합니다.

1.  **서브넷**에서 VPC에 연결된 프라이빗 서브넷을 한 개 이상 선택합니다. Amazon EFS 파일 시스템을 마운트하는 빌드에 프라이빗 서브넷을 사용해야 합니다. 퍼블릭 서브넷을 사용할 경우 빌드가 실패합니다.

1.  **보안 그룹**에서 기본 보안 그룹을 선택합니다.

1.  **파일 시스템**에 다음 정보를 입력합니다.
   + **식별자**에 고유한 파일 시스템 식별자를 입력합니다. 길이는 129자 미만이어야 하고 영숫자 문자와 밑줄만 사용할 수 있습니다. CodeBuild는 이 식별자를 사용하여 탄력적 파일 시스템을 식별하는 환경 변수를 생성합니다. 환경 변수 형식은 `CODEBUILD_<file_system_identifier>`(대문자)입니다. 예를 들어 `my_efs`을 입력하면 환경 변수는 `CODEBUILD_MY_EFS`입니다.
   + **ID**에서 파일 시스템 ID를 선택합니다.
   + (선택 사항) 파일 시스템에 디렉터리를 입력합니다. CodeBuild는 이 디렉터리를 탑재합니다. **디렉터리 경로**를 비워 두면 CodeBuild에서 전체 파일 시스템을 탑재합니다. 경로는 파일 시스템의 루트와 관련이 있습니다.
   + **탑재 지점**에 파일 시스템을 탑재하는 빌드 컨테이너의 디렉터리 절대 경로를 입력합니다. 이 디렉터리가 없으면 CodeBuild에서 빌드 중에 생성됩니다.
   + (선택 사항) 탑재 옵션을 입력합니다. **탑재 옵션**을 비워 두면 CodeBuild에서는 기본 탑재 옵션을 사용합니다.

     ```
     nfsvers=4.1
     rsize=1048576
     wsize=1048576
     hard
     timeo=600
     retrans=2
     ```

     자세한 내용은 Amazon Elastic File System 사용 설명서의 [권장되는 NFS 탑재 옵션](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-nfs-mount-settings.html)을 참조하세요.**

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

1.  편집기에 다음 buildspec 명령을 입력합니다. 17단계에서 입력한 식별자로 `<file_system_identifier>`를 바꿉니다. 대문자(예: `CODEBUILD_MY_EFS`)를 사용합니다.

   ```
   version: 0.2
   phases:
     install:
       runtime-versions:
         java: corretto11    
     build:
       commands:
         - mvn compile -Dgpg.skip=true -Dmaven.repo.local=$CODEBUILD_<file_system_identifier>
   ```

1.  기타 모든 설정에 대해 기본값을 사용하고 **빌드 프로젝트 생성**을 선택합니다. 빌드가 완료되면 프로젝트의 콘솔 페이지가 표시됩니다.

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

### 4단계: 빌드 프로젝트 검토
<a name="sample-efs-summary"></a>



 AWS CodeBuild 프로젝트를 빌드한 후: 
+  Amazon EFS 파일 시스템에 빌드된 Java 애플리케이션에서 생성된 .jar 파일을 탑재 지점 디렉터리에 저장합니다.
+  파일 시스템을 식별하는 환경 변수는 프로젝트를 만들 때 입력한 파일 시스템 식별자를 사용하여 생성됩니다.

 자세한 내용은 Amazon Elastic File System 사용 설명서에서 [파일 시스템 탑재](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html)를 참조하세요.**

# Amazon EFS 통합 문제 해결
<a name="sample-efs-troubleshooting"></a>

CodeBuild로 Amazon EFS를 설정할 때 발생할 수 있는 오류는 다음과 같습니다.

**Topics**
+ [CLIENT\$1ERROR: '127.0.0.1:/' 탑재에 실패했습니다. 권한이 거부되었습니다.](#sample-efs-troubleshooting.permission-denied)
+ [CLIENT\$1ERROR: '127.0.0.1:/' 탑재에 실패했습니다. 피어에서 연결을 재설정했습니다.](#sample-efs-troubleshooting.connection-reset)
+ [VPC\$1CLIENT\$1ERROR: 예상치 못한 EC2 오류: UnauthorizedOperation](#sample-efs-troubleshooting.unauthorized-operation)

## CLIENT\$1ERROR: '127.0.0.1:/' 탑재에 실패했습니다. 권한이 거부되었습니다.
<a name="sample-efs-troubleshooting.permission-denied"></a>

CodeBuild로 Amazon EFS를 탑재하는 데는 IAM 인증이 지원되지 않습니다. 사용자 지정 Amazon EFS 파일 시스템 정책을 사용하는 경우 모든 IAM 보안 주체에 읽기 및 쓰기 액세스 권한을 부여해야 합니다. 예제:

```
"Principal": {
  "AWS": "*"
}
```

## CLIENT\$1ERROR: '127.0.0.1:/' 탑재에 실패했습니다. 피어에서 연결을 재설정했습니다.
<a name="sample-efs-troubleshooting.connection-reset"></a>

이 오류의 가능한 두 가지 원인은 다음과 같습니다.
+ CodeBuild VPC 서브넷은 Amazon EFS 탑재 대상과 다른 가용 영역에 있습니다. Amazon EFS 탑재 대상과 동일한 가용 영역에 VPC 서브넷을 추가하여 이 문제를 해결할 수 있습니다.
+ 보안 그룹에는 Amazon EFS와 통신할 권한이 없습니다. VPC(VPC의 기본 CIDR 블록 추가) 또는 보안 그룹 자체에서 들어오는 모든 트래픽을 허용하는 인바운드 규칙을 추가하여 이 문제를 해결할 수 있습니다.

## VPC\$1CLIENT\$1ERROR: 예상치 못한 EC2 오류: UnauthorizedOperation
<a name="sample-efs-troubleshooting.unauthorized-operation"></a>

이 오류는 CodeBuild 프로젝트의 VPC 구성에 있는 모든 서브넷이 퍼블릭 서브넷일 때 발생합니다. 네트워크 연결을 보장하려면 VPC에 프라이빗 서브넷이 하나 이상 있어야 합니다.