Amazon ECS にデプロイする
パイプを使用して ECS にデプロイする方法 (推奨)
このオプションを使用すると、ECS へのデプロイを簡略化できます。このアプローチでは、ユーザーに代わってパイプラインが維持されるため、メンテナンスが少なくて済みます。ただし、このオプションでは、デプロイで制御可能な範囲が制限されます。
前提条件
以下が必要です。
Docker ハブ や ECR などの既存のイメージのレジストリ。独自の Docker レジストリを使用することもできます。
サービスを実行している既存の AWS Elastic Container Service クラスタ。このクラスタは、リポジトリの task 定義で更新されます。
RegisterTaskDefinition および UpdateService アクションを実行するための権限と、プログラミング経由でアクセスする権限を持つ、AWS IAM ユーザー。
手順
1. Clone AWS ECS deployment example repository.
2. Configure your registry variables by going to Repository settings > Pipelines > Repository variables, and selecting Add.
You can define these variables within the deployment environment, repository, or workspace.
3. Add your AWS credentials.
Outcome: You can now reference these variables from within the bitbucket-pipelines.yml
.
4. Go to your bitbucket-pipelines.yml
and edit the cluster and service name to match your existing ECS cluster and service.
例:
- 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 にデプロイする
このオプションは、カスタマイズをより細かく制御する必要がある高度なシナリオにおすすめします。
クイック スタート ガイド (推奨)
前提条件
以下が必要です。
Docker ハブ や ECR などの既存のイメージのレジストリ。独自の Docker レジストリを使用することもできます。
サービスを実行している既存の AWS Elastic Container Service クラスタ。このクラスタは、リポジトリの task 定義で更新されます。
An AWS IAM user with programmatic access, with sufficient permissions to execute the
RegisterTaskDefinition
andUpdateService
actions.デプロイ ツールをインストールします。デプロイ スクリプトには 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}
この内容はお役に立ちましたか?