CodeBuild の Amazon ECR サンプル
このサンプルでは Amazon Elastic Container Registry (Amazon ECR) イメージレポジトリの Docker イメージを使用して、サンプルの Go プロジェクトをビルドします。
このサンプルを実行すると、AWS アカウントに課金される場合があります。これには、AWS CodeBuild と、Amazon S3、AWS KMS、CloudWatch Logs、Amazon ECR に関連する AWS リソースおよびアクションに対する料金が含まれます。詳細については、CodeBuild 料金表
サンプルの実行
このサンプルを実行するには
-
Amazon ECR で Docker イメージを作成してイメージリポジトリにプッシュするには、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 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
" } -
ビルド出力アーティファクトを取得するには、S3 出力バケットを開きます。
-
ファイルをローカルコンピュータまたはインスタンスへダウンロードし、ファイルの内容を抽出します。展開したコンテンツから、GoOutputArtifact
.ziphello
ファイルを取得します。
-
-
以下のいずれかに該当する場合は、AWS CodeBuild が Docker イメージをビルド環境にプルできるように、Amazon ECR のイメージリポジトリにアクセス許可を割り当てる必要があります。
-
プロジェクトで CodeBuild の認証情報を使用して Amazon ECR のイメージをプルしている場合。これは、
CODEBUILD
のimagePullCredentialsType
属性でProjectEnvironment
の値で示されます。 -
プロジェクトでクロスアカウントの Amazon ECR イメージを使用している場合。この場合は、プロジェクトでサービスロールを使用して Amazon ECR イメージをプルする必要があります。この動作を有効にするには、
imagePullCredentialsType
のProjectEnvironment
属性をSERVICE_ROLE
に設定します。
Amazon ECR コンソール (https://console.aws.amazon.com/ecr/
) を開きます。 -
リポジトリ名のリストで、作成または選択したリポジトリの名前を選択します。
-
ナビゲーションペインで、[アクセス許可]、[編集]、[ステートメントを追加] の順に選択します。
-
[ステートメント名] で、識別子 (
CodeBuildAccess
など) を入力します。 -
[効果] で、[許可] を選択したままにしておきます。これにより、別の AWS アカウントへのアクセスを許可します。
-
[プリンシパル] で、次のいずれかを実行します。
-
プロジェクトで CodeBuild の認証情報を使用して Amazon ECR のイメージをプルする場合は、[サービスプリンシパル] に「
codebuild.amazonaws.com
」と入力します。 -
プロジェクトでクロスアカウントの Amazon ECR イメージを使用する場合は、[AWS アカウント ID] に、アクセス権を付与する AWS アカウントの ID を入力します。
-
-
[すべての IAM エンティティ] リストをスキップします。
-
[アクション] で、プル専用アクションとして [ecr:GetDownloadUrlForLayer]、[ecr:BatchGetImage]、および [ecr:BatchCheckLayerAvailability] を選択します。
-
[条件] で、以下を追加します。
{ "StringEquals":{ "aws:SourceAccount":"
<AWS-account-ID>
", "aws:SourceArn":"arn:aws:codebuild:<region>
:<AWS-account-ID>
:project/<project-name>
" } } -
[Save (保存)] を選択します。
このポリシーは [アクセス許可] に表示されます。プリンシパルは、この手順のステップ 3 で [プリンシパル] に入力した値です。
-
プロジェクトで CodeBuild の認証情報を使用して Amazon ECR のイメージをプルする場合は、[Service principals] (サービスプリンシパル) に「
"codebuild.amazonaws.com"
」と入力します。 -
プロジェクトでクロスアカウントの Amazon ECR イメージを使用する場合は、[AWS アカウント ID] に、アクセス権を付与する 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" ], "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 認証情報を使用し、CodeBuild プロジェクトに Amazon ECR リポジトリへのオープンアクセスを許可する場合は、
Condition
キーを省略し、次のサンプルポリシーを追加できます。
{ "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" ] } ] } -
-
-
「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
" } -
ビルド出力アーティファクトを取得するには、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 のクォータ」を参照してください。