기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
에 대한 아마존 ECR 샘플 CodeBuild
이 샘플에서는 Amazon Elastic Container Registry(Amazon ECR) 이미지 리포지토리에 있는 도커 이미지를 사용하여 샘플 Go 프로젝트를 빌드합니다.
중요
이 샘플을 실행하면 AWS 계정에 요금이 청구될 수 있습니다. 여기에는 Amazon S3 AWS KMS, CloudWatch 로그 및 Amazon ECR과 관련된 AWS 리소스 및 작업에 대한 가능한 요금이 포함됩니다. AWS CodeBuild 자세한 내용은 요금, Amazon S3 CodeBuild 요금
샘플 실행
이 샘플을 실행하려면
-
도커 이미지를 생성하고 Amazon ECR의 이미지 리포지토리에 푸시하려면, Amazon ECR 이미지 리포지토리에 Docker 이미지 게시 샘플의 “샘플 실행” 섹션에 있는 단계를 수행하세요.
-
Go 프로젝트 만들기:
-
이 주제의 Go 프로젝트 구조 및 Go 프로젝트 파일 섹션에 설명된 대로 파일을 만든 다음 S3 입력 버킷 또는 AWS CodeCommit GitHub, 또는 Bitbucket 리포지토리에 업로드하십시오.
중요
은 업로드하지 말고,(root directory name)
안에 있는 파일만 업로드하십시오.(root directory name)
S3 입력 버킷을 사용하고 있는 경우, 파일을 포함하는 ZIP 파일을 생성한 다음, 이를 입력 버킷에 업로드하십시오.
을 ZIP 파일에 추가하지 말고,(root directory name)
안에 있는 파일만 추가하십시오.(root directory name)
-
빌드 프로젝트를 만들고, 빌드를 실행하고, 관련 빌드 정보를 확인합니다.
를 사용하여 빌드 프로젝트를 AWS CLI 만드는 경우 JSON 형식의
create-project
명령 입력이 이와 비슷해 보일 수 있습니다. (자리 표시자는 사용자의 값으로 바꾸십시오.){ "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:5.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
" } -
빌드 출력 아티팩트를 가져오려면 S3 출력 버킷을 엽니다.
-
파일을 로컬 컴퓨터나 인스턴스에 다운로드한 다음 파일의 내용을 추출합니다. 추출한 내용에서GoOutputArtifact
.ziphello
파일을 가져옵니다.
-
-
다음 중 하나에 해당하는 경우 Docker 이미지를 빌드 환경으로 가져올 AWS CodeBuild 수 있도록 Amazon ECR의 이미지 리포지토리에 권한을 추가해야 합니다.
-
프로젝트는 CodeBuild 자격 증명을 사용하여 Amazon ECR 이미지를 가져옵니다. 이는
ProjectEnvironment
의imagePullCredentialsType
속성에CODEBUILD
값으로 표시됩니다. -
프로젝트에서는 교차 계정 Amazon ECR 이미지를 사용합니다. 이 경우에는 프로젝트에서 서비스 역할을 사용하여 Amazon ECR 이미지를 끌어와야 합니다. 이 동작을 활성화하려면
ProjectEnvironment
의imagePullCredentialsType
속성을SERVICE_ROLE
로 설정합니다.
Amazon ECR 콘솔(https://console.aws.amazon.com/ecr/
)을 엽니다. -
리포지토리 이름 목록에서 생성했거나 선택한 리포지토리의 이름을 선택합니다.
-
탐색 창에서 권한을 선택하고, 편집을 선택한 다음 설명문 추가를 선택합니다.
-
Statement name(설명문 이름)에 식별자(예:
CodeBuildAccess
)를 입력합니다. -
효과에 대해 허용이 선택된 채로 둡니다. 이는 다른 AWS 계정으로의 액세스를 허용하겠다는 의미입니다.
-
보안 주체에 대해 다음 중 하나를 실시합니다.
-
프로젝트에서 CodeBuild 자격 증명을 사용하여 Amazon ECR 이미지를 가져오는 경우 서비스 주체에 다음을 입력합니다
codebuild.amazonaws.com
. -
프로젝트에서 교차 계정 Amazon ECR 이미지를 사용할 경우에는 AWS 계정 ID에 액세스 권한을 부여할 AWS 계정의 ID를 입력합니다.
-
-
All IAM entities(모든 IAM 엔터티) 목록을 건너뜁니다.
-
[액션] 에서 풀 전용 작업 (ecr:, ecr:GetDownloadUrlForLayer, ecr: 및 ecr:BatchGetImage) 을 선택합니다. BatchCheckLayerAvailability
-
조건에 다음을 추가합니다.
{ "StringEquals":{ "aws:SourceAccount":"
<AWS-account-ID>
", "aws:SourceArn":"arn:aws:codebuild:<region>
:<AWS-account-ID>
:project/<project-name>
" } } -
저장을 선택합니다.
이 정책이 Permissions(권한)에 표시됩니다. 보안 주체는 이 절차의 3단계에서 보안 주체에 입력한 내용입니다.
-
프로젝트에서 CodeBuild 자격 증명을 사용하여 Amazon ECR 이미지를 가져오는 경우 서비스 주체 아래에
"codebuild.amazonaws.com"
표시됩니다. -
프로젝트에서 교차 계정 Amazon ECR 이미지를 사용하는 경우 액세스 권한을 부여하려는 계정의 ID가 AWS 계정 ID 아래에AWS 표시됩니다.
다음 샘플 정책은 CodeBuild 자격 증명과 계정 간 Amazon ECR 이미지를 모두 사용합니다.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"CodeBuildAccessPrincipal", "Effect":"Allow", "Principal":{ "Service":"codebuild.amazonaws.com" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ], "Condition":{ "StringEquals":{ "aws:SourceArn":"arn:aws:codebuild:
<region>
:<aws-account-id>
:project/<project-name>
", "aws:SourceAccount":"<aws-account-id>
" } } }, { "Sid":"CodeBuildAccessCrossAccount", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS-account-ID>
:root" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] } ] }-
프로젝트에서 CodeBuild 자격 증명을 사용하고 프로젝트에서 Amazon ECR 리포지토리에 대한 공개 액세스 권한을 갖도록 하려면
Condition
키를 생략하고 다음 샘플 정책을 추가할 수 있습니다. CodeBuild
{ "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" ] } ] } -
-
-
빌드 프로젝트를 생성하고, 빌드를 실행하고, 빌드 정보를 확인합니다.
를 사용하여 빌드 프로젝트를 AWS CLI 만드는 경우 JSON 형식의
create-project
명령 입력이 다음과 비슷할 수 있습니다. (자리 표시자는 사용자의 값으로 바꾸십시오.){ "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
" } -
빌드 출력 아티팩트를 가져오려면 S3 출력 버킷을 엽니다.
-
파일을 로컬 컴퓨터나 인스턴스에 다운로드한 다음GoOutputArtifact
.zip
파일의 내용을 추출합니다. 추출한 내용에서GoOutputArtifact
.ziphello
파일을 가져옵니다.
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) }
관련 리소스
시작하는 방법에 대한 자세한 내용은 을 참조하십시오. AWS CodeBuild콘솔을 사용하여 AWS CodeBuild 시작하기
의 문제 해결에 대한 자세한 내용은 CodeBuild 을 참조하십시오문제 해결 AWS CodeBuild.
할당량에 대한 자세한 내용은 CodeBuild 을 참조하십시오. AWS CodeBuild에 대한 할당량