CodeBuild 위한 아마존 ECR 샘플 - AWS CodeBuild

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

CodeBuild 위한 아마존 ECR 샘플

이 샘플에서는 Amazon Elastic Container Registry (Amazon ECR) 이미지 리포지토리에 있는 도커 이미지를 사용하여 샘플 Go 프로젝트를 빌드합니다.

중요

이 샘플을 실행하면 AWS 계정에 요금이 발생할 수 있습니다. 여기에는 요금이 포함됩니다.AWS CodeBuild및AWSAmazon S3와 관련된 리소스 및 조치,AWS KMS, CloudWatch Logs 및 아마존 ECR 자세한 내용은 단원을 참조하십시오.CodeBuild 요금,Amazon S3 요금,AWS Key Management Service요금,Amazon CloudWatch 요금, 및Amazon Elastic 컨테이너 레지스트리 요금.

샘플 실행

이 샘플을 실행하려면

  1. Docker 이미지를 생성하고 Amazon ECR의 이미지 리포지토리에 푸시하려면, 아래의 “샘플 실행” 섹션에 있는 단계를 수행하십시오.도커 샘플.

  2. Go 프로젝트 만들기:

    1. 이 주제의 Go 프로젝트 구조Go 프로젝트 파일 섹션에 설명된 대로 파일을 생성한 다음, 이를 S3 입력 버킷이나 AWS CodeCommit, GitHub 또는 Bitbucket 리포지토리에 업로드합니다.

      중요

      (root directory name)은 업로드하지 말고, (root directory name) 안에 있는 파일만 업로드하십시오.

      S3 입력 버킷을 사용하고 있는 경우, 파일을 포함하는 ZIP 파일을 생성한 다음, 이를 입력 버킷에 업로드하십시오. (root directory name)을 ZIP 파일에 추가하지 말고, (root directory name) 안에 있는 파일만 추가하십시오.

    2. AWS CodeBuild 직접 실행에 있는 단계를 수행하여 빌드 프로젝트를 생성하고, 빌드를 실행하고, 관련된 빌드 정보를 확인합니다.

      AWS CLI를 사용하여 빌드 프로젝트를 생성하는 경우, create-project 명령에 JSON 형식으로 입력하면 다음과 같이 표시될 수 있습니다. (자리 표시자는 사용자의 값으로 바꾸십시오.)

      { "name": "sample-go-project", "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip" }, "artifacts": { "type": "S3", "location": "codebuild-region-ID-account-ID-output-bucket", "packaging": "ZIP", "name": "GoOutputArtifact.zip" }, "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:4.0", "computeType": "BUILD_GENERAL1_SMALL" }, "serviceRole": "arn:aws:iam::account-ID:role/role-name", "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID" }
    3. 빌드 출력 아티팩트를 가져오려면 S3 출력 버킷을 엽니다.

    4. GoOutputArtifact.zip 파일을 로컬 컴퓨터나 인스턴스에 다운로드한 다음 파일의 내용을 추출합니다. 추출한 내용에서 hello 파일을 가져옵니다.

  3. 다음 중 하나가 true일 경우 Amazon ECR의 이미지 리포지토리에 대한 권한을 추가해야 합니다.AWS CodeBuild에서는 Docker 이미지를 빌드 환경으로 가져올 수 있습니다.

    • 프로젝트는 CodeBuild 자격 증명을 사용하여 Amazon ECR 이미지를 가져옵니다. 이는 ProjectEnvironmentimagePullCredentialsType 속성에 CODEBUILD 값으로 표시됩니다.

    • 프로젝트에서 교차 계정 Amazon ECR 이미지를 사용합니다. 이 경우에는 프로젝트에서 서비스 역할을 사용하여 Amazon ECR 이미지를 가져와야 합니다. 이 동작을 활성화하려면 ProjectEnvironmentimagePullCredentialsType 속성을 SERVICE_ROLE로 설정합니다.

    1. Amazon ECR 콘솔(https://console.aws.amazon.com/ecr/)을 엽니다.

    2. 리포지토리 이름 목록에서 생성했거나 선택한 리포지토리의 이름을 선택합니다.

    3. 탐색 창에서 권한을 선택하고, 편집을 선택한 다음 설명문 추가를 선택합니다.

    4. Statement name(설명문 이름)에 식별자(예: CodeBuildAccess)를 입력합니다.

    5. 효과에 대해 허용이 선택된 채로 둡니다. 이는 다른 AWS 계정으로의 액세스를 허용하겠다는 의미입니다.

    6. 보안 주체에 대해 다음 중 하나를 실시합니다.

      • 프로젝트에서 CodeBuild 자격 증명을 사용하여 Amazon ECR 이미지를 가져오는 경우서비스 보안 주체를 입력합니다codebuild.amazonaws.com.

      • 프로젝트에서 교차 계정 Amazon ECR 이미지를 사용하는 경우AWS계정 ID에서 ID를 입력합니다.AWS액세스 권한을 부여할 계정입니다.

    7. All IAM entities(모든 IAM 엔터티) 목록을 건너뜁니다.

    8. 작업은 가져오기 전용 작업인 ecr:GetDownloadUrlForLayer, ecr:BatchGetImageecr:BatchCheckLayerAvailability를 선택합니다.

    9. 저장(Save)을 선택합니다.

      이 정책이 Permissions(권한)에 표시됩니다. 보안 주체는 이 절차의 3단계에서 보안 주체에 입력한 내용입니다.

      • 프로젝트에서 CodeBuild 자격 증명을 사용하여 Amazon ECR 이미지를 가져오는 경우"codebuild.amazonaws.com"아래에 나타납니다.서비스 주체.

      • 프로젝트에서 교차 계정 Amazon ECR 이미지를 사용할 경우AWS액세스 권한을 부여하려는 계정이 아래에 나타납니다.AWS계정 ID.

        다음 샘플 정책은 CodeBuild 자격 증명과 교차 계정 Amazon ECR 이미지를 모두 사용합니다.

      { "Version":"2012-10-17", "Statement":[ { "Sid":"CodeBuildAccessPrincipal", "Effect":"Allow", "Principal":{ "Service":"codebuild.amazonaws.com" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] }, { "Sid":"CodeBuildAccessCrossAccount", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS-account-ID>:root" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] } ] }
  4. 직접 CodeBuild에 있는 단계를 수행하여 빌드 프로젝트를 생성하고, 빌드를 실행하고, 빌드 정보를 확인합니다.

    AWS CLI를 사용하여 빌드 프로젝트를 생성하는 경우, create-project 명령에 JSON 형식으로 입력하면 다음과 같이 표시될 수 있습니다. (자리 표시자는 사용자의 값으로 바꾸십시오.)

    { "name": "amazon-ecr-sample-project", "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip" }, "artifacts": { "type": "S3", "location": "codebuild-region-ID-account-ID-output-bucket", "packaging": "ZIP", "name": "GoOutputArtifact.zip" }, "environment": { "type": "LINUX_CONTAINER", "image": "account-ID.dkr.ecr.region-ID.amazonaws.com/your-Amazon-ECR-repo-name:tag", "computeType": "BUILD_GENERAL1_SMALL" }, "serviceRole": "arn:aws:iam::account-ID:role/role-name", "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID" }
  5. 빌드 출력 아티팩트를 가져오려면 S3 출력 버킷을 엽니다.

  6. GoOutputArtifact.zip 파일을 로컬 컴퓨터나 인스턴스에 다운로드한 다음 GoOutputArtifact.zip 파일의 내용을 추출합니다. 추출한 내용에서 hello 파일을 가져옵니다.

Go 프로젝트 구조

이 샘플에서는 다음 디렉터리 구조를 가정합니다.

(root directory name) ├── buildspec.yml └── hello.go

Go 프로젝트 파일

이 샘플은 다음 파일을 사용합니다.

buildspec.yml((root directory name)에 있음)

version: 0.2 phases: install: runtime-versions: golang: 1.13 build: commands: - echo Build started on `date` - echo Compiling the Go code - go build hello.go post_build: commands: - echo Build completed on `date` artifacts: files: - hello

hello.go((root directory name)에 있음)

package main import "fmt" func main() { fmt.Println("hello world") fmt.Println("1+1 =", 1+1) fmt.Println("7.0/3.0 =", 7.0/3.0) fmt.Println(true && false) fmt.Println(true || false) fmt.Println(!true) }

관련 리소스