Amazon ECS にデプロイする
パイプを使用して ECS にデプロイする方法 (推奨)
このオプションを使用すると、ECS へのデプロイを簡略化できます。このアプローチでは、ユーザーに代わってパイプラインが維持されるため、メンテナンスが少なくて済みます。ただし、このオプションでは、デプロイで制御可能な範囲が制限されます。
Prerequisites
以下が必要です。
Docker ハブ や ECR などの既存のイメージのレジストリ。独自の Docker レジストリを使用することもできます。
サービスを実行している既存の AWS Elastic Container Service クラスタ。このクラスタは、リポジトリの task 定義で更新されます。
RegisterTaskDefinition および UpdateService アクションを実行するための権限と、プログラミング経由でアクセスする権限を持つ、AWS IAM ユーザー。
手順
1. AWS ECS デプロイのサンプル リポジトリをクローンします。
2. [Pipelines] > [設定] > [リポジトリ変数] に進み、[追加] をクリックして、レジストリ変数を構成します。
例:
この例では、Docker Hub 変数を使用します。
DOCKERHUB_USERNAME
DOCKERHUB_PASSWORD
3. Pipelines の [設定] > [リポジトリ変数] に進み、[追加] をクリックして、AWS 資格情報を追加します。
例:
Amazon 変数
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
結果: これらの変数を bitbucket-pipelines.yml 内から参照できるようになりました
4. bitbucket-pipelines.yml に移動し、クラスタとサービス名を編集して、既存の ECS クラスタおよびサービスに一致させます。
例:
- pipe: atlassian/aws-ecs-deploy:1.0.0
variables:
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
CLUSTER_NAME: 'aws-ecs-deploy-example'
SERVICE_NAME: 'aws-ecs-deploy-example-service'
TASK_DEFINITION: 'taskDefinition.json'
結果: 変更がプッシュされると、Pipelines はアプリをビルドして Docker コンテナにパッケージ化し、Docker Hub にプッシュ後、コンテナを ECS にデプロイします。
AWS CLI を使用して ECS にデプロイする
このオプションは、カスタマイズをより細かく制御する必要がある高度なシナリオにおすすめします。
クイック スタート ガイド (推奨)
Prerequisites
以下が必要です。
Docker ハブ や ECR などの既存のイメージのレジストリ。独自の Docker レジストリを使用することもできます。
サービスを実行している既存の AWS Elastic Container Service クラスタ。このクラスタは、リポジトリの task 定義で更新されます。
RegisterTaskDefinition および UpdateService アクションを実行するための権限と、プログラミング経由でアクセスする権限を持つ、AWS IAM ユーザー。
手順
1. https://bitbucket.org/bitbucketpipelines/example-aws-ecs-deploy-no-pipe/src をクローンします。
2. [Pipelines] > [設定] > [リポジトリ変数] に進み、[追加] をクリックして、レジストリ変数を構成します。
3. パスワードの [保護] チェックボックスが選択されていることを確認します。
例:
この例では、Docker Hub 変数を使用します。
DOCKERHUB_USERNAME
DOCKERHUB_PASSWORD
3. Pipelines の [設定] > [リポジトリ変数] に進み、[追加] をクリックして、AWS 資格情報を追加します。
例:
Amazon 変数
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
結果: これらの変数を bitbucket-pipelines.yml 内から参照できるようになりました
ステップ バイ ステップ ガイド
Prerequisites
以下が必要です。
Docker ハブ や ECR などの既存のイメージのレジストリ。独自の Docker レジストリを使用することもできます。
サービスを実行している既存の AWS Elastic Container Service クラスタ。このクラスタは、リポジトリの task 定義で更新されます。
RegisterTaskDefinition および UpdateService アクションを実行するための権限と、プログラミング経由でアクセスする権限を持つ、AWS IAM ユーザー。
デプロイ ツールをインストールします。デプロイ スクリプトには AWS CLI と、ビルドの一部として jq ライブラリが必要です。別の Docker イメージを使用する場合、または独自のDocker イメージを作成した場合は、これらのパッケージがインストールされていることを確認してください。
手順
AWS CLI をインストールします。
例:
次の例では、インストールされたツールのイメージを確認できます。
- apt-get update && apt-get install -y jq
- curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
- unzip awscli-bundle.zip
- ./awscli-bundle/install -b ~/bin/aws
- export PATH=~/bin:$PATH
2. 新しくプッシュされた Docker イメージを参照する ECS タスク定義を登録します。ECS クラスタでタスク定義を登録すると、バージョンが返されます。これを環境変数に保存することで、後で ECS サービスを更新する際に参照できます。
例:
# Replace the container name in the task definition with the new image.
- export IMAGE_NAME="${DOCKERHUB_USERNAME}/${BITBUCKET_REPO_SLUG}:${BITBUCKET_BUILD_NUMBER}"
- envsubst < task-definition.json > task-definition-envsubst.json
# Update the task definition and capture the latest revision.
- >
export UPDATED_TASK_DEFINITION=$(aws ecs register-task-definition --cli-input-json file://task-definition-envsubst.json | \
jq '.taskDefinition.taskDefinitionArn' --raw-output)
3. ECS サービスを更新します。
例:
- aws ecs update-service --service example-ecs-service --cluster example-ecs-cluster --task-definition ${UPDATED_TASK_DEFINITION}