このブログははてなブログからの移行記事です。
やりたいこと
- GitHub Actions上でECRにDocker imageをデプロイ後、そのimageを利用するECSに空デプロイしたい
使ったもの
ちなみに調べると大体は下記を使う方法が出てくる。
が、今回の私の手元の構成だとtask definitionは別repositoryのterraformでpush, docker imageのもととなるアプリケーションはまた別repositoryという構成だったので使えない。
この構成がそもそもダメという説はある(当方、terraform初心者)。
ハマったこと
以下のエラーが出てデプロイができない
Unknown task definition arn: {task definitionの名前}
流れ、結論を超ざっくりいうと
- 原因はデプロイに利用していたIAMユーザの権限不足
- にも関わらずエラーはこれなので「コンソールだと存在するのに見つからないの…?」と混乱してた
- 実装コードを読みに行くとエラーを雑に丸めてtask not foundとしているだけになっていることを発見
- aws cliで直接実行して権限不足を確認
足りなかった権限
ecs:DescribeTaskDefinitionが足りなかった
エラーを握りつぶしてる部分
ここでcatchするClientErrorにはtaskが見つからない以外のエラー、今回なら権限不足のエラーも入ってくるが全部丸めてtaskが見つからないというメッセージが出力されてしまう。
ややこしいのは、この処理の前後では権限不足でもきちんとエラーを出してくれてるので対応できるのだがここにきてこれなので俺が悪いのか、となってしまった。
最終的に必要だった権限
{
"Version": "2012-10-17",
"Statement": [
{
"Sid":"DeployECS",
"Effect":"Allow",
"Action":[
"ecs:DescribeTasks",
"ecs:DescribeServices",
"ecs:DescribeTaskDefinition",
"ecs:RegisterTaskDefinition",
"ecs:DeregisterTaskDefinition",
"ecs:UpdateService",
"ecs:ListTasks",
"iam:PassRole"
],
"Resource": "*"
}
]
}
反省
AWS初心者というのもあったが、まだよくわからんものは横着して便利ツール使う前に泥臭く触るべきだったなぁという気持ちになりました。aws cliありがとう。
特に面白い記事でもないんですが同じことで死んでる人のために記事を残す。
該当のコードについては気が向いたらPR出そうと思います。