AWS ECSのスケジューリングタスクのコンテナの上書きをCircleCIから行う方法

公開:2020/09/18
更新:2020/09/23
2 min読了の目安(約1600字TECH技術記事

前提

  • 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
  • 上書きするコンテナの名前
    • ECS→クラスター→該当のタスクが動いているクラスター→タスクのスケジューリング→更新するスケジュールを選択→ターゲットのスケジュール→ターゲット名→タスク定義
      • ECS→タスク定義→該当のタスク定義→更新前のバージョン→コンテナの定義→コンテナ名

参考文献