無料でビルドを開始
CircleCI.comアカデミーブログコミュニティサポート

サービスの更新を AWS ECS にデプロイする方法

1+ year ago1 min read
クラウド
Server v4.x
Server v3.x
このページの内容

このノウハウガイドでは、CircleCI Orb を使用してCircleCIをAWS ECSにデプロイする方法を説明しています。

はじめに

Amazon Elastic Container Service (ECS) は、スケーラブルなコンテナ オーケストレーション サービスです。 Docker コンテナをサポートし、コンテナ化されたアプリケーションを AWS で実行およびスケールできます。 Amazon ECS を使用することにより、独自のコンテナ オーケストレーション ソフトウェアをインストール・設定せずに済むため、デプロイの複雑さが解消され、CircleCI プラットフォームでコンテナをシンプルかつ最適にデプロイすることができます。 このガイドでは、CircleCI Orb を使ってソフトウェアの変更を Amazon ECS にデプロイする方法を説明します。

1. 環境変数の設定

下記の環境変数を設定する必要があります。 環境変数の設定に関する詳細は、 環境変数の設定 を参照して下さい。 コンテキスト も使用できます。

  • AWS_ECR_ACCOUNT_URL

  • MY_APP_PREFIX

  • AWS_REGION

  • AWS_ACCESS_KEY_ID

2. バージョンの指定

すべての CircleCI config.yml は、最初にバージョンキーを指定します。 このキーは、互換性を損なう変更に関する警告を表示するために使用します。

version: 2.1

3. Orb の使用

このサンプルでは、設定ファイルで 3 つの Orb を使用する必要があります。 お客様の .circleci/config.yaml の最初に、以下のように追加します。

orbs:
  aws-ecr: circleci/aws-ecr@8.1.2 # use the AWS ECR orb
  aws-ecs: circleci/aws-ecs@3.2.0 # use the AWS ECS orb
  aws-cli: circleci/aws-cli@3.1.1 # use the AWS CLI orb

4. ワークフローの作成

ワークフローは、一連のジョブとその実行順序を定義するためのルールです。 ワークフローを使用すると、設定キーを組み合わせて複雑なジョブオーケストレーションを構成でき、問題の早期解決に役立ちます。 ワークフロー内で実行したいジョブを定義します、 このワークフローはコミットのたびに実行されます。 詳細は、 ワークフローの設定 を参照して下さい。

workflows:
  build-and-deploy: # this can be any name you choose

5. サービスの更新のビルド、プッシュ、およびデプロイ

新しくビルドしたイメージを AWS ECR からデプロイするように AWS サービスの更新 を設定する際、Orb を使用して設定ファイルをできるだけシンプルにすることができます。

  • 更新されたイメージをビルドして ECR にプッシュする ECR Orb の build-and-push-image ジョブ

  • サービスの更新をデプロイする ECS Orb の deploy-service-update ジョブ

workflows:
  build-and-deploy:
    jobs:
      - aws-ecr/build-and-push-image: # orb built-in job
          repo: '${MY_APP_PREFIX}'
          tag: '${CIRCLE_SHA1}'
      - aws-ecs/deploy-service-update: # orb built-in job
          requires:
            - aws-ecr/build-and-push-image
          family: '${MY_APP_PREFIX}-service'
          cluster: '${MY_APP_PREFIX}-cluster'
          container-image-name-updates: 'container=${MY_APP_PREFIX}-service,tag=${CIRCLE_SHA1}'

使用方法のオプションと Orb エレメントの全リストについては、CircleCI Orb レジストリの AWS-ECS Orb のページ を参照してください。

6. デプロイの検証

Amazon ECS サービスの更新が完了したら、更新が正しく行われたかを検証できます。 設定をできる限りシンプルにするために、AWS CLI Orbと ECS Orb を使います。 ここでは、Orb の組み込みジョブを使用して必要なプロセスを実行するのではなく、 Orb からのコマンドを verify-deployment という新しく定義されたジョブのステップとして使用します。

jobs:
  verify-deployment:
    executor: aws-cli/default
    steps:
      - aws-cli/install
      - aws-cli/setup:
          aws-access-key-id: AWS_SECRET_ACCESS_KEY
          aws-region: AWS_DEFAULT_REGION
          aws-secret-access-key: AWS_DEFAULT_REGION
      - run:
          name: Get last task definition
          command: >
            TASK_DEFINITION_ARN=$(aws ecs describe-task-definition \
                --task-definition ${MY_APP_PREFIX}-service \
                --output text \
                --query 'taskDefinition.taskDefinitionArn')
            echo "export TASK_DEFINITION_ARN='${TASK_DEFINITION_ARN}'" >>
            "$BASH_ENV"
      - aws-ecs/verify-revision-is-deployed:
          family: '${MY_APP_PREFIX}-service'
          cluster: '${MY_APP_PREFIX}-cluster'
          task-definition-arn: '${TASK_DEFINITION_ARN}'

ここでは、Orb を使用して AWS CLI をインストールおよび設定し、以前デプロイされた タスク定義を取得し、AWS-ECS Orb から verify-revision-is-deployed コマンドを使用して、この変更がデプロイされたかどうかを 検証 する方法を示しています。

7. 検証ジョブをワークフローに追加

verify-deployment という検証ジョブが作成されたので、これを build-and-deploy ワークフローに追加します。 requires キーを使って必ずビルドジョブとデプロイジョブの後で順番に実行されるようにします。

workflows:
  build-and-deploy:
    jobs:
      - aws-ecr/build-and-push-image: # orb built-in job
          repo: '${MY_APP_PREFIX}'
          tag: '${CIRCLE_SHA1}'
      - aws-ecs/deploy-service-update: # orb built-in job
          requires:
            - aws-ecr/build-and-push-image
          family: '${MY_APP_PREFIX}-service'
          cluster: '${MY_APP_PREFIX}-cluster'
          container-image-name-updates: 'container=${MY_APP_PREFIX}-service,tag=${CIRCLE_SHA1}'
      - verify-deployment:
          requires:
            - aws-ecs/deploy-service-update

config.yml 全文

version: 2.1 # 2.1 config required to use orbs

orbs:
  aws-ecr: circleci/aws-ecr@8.1.2 # use the AWS ECR orb
  aws-ecs: circleci/aws-ecs@3.2.0 # use the AWS ECS orb
  aws-cli: circleci/aws-cli@3.1.1 # use the AWS CLI orb

jobs:
  verify-deployment:
    executor: aws-cli/default
    steps:
      - aws-cli/install
      - aws-cli/setup:
          aws-access-key-id: AWS_SECRET_ACCESS_KEY
          aws-region: AWS_DEFAULT_REGION
          aws-secret-access-key: AWS_DEFAULT_REGION
      - run:
          name: Get last task definition
          command: >
            TASK_DEFINITION_ARN=$(aws ecs describe-task-definition \
                --task-definition ${MY_APP_PREFIX}-service \
                --output text \
                --query 'taskDefinition.taskDefinitionArn')
            echo "export TASK_DEFINITION_ARN='${TASK_DEFINITION_ARN}'" >>
            "$BASH_ENV"
      - aws-ecs/verify-revision-is-deployed:
          family: '${MY_APP_PREFIX}-service'
          cluster: '${MY_APP_PREFIX}-cluster'
          task-definition-arn: '${TASK_DEFINITION_ARN}'

workflows:
  build-and-deploy:
    jobs:
      - aws-ecr/build-and-push-image: # orb built-in job
          repo: '${MY_APP_PREFIX}'
          tag: '${CIRCLE_SHA1}'
      - aws-ecs/deploy-service-update: # orb built-in job
          requires:
            - aws-ecr/build-and-push-image
          family: '${MY_APP_PREFIX}-service'
          cluster: '${MY_APP_PREFIX}-cluster'
          container-image-name-updates: 'container=${MY_APP_PREFIX}-service,tag=${CIRCLE_SHA1}'
      - verify-deployment:
          requires:
            - aws-ecs/deploy-service-update

次のステップ

  • CircleCI Orb レジストリで AWS ECS Orb および AWS ECR Orb の詳細を参照して下さい。


Suggest an edit to this page

Make a contribution
Learn how to contribute