チュートリアル: を使用した Amazon ECS 標準デプロイ CodePipeline - AWS CodePipeline

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

チュートリアル: を使用した Amazon ECS 標準デプロイ CodePipeline

このチュートリアルでは、 を使用して Amazon と完全ECSで end-to-end 継続的なデプロイ (CD) パイプラインを作成するのに役立ちます CodePipeline。

重要

コンソールでパイプラインを作成する際、S3 アーティファクトバケットがアーティファクトに によって CodePipeline使用されます。(これは S3 ソースアクションに使用されるバケットとは異なります)。S3 アーティファクトバケットがパイプラインのアカウントとは異なるアカウントにある場合は、S3 アーティファクトバケットが によって所有 AWS アカウント されており、安全で信頼できることを確認してください。

注記

このチュートリアルでは、 の Amazon ECS標準デプロイアクションについて説明します CodePipeline。で Amazon を使用してデプロイアクションを CodeDeploy ブルー/グリーンECS化するチュートリアルについては CodePipeline、「」を参照してくださいチュートリアル: Amazon ECRソースと ECSからCodeDeploy デプロイまでのパイプラインを作成する

前提条件

このチュートリアルで CD パイプラインを作成する前に、いつくかのリソースを用意する必要があります。使用を開始するために必要なものは以下のとおりです。

注記

これらのリソースはすべて同じ AWS リージョン内に作成する必要があります。

  • Dockerfile とアプリケーションソースを持つソースコントロールリポジトリ (このチュートリアルでは を使用します CodeCommit)。詳細については、AWS CodeCommit 「 ユーザーガイド」の「リポジトリの作成 CodeCommit」を参照してください。

  • Dockerfile とアプリケーションソースから構築したイメージを含む Docker イメージリポジトリ (このチュートリアルでは Amazon を使用しますECR)。詳細については、Amazon Elastic Container Registry ユーザーガイド の「リポジトリの作成」と「イメージをプッシュする」を参照してください。

  • イメージリポジトリでホストされている Docker イメージを参照する Amazon ECSタスク定義。詳細については、Amazon Elastic Container Service デベロッパーガイド の「タスク定義の作成」を参照してください。

    重要

    の Amazon ECS標準デプロイアクションは、Amazon ECSサービスで使用されるリビジョンに基づいて、タスク定義の独自のリビジョン CodePipeline を作成します。Amazon ECSサービスを更新せずにタスク定義の新しいリビジョンを作成すると、デプロイアクションはそれらのリビジョンを無視します。

    このチュートリアルで使用するタスク定義の例を以下に示します。namefamily に使用する値は、ビルド仕様ファイルのために次のステップで使用します。

    { "ipcMode": null, "executionRoleArn": "role_ARN", "containerDefinitions": [ { "dnsSearchDomains": null, "environmentFiles": null, "logConfiguration": { "logDriver": "awslogs", "secretOptions": null, "options": { "awslogs-group": "/ecs/hello-world", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "ecs" } }, "entryPoint": null, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ], "command": null, "linuxParameters": null, "cpu": 0, "environment": [], "resourceRequirements": null, "ulimits": null, "dnsServers": null, "mountPoints": [], "workingDirectory": null, "secrets": null, "dockerSecurityOptions": null, "memory": null, "memoryReservation": 128, "volumesFrom": [], "stopTimeout": null, "image": "image_name", "startTimeout": null, "firelensConfiguration": null, "dependsOn": null, "disableNetworking": null, "interactive": null, "healthCheck": null, "essential": true, "links": null, "hostname": null, "extraHosts": null, "pseudoTerminal": null, "user": null, "readonlyRootFilesystem": null, "dockerLabels": null, "systemControls": null, "privileged": null, "name": "hello-world" } ], "placementConstraints": [], "memory": "2048", "taskRoleArn": null, "compatibilities": [ "EC2", "FARGATE" ], "taskDefinitionArn": "ARN", "family": "hello-world", "requiresAttributes": [], "pidMode": null, "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "1024", "revision": 1, "status": "ACTIVE", "inferenceAccelerators": null, "proxyConfiguration": null, "volumes": [] }
  • 前述のタスク定義を使用するサービスを実行している Amazon ECSクラスター。詳細については、Amazon Simple Queue Serviceデベロッパーガイドクラスターの作成サービスの作成 を参照してください。

これらの前提条件を満たした後、チュートリアルに進んで CD パイプラインを作成できます。

ステップ 1: ビルド仕様ファイルをソースリポジトリに追加する

このチュートリアルでは CodeBuild 、 を使用して Docker イメージを構築し、そのイメージを Amazon にプッシュしますECR。ソースコードリポジトリにbuildspec.ymlファイルを追加して、その方法を説明します CodeBuild。ビルド仕様の以下の例では、次のように動作します。

  • プレビルドステージ:

    • Amazon にログインしますECR。

    • リポジトリURIをECRイメージに設定し、ソースの Git コミット ID の最初の 7 文字を含むイメージタグを追加します。

  • ビルドステージ

    • Docker イメージを作成し、イメージに latest と Git コミット ID の両方をタグ付けします。

  • ポストビルドステージ:

    • 両方のタグを使用してイメージをECRリポジトリにプッシュします。

    • Amazon ECSサービスのコンテナ名とイメージとタグを含む というファイルをビルドルートimagedefinitions.jsonに書き込みます。CD パイプラインのデプロイステージでこの情報を使用してサービスのタスク定義の新しいリビジョンを作成し、新しいタスク定義を使用してサービスを更新します。imagedefinitions.json ファイルはECSジョブワーカーに必要です。

このサンプルテキストを貼り付けて、buildspec.yml ファイルを使用して、イメージとタスク定義の値を置き換えます。このテキストでは、例としてアカウント ID 111122223333 を使用しています。

version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws --version - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-west-2.amazonaws.com - REPOSITORY_URI=012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) - IMAGE_TAG=${COMMIT_HASH:=latest} build: commands: - echo Build started on `date` - echo Building the Docker image... - docker build -t $REPOSITORY_URI:latest . - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker images... - docker push $REPOSITORY_URI:latest - docker push $REPOSITORY_URI:$IMAGE_TAG - echo Writing image definitions file... - printf '[{"name":"hello-world","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json artifacts: files: imagedefinitions.json

ビルド仕様は前提条件、このチュートリアルで Amazon ECSサービスが使用した で提供されたサンプルタスク定義用に記述されました。REPOSITORY_URI 値は image リポジトリ (イメージタグなし) に対応し、ファイルの末尾近くの hello-world 値はサービスのタスク定義のコンテナ名に対応します。

ソースリポジトリに buildspec.yml ファイルを追加するには
  1. テキストエディタを開き、上記のビルド仕様をコピーして新しいファイルに貼り付けます。

  2. REPOSITORY_URI 値 (012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world) を Docker イメージの Amazon ECRリポジトリ URI (イメージタグなし) に置き換えます。hello-world を、Docker イメージを参照するサービスのタスク定義のコンテナ名に置き換えます。

  3. ソースリポジトリに buildspec.yml ファイルをコミットし、プッシュします。

    1. ファイルを追加します。

      git add .
    2. 変更をコミットします。

      git commit -m "Adding build specification."
    3. コミットをプッシュします。

      git push

ステップ 2: 継続的デプロイパイプラインを作成する

CodePipeline ウィザードを使用してパイプラインステージを作成し、ソースリポジトリをECSサービスに接続します。

パイプラインを作成するには
  1. で CodePipeline コンソールを開きますhttps://console.aws.amazon.com/codepipeline/

  2. [Welcome (ようこそ)] ページで、[Create pipeline (パイプラインの作成)] を選択します。

    を初めて使用する場合は CodePipeline、ウェルカム の代わりに入門ページが表示されます。[今すぐ始める] を選択します。

  3. ステップ 1: 名前ページで、パイプライン名 にパイプラインの名前を入力します。このチュートリアルでは、パイプライン名は hello-world です。

  4. パイプラインタイプ でV2 を選択します。詳細については、「パイプラインのタイプ」を参照してください。[Next (次へ)] を選択します。

  5. [ステップ 2: ソースステージの追加] ページの [ソースプロバイダー] で、[ AWS CodeCommit] を選択します。

    1. リポジトリ名 では、パイプラインの CodeCommitソースロケーションとして使用するリポジトリの名前を選択します。

    2. [ブランチ名] で使用するブランチを選択し、[Next (次へ)] を選択します。

  6. [ステップ 3: ビルドステージの追加] ページの [ビルドプロバイダー] で [AWS CodeBuild] を選択し、[プロジェクトの作成] を選択します。

    1. [Project name] では、ビルドプロジェクトに一意の名前を選択します。このチュートリアルでは、プロジェクト名は hello-world です。

    2. [環境イメージ] で、[Managed image (マネージド型イメージ)] を選択します。

    3. [オペレーティングシステム] で、[Amazon Linux 2] を選択します。

    4. [ランタイム] で、[Standard (標準)] を選択します。

    5. [イメージ] で、[aws/codebuild/amazonlinux2-x86_64-standard:3.0] を選択します。

    6. [イメージバージョン] と [環境タイプ] には、既定値を使用します。

    7. [Enable this flag if you want to build Docker images or want your builds to get elevated privileges (Docker イメージを構築する場合、またはビルドで昇格された権限を取得する場合は、このフラグを有効にする)] を選択します。

    8. CloudWatch ログ の選択を解除しますアドバンスト の拡張を必要とする場合があります。

    9. CodePipeline「」を選択します。

    10. [Next (次へ)] を選択します。

      注記

      ウィザードは、Codebuild- と呼ばれるビルドプロジェクトの CodeBuild サービスロールを作成します。build-project-name-service-role 。このロール名は、後で Amazon アクセスECR許可を追加するときに書き留めます。

  7. ステップ 4: デプロイステージの追加ページで、デプロイプロバイダー Amazon ECSを選択します。

    1. クラスター名 で、サービスが実行されている Amazon ECSクラスターを選択します。このチュートリアルでは、クラスターは default です。

    2. [サービス名] で更新するサービスを選択し、[Next (次へ)] を選択します。このチュートリアルでは、サービス名は hello-world です。

  8. [ステップ 5: レビュー] ページで、パイプラインの設定を確認し、[パイプラインの作成] を選択してパイプラインを作成します。

    注記

    これでパイプラインが作成され、さまざまなパイプラインステージを通して実行を試みます。ただし、ウィザードによって作成されたデフォルトの CodeBuild ロールには、 buildspec.yml ファイルに含まれるすべてのコマンドを実行するアクセス許可がないため、ビルドステージは失敗します。次のセクションで、ビルドステージのアクセス権限を追加します。

ステップ 3: ロールに CodeBuild Amazon ECR アクセス許可を追加する

CodePipeline ウィザードは、codebuild- と呼ばれる CodeBuild ビルドプロジェクトのIAMロールを作成しました。build-project-name-service-role 。このチュートリアルでは、名前は codebuild-hello-world-service-role です。buildspec.yml ファイルは Amazon ECRAPIオペレーションを呼び出すため、ロールには、これらの Amazon ECR呼び出しを行うアクセス許可を許可するポリシーが必要です。以下の手順では、適切なアクセス権限をロールにアタッチします。

CodeBuild ロールに Amazon アクセスECR許可を追加するには
  1. でIAMコンソールを開きますhttps://console.aws.amazon.com/iam/

  2. 左のナビゲーションペインで、[ロール] を選択します。

  3. 検索ボックスに codebuild- と入力し、 CodePipeline ウィザードによって作成されたロールを選択します。このチュートリアルでは、ロール名は codebuild-hello-world-service-role です。

  4. [Summary (概要)] ページで、[Attach policy (ポリシーのアタッチ)] を選択します。

  5. AmazonEC2ContainerRegistryPowerUser ポリシーの左側にあるボックスを選択し、ポリシーのアタッチ を選択します。

ステップ 4: パイプラインのテスト

パイプラインには、 end-to-end ネイティブの AWS 継続的デプロイを実行するためのすべてが必要です。次は、コードの変更をソースリポジトリにプッシュすることで機能をテストします。

パイプラインをテストするには
  1. 設定済みソースリポジトリにコード変更を行い、変更をコミットしてプッシュします。

  2. で CodePipeline コンソールを開きますhttps://console.aws.amazon.com/codepipeline/

  3. リストからパイプラインを選択します。

  4. ステージを通してパイプラインの進行状況を監視します。パイプラインが完了し、Amazon ECSサービスがコード変更から作成された Docker イメージを実行する必要があります。