AWS_5回目のエラー対応


🧭 CloudShellでのECSクラスター作成エラー修正ガイド

⚠️エラー内容(共通)

Unable to assume the service linked role. Please verify that the ECS service linked role exists.

= ECS が必要とする「サービスリンクロール(AWSServiceRoleForECS)」が壊れている or 使えない。


✅ 手順1:リージョンを東京(ap-northeast-1)に設定

CloudShell右上を確認して、リージョンが ap-northeast-1(東京) であることを確認。

CLIで確認するなら:

aws configure get region

必要なら:

aws configure set region ap-northeast-1

✅ 手順2:ロールの存在確認

aws iam get-role --role-name AWSServiceRoleForECS

出力例:

{
  "Role": {
    "Path": "/aws-service-role/ecs.amazonaws.com/",
    "RoleName": "AWSServiceRoleForECS",
    "AssumeRolePolicyDocument": {
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": { "Service": "ecs.amazonaws.com" },
          "Action": "sts:AssumeRole"
        }
      ]
    }
  }
}

もし「An error occurred (NoSuchEntity)」と出たら、次のコマンドで作成:

aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

✅ 手順3:付与ポリシー確認

aws iam list-attached-role-policies --role-name AWSServiceRoleForECS

出力に

"PolicyName": "AmazonECSServiceRolePolicy"

が含まれていればOK。

もし空なら、付与する:

aws iam attach-role-policy \
  --role-name AWSServiceRoleForECS \
  --policy-arn arn:aws:iam::aws:policy/aws-service-role/AmazonECSServiceRolePolicy

✅ 手順4:信頼ポリシー確認(壊れてないか)

aws iam get-role --role-name AWSServiceRoleForECS \
  --query 'Role.AssumeRolePolicyDocument.Statement'

期待される内容:

[
  {
    "Effect": "Allow",
    "Principal": { "Service": "ecs.amazonaws.com" },
    "Action": "sts:AssumeRole"
  }
]

もし違っていたら(空・別サービスなど)、削除→再作成:

# 削除
DEL_TASK_ID=$(aws iam delete-service-linked-role --role-name AWSServiceRoleForECS \
  --query DeletionTaskId --output text)

# 削除完了待ち(数回繰り返すと"SUCCEEDED"になる)
aws iam get-service-linked-role-deletion-status --deletion-task-id "$DEL_TASK_ID"

# 再作成
aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

✅ 手順5:ECSクラスターの手動作成テスト

CloudFormationで再試行する前に、CLIで直接確認:

aws --region ap-northeast-1 ecs create-cluster --cluster-name ecs-cluster-学籍番号

成功すれば、次のような出力が出ます👇

{
  "cluster": {
    "clusterName": "ecs-cluster-24cc0218",
    "status": "ACTIVE"
  }
}

✅ 手順6:CloudFormationの失敗スタック削除

aws --region ap-northeast-1 cloudformation list-stacks \
  --stack-status-filter CREATE_FAILED ROLLBACK_COMPLETE ROLLBACK_FAILED \
  --query 'StackSummaries[].StackName' --output table

出てきたスタック名を削除:

aws --region ap-northeast-1 cloudformation delete-stack --stack-name <スタック名>

✅ 手順7:再作成時の注意点


🧩 オプション(後で詰まらないため)

タスク実行ロール(ECRやログ用)もCloudShellで作っておく:

aws iam create-role \
  --role-name ecsTaskExecutionRole \
  --assume-role-policy-document '{
    "Version":"2012-10-17",
    "Statement":[{"Effect":"Allow","Principal":{"Service":"ecs-tasks.amazonaws.com"},"Action":"sts:AssumeRole"}]
  }'

aws iam attach-role-policy \
  --role-name ecsTaskExecutionRole \
  --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

✅ まとめ

ステップ内容コマンド例
1リージョン確認aws configure get region
2ロール確認/作成aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
3ポリシー確認aws iam list-attached-role-policies --role-name AWSServiceRoleForECS
4信頼ポリシー確認aws iam get-role --role-name AWSServiceRoleForECS
5クラスター作成テストaws ecs create-cluster --cluster-name ecs-cluster-24cc0218
6失敗スタック削除aws cloudformation delete-stack --stack-name <name>
7再作成CloudFormation or ECSコンソール