GithubActionsでecsUpdate


# はじめに

Dockerイメージを更新したらタスクのリビジョンを上げて、ECSのタスクを自動で更新したい

ECSで単一のタスク(webServer)を動かすサービスをupdateしたいだけなのでaws-cliのインターフェースを用いる

ecsの操作に特化したecs-cliもあるが、今回は使用しない

やることはaws-cli v2 をインストールして一連のアップデートを行うだけ。

# インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
1
2
3

これだけ。v2です

ref: https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-linux.html

# アップデート実行

  • task name: タスク定義名

  • cluster name: クラスター名

  • service name: サービス名

# タスク定義を吐き出す

aws ecs describe-task-definition --task-definition [task name] | jq '.taskDefinition' | jq "del(.compatibilities)" | jq "del(.taskDefinitionArn)" | jq "del(.requiresAttributes)" | jq "del(.revision)" | jq "del(.status)" > task-definition.json
1

もととなるタスク定義は作成済を想定しています

ここでは task-definition.json に吐き出してます

# タスク定義を登録する

aws ecs register-task-definition --family [task name] --cli-input-json file://task-definition.json
1

タスクのrevisionが上がります

# サービスの更新

aws ecs update-service --cluster [cluster name] --service [service name] --task-definition [task name]
1

# 完成形

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Check out
        uses: actions/checkout@master

      - name: set up
        run: |
          curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
          unzip awscliv2.zip
          sudo ./aws/install

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ap-northeast-1

      - name: Deploy rolling update
        run: |
          aws ecs describe-task-definition --task-definition [task name] | jq '.taskDefinition' | jq "del(.compatibilities)" | jq "del(.taskDefinitionArn)" | jq "del(.requiresAttributes)" | jq "del(.revision)" | jq "del(.status)" > task-definition.json
          aws ecs register-task-definition --family [task name] --cli-input-json file://task-definition.json
          aws ecs update-service --cluster tcong --service tcongServer --task-definition [task name]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27