CodeBuild の Amazon ECR サンプル - AWS CodeBuild

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 Contain

サンプルの実行

このサンプルを実行するには

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

  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 を使用してビルドプロジェクトを作成する場合、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: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. 以下のいずれかに該当する場合は、AWS CodeBuild が Docker イメージをビルド環境にプルできるように、Amazon ECR のイメージリポジトリにアクセス許可を割り当てる必要があります。

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

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

    1. で Amazon ECR コンソールを開きます。https://console.aws.amazon.com/ecr/

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

    3. ナビゲーションペインで、[アクセス許可]、[編集]、[ステートメントを追加] の順に選択します。

    4. [ステートメント名] で、識別子 (CodeBuildAccess など) を入力します。

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

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

      • プロジェクトで CodeBuild 認証情報を使用して Amazon ECR イメージをプルする場合は、サービスプリンシパルには、codebuild.amazonaws.com

      • プロジェクトでクロスアカウント Amazon ECR イメージを使用している場合、AWS アカウント IDで、アクセスを付与する AWS アカウントの ID を入力します。

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

    8. [アクション] で、プル専用アクションとして [ecr:GetDownloadUrlForLayer]、[ecr:BatchGetImage]、および [ecr:BatchCheckLayerAvailability] を選択します。

    9. [Save] (保存) をクリックします。

      このポリシーは [アクセス許可] に表示されます。プリンシパルは、この手順のステップ 3 で [プリンシパル] に入力した値です。

      • プロジェクトで CodeBuild 認証情報を使用して Amazon ECR イメージをプルする場合、"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" ] }, { "Sid":"CodeBuildAccessCrossAccount", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS-account-ID>:root" }, "Action":[ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] } ] }
  4. CodeBuild の実行」の手順に従って、ビルドプロジェクトを作成し、ビルドを実行し、ビルド情報を表示します。

    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" }
  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) }

関連リソース