📝
AWS ECSのスケジューリングタスクのコンテナの上書きをCircleCIから行う方法
追記
- Amazon EventBridge経由でスケジュールタスクの設定を行うと自動で最新リビジョンを参照してくれるようです
- 参考:https://dev.classmethod.jp/articles/ecs-schedule-eventbridge/
前提
- CircleCIのOrbsを使用する為、CircleCIのバージョンは2.1以降であることを前提とします
jobsの設定
jobs: update-ecs-scheduled-task: executor: aws-cli/default steps: - checkout - aws-cli/setup - run: name: update ECS Scheduled Task command: | aws events put-targets \ --rule {更新するルールの名前} \ --targets "[ { \"Id\": \"$TARGET_ID\", \"Arn\": \"$ECS_CLUSTER_ARN\", \"RoleArn\": \"$ROLE_ARN\", \"Input\": \"{ \\\"containerOverrides\\\": [{ \\\"name\\\": \\\"上書きするコンテナの名前\\\", \\\"command\\\": [\\\"実行するコマンド(スペース区切り)\\\",\\\"実行するコマンド(スペース区切り)\\\"] }] }\", \"EcsParameters\": { \"TaskDefinitionArn\": \"タスク定義のArn\" } } ]"
- 実行するコマンド(スペース区切り)は、タスク定義でコマンドを実行させる際に
bundle,exec,rails,db:migrate
のようにコマンドをスペースで区切った一つ一つのことを指します
補足(各パラメータをGUIから確認する方法)
- 更新するルールの名前
- ECS→クラスター→該当のタスクが動いているクラスター→タスクのスケジューリング→スケジュールルールの名前
- $TARGET_ID
- ECS→クラスター→該当のタスクが動いているクラスター→タスクのスケジューリング→更新するスケジュールを選択→ターゲットのスケジュール→ターゲット名
- $ECS_CLUSTER_ARN
- ECS→クラスター→Cluster ARN
- $ROLE_ARN
- ECS→クラスター→該当のタスクが動いているクラスター→タスクのスケジューリング→更新するスケジュールを選択→ターゲットのスケジュール→ターゲット名→ターゲットロール
- 該当のターゲットロールのArnを調べる
- IAM→ロール→該当のターゲットロール→ロール ARN
- 該当のターゲットロールのArnを調べる
- ECS→クラスター→該当のタスクが動いているクラスター→タスクのスケジューリング→更新するスケジュールを選択→ターゲットのスケジュール→ターゲット名→ターゲットロール
- 上書きするコンテナの名前
- ECS→クラスター→該当のタスクが動いているクラスター→タスクのスケジューリング→更新するスケジュールを選択→ターゲットのスケジュール→ターゲット名→タスク定義
- ECS→タスク定義→該当のタスク定義→更新前のバージョン→コンテナの定義→コンテナ名
- ECS→クラスター→該当のタスクが動いているクラスター→タスクのスケジューリング→更新するスケジュールを選択→ターゲットのスケジュール→ターゲット名→タスク定義
Discussion