AWS CodeBuild
ユーザーガイド (API バージョン 2016-10-06)

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 S3 料金表」、「AWS Key Management Service 料金表」、「Amazon CloudWatch 料金表」、および「Amazon Elastic Container Registry 料金表」を参照してください。

サンプルの実行

このサンプルを実行する方法。

  1. Amazon ECR でイメージレポジトリに Docker イメージを作成してプッシュするには、Docker サンプル の「サンプルの実行」セクションにある手順を完了します。

  2. Go プロジェクトの作成:

    1. このトピックの「Go プロジェクトの構造」セクションと「Go プロジェクトのファイル」セクションに説明されているファイルを作成し、これらのファイルを Amazon S3 入力バケットにアップロードするか、AWS CodeCommit、GitHub、または Bitbucket リポジトリにアップロードします。

      重要

      (root directory name) をアップロードしないでください。アップロードするのは、(root directory name) 内のファイルのみです。

      Amazon 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:2.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. ビルド出力アーティファクトを取得するには、Amazon S3 出力バケットを開きます。

    4. GoOutputArtifact.zip ファイルをローカルコンピュータまたはインスタンスへダウンロードし、ファイルの内容を抽出します。展開したコンテンツから、hello ファイルを取得します。

  3. 以下のいずれかに該当する場合は、AWS CodeBuild が Docker イメージをビルド環境にプルできるように、Amazon ECR のイメージリポジトリにアクセス許可を割り当てる必要があります。

    • プロジェクトで CodeBuild の認証情報を使用して Amazon ECR のイメージをプルしている場合。これは、ProjectEnvironment の imagePullCredentialsType 属性で CODEBUILD の値で示されます。

    • プロジェクトでクロスアカウントの Amazon ECR イメージを使用している場合。この場合は、プロジェクトでサービスロールを使用して Amazon ECR イメージをプルする必要があります。この動作を有効にするには、ProjectEnvironment の imagePullCredentialsType 属性を SERVICE_ROLE に設定します。

    1. Open the Amazon ECS console at https://console.aws.amazon.com/ecs/.

    2. [Repositories] を選択します。

    3. リポジトリ名のリストで、作成または選択したリポジトリの名前を選択します。

    4. [アクセス許可] タブ、[Add] を順に選択して、ステートメントを作成します。

    5. [Sid] で、識別子を入力します (CodeBuildAccess など)。

    6. [効果] で、[許可] を選択したままにしておきます。これにより、別の AWS アカウントへのアクセスを許可します。

    7. [プリンシパル] で、次のいずれかを実行します。

      • プロジェクトで CodeBuild の認証情報を使用して Amazon ECR のイメージをプルする場合は、「codebuild.amazonaws.com」と入力します。

      • プロジェクトでクロスアカウントの Amazon ECR イメージを使用する場合は、「arn:aws:iam::AWS-account-ID):root」と入力します。AWS-account-ID はアクセスを付与する対象のアカウントです。

    8. [すべての IAM エンティティ] リストをスキップします。

    9. [Action] で、[プル専用アクション] を選択します。

      すべてのプル専用アクション ([ecr:GetDownloadUrlForLayer]、[ecr:BatchGetImage]、[ecr:BatchCheckLayerAvailability]) が選択されます。

    10. [すべて保存] を選択します。

      このポリシーは [ポリシードキュメント] に表示されます。プリンシパルは、この手順のステップ 3g で [プリンシパル] に入力した値です。

      • プロジェクトで CodeBuild の認証情報を使用して Amazon ECR のイメージをプルする場合、値は「"Service": "codebuild.amazonaws.com"」です。

      • プロジェクトでクロスアカウントの Amazon ECR イメージを使用する場合、値は「"AWS": "arn:aws:iam::AWS-account-ID):root"」です。AWS-account-ID はアクセスを付与する対象のアカウントです。

        次のサンプルポリシーでは、クロスアカウント Amazon ECR イメージを使用しています。

      { "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AWS-account-ID:root" }, "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] } ] }
  4. AWS 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:latest", "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. ビルド出力アーティファクトを取得するには、Amazon 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: 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) }

関連リソース