普段は AWS での作業で多くの場合は既存の AWS アカウント上で作業が多いのですが、今回新しく作成した AWS アカウント上にゼロから環境を構築していく機会がありました。
既存の環境の構成を参考にしながら ECS のクラスターを作成したら、過去作成した時には直面したことがないエラーに直面しました。
調べてもなかなか原因がわからず解決まで時間を要してしまったのですが、実は些細な問題だったので備忘のメモとして記事にしました。
初めて ECS クラスター作成時にエラーが発生
AWS ECS で初めてクラスターを作成しようとした際、以下のエラーに遭遇しました。
Resourcehandlerreturnedmessage:"Invalid request provided: CreateCluster Invalid Request: Unable to assume the service linked role. Please verify that the ECS service linked role exists."管理者権限があるにも関わらず、なぜかクラスターの作成に失敗します。
assume… ってメッセージがあるので、IAM 関連かなと思い、IAM 周りの調査をしました。
ECS 作成時に使われるロール AWSServiceRoleForECS もあって必要な権限も付与されていてなぜ失敗しているのかがわかりませんでした。
原因
このエラーの正体は 実行順序とタイミングの問題 でした。
ECS では、初回利用時にサービスリンクロール(AWSServiceRoleForECS)が自動作成されます。
しかし、手動でクラスターを作成する場合、ロールの作成が完了する前に次の処理に進んでしまう ことがあります。
AWS ドキュメントにも以下の記述があります。
Under most circumstances, you don’t need to manually create the service-linked role. For example, when you create a new cluster, Amazon ECS creates the service-linked role for you, if it does not already exist.
つまり、AWS 側では「自動で作るから大丈夫」と言っているのですが、実際にはタイミングの問題で初回だけ失敗するケースがあります。
解決方法
答えは単純:もう一度実行するだけ
1回目の実行でサービスリンクロールが作成されているので、2回目は正常に動作します。
まとめ
今回の自分のケースでは AWSServiceRoleForECS が自動生成でなくAWS マネージドのもともと存在しているロールだと思い込んでいたことが悪く、原因特定に時間がかかりました。
ECS 初回利用時の「サービスリンクロールが見つからない」エラーは、
- 権限不足ではない
- 初回のみ発生するタイミング問題
- 再実行すれば解決
- 事前作成で予防可能
このエラーに遭遇したら、慌てずに再実行してみてください。AWS の自動処理が完了していれば、2回目は成功するはずです。


