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から作成します。
エディタ上では以下のような感じ。
コードだと
{
"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のイメージで更新されるようになります。