0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DEPARTUREAdvent Calendar 2024

Day 23

ECRへのpushをEventBridgeで検知してfargateコンテナを更新する

Posted at

CDKで構築することもできますが、うまくいかないことが稀にあり手作業が発生するため忘備録。
ソースコードはCodePipelineを使わずgithub actionsでテスト&ビルド&プッシュをしています。

準備

  • ECRにリポジトリを作成する
  • Fargateサービスを構築して実行しておく

構築

EventBridgeでイベントバスを作成。スキーマの検出は「開始済み」にしておきます。
これはdefaultのイベントバスでも構わないです。

ルールの詳細を定義

作成したイベントバスを選択してルールを作成。
ルールタイプを「イベントパターンを持つルール」

イベントパターンを構築

パターンフォームを使用するかJSONエディタで直接設定しますが、結果jsonは以下のようになります。

{
  "source": ["aws.ecr"],
  "detail-type": ["ECR Image Action"],
  "detail": {
    "action-type": ["PUSH"],
    "result": ["SUCCESS"],
    "repository-name": ["sample-app"],
    "image-tag": ["latest"]
  }
}

ターゲットを選択

ターゲットタイプを「AWSのサービス」、ターゲットに「Step Functions ステートマシン」を選択。
新しいステートマシンを作成します。

ステートマシン作成

Step Functionsから作成します。
エディタ上では以下のような感じ。

step_functions_state.png

コードだと

{
  "Comment": "A description of my state machine",
  "StartAt": "UpdateService",
  "States": {
    "UpdateService": {
      "Type": "Task",
      "Parameters": {
        "Cluster": "sample-cluster",
        "Service": "sample-service",
        "DesiredCount": 1,
        "EnableExecuteCommand": true,
        "ForceNewDeployment": true
      },
      "Resource": "arn:aws:states:::aws-sdk:ecs:updateService",
      "End": true
    }
  }
}

上記を保存してステートマシンを選択します。

実行ロールを作成して選択します。
ロールのポリシーは以下のような感じ。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "states:StartExecution"
            ],
            "Resource": [
                "ここに作成したステートマシンのARN"
            ]
        }
    ]
}

これでECRにpushされるとfargateのコンテナがlatestのイメージで更新されるようになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?