Amazon ECS にデプロイする
パイプを使用して ECS にデプロイする方法 (推奨)
このオプションを使用すると、ECS へのデプロイを簡略化できます。このアプローチでは、ユーザーに代わってパイプラインが維持されるため、メンテナンスが少なくて済みます。ただし、このオプションでは、デプロイで制御可能な範囲が制限されます。
前提条件
以下が必要です。
Docker ハブ や ECR などの既存のイメージのレジストリ。独自の Docker レジストリを使用することもできます。
サービスを実行している既存の AWS Elastic Container Service クラスタ。このクラスタは、リポジトリの task 定義で更新されます。
RegisterTaskDefinition および UpdateService アクションを実行するための権限と、プログラミング経由でアクセスする権限を持つ、AWS IAM ユーザー。
手順
1. AWS ECS デプロイのサンプル リポジトリを複製します。
2. [リポジトリ設定] > [Pipelines] > [リポジトリ変数] に移動して [追加] を選択することで、レジストリ変数を設定します。
これらの変数は、デプロイ環境、リポジトリ、またはワークスペース内で定義できます。
3. AWS 認証情報を追加します。
結果: これらの変数を 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 にデプロイする
このオプションは、カスタマイズをより細かく制御する必要がある高度なシナリオにおすすめします。
クイック スタート ガイド (推奨)
前提条件
以下が必要です。
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}
この内容はお役に立ちましたか?