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:再作成時の注意点
- CloudFormationまたはECSウィザードは、既存のクラスターを選択(新規作成ではなく選択)
- リージョンは必ず ap-northeast-1
- 実行ユーザーが IAM 権限(iam:PassRole, iam:CreateServiceLinkedRole)を持っていること
🧩 オプション(後で詰まらないため)
タスク実行ロール(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コンソール |