はじめに
AWS ECS (Elastic Container Service) を利用していると、aws ecs update-service
コマンド実行時に ServiceNotFoundException
エラーが発生することがあります。
このエラーは、ECSのクラスターやサービスが正しく設定されていない場合に発生するものです。
本記事では、このエラーの原因と解決方法について詳しく解説します。
書こうと思ったきっかけ
AWS ECS を利用してアプリケーションのデプロイを行っていた際に、この ServiceNotFoundException
エラーに遭遇しました。
初めて見たエラーだったため、原因を特定するのに時間がかかりました。
同じ問題で悩んでいる方の助けになればと思い、記事にまとめることにしました。
ServiceNotFoundException
とは?
このエラーは、aws ecs update-service
コマンドを実行した際に、指定したECSサービスが見つからない場合に発生します。
aws ecs update-service --cluster my-cluster --service my-service --force-new-deployment
上記のようなコマンドを実行した際に、以下のエラーが表示されることがあります。
An error occurred (ServiceNotFoundException) when calling the UpdateService operation:
このエラーが発生する原因は複数あります。
エラーの主な原因と確認方法
1. クラスターが存在しない
指定したクラスターが本当に存在しているかを確認するために、以下のコマンドを実行します。
aws ecs list-clusters --region ap-northeast-1
出力に my-cluster
が含まれていない場合、クラスターが存在しないため作成する必要があります。
2. ECSサービスが存在しない
クラスター内に my-service
が存在するかを確認します。
aws ecs list-services --cluster my-cluster --region ap-northeast-1
もし my-service
がリストに含まれていない場合、サービスが作成されていないか、削除された可能性があります。
3. AWSリージョンが異なる
デフォルトのリージョンを確認するには、以下のコマンドを実行します。
aws configure list
ap-northeast-1
以外のリージョンが設定されていた場合、コマンドの --region
オプションを適切に指定する必要があります。
aws ecs update-service --cluster my-cluster --service my-service --force-new-deployment --region ap-northeast-1
4. IAM権限が不足している
AWS IAM の権限不足が原因でエラーが発生する可能性もあります。
現在のIAMユーザーを確認するには、以下のコマンドを実行します。
aws sts get-caller-identity
次に、ECS関連のポリシーが適用されているか確認します。
aws iam list-attached-user-policies --user-name your-user
ECSサービスを更新するには、以下のポリシーが必要です。
AmazonECS_FullAccess
AWSServiceRoleForECS
AmazonEC2ContainerServiceforEC2Role
ポリシーが不足している場合は、IAMコンソールから適切な権限を付与してください。
まとめ
今回の ServiceNotFoundException の原因として、ECSサービスの未作成、クラスターやリージョンの指定ミス、IAM権限不足などが考えられます。
※どんな状況でも落ち着いて、丁寧に切り分けながら確認することが大切です。
私もこのエラーで悩みましたが、適切なトラブルシューティングを行い解決できました。本記事が同じ問題に直面している方の助けになれば幸いです。