我正试图从AWS控制台启动AWS EMR集群,但收到以下错误:
Failed to provision ec2 instances because 'IAM Instance Profile "arn:aws:iam::553706642095:instance-profile/EMR_EC2_DefaultRole" has no associated IAM Roles
有人知道这意味着什么以及如何解决它吗?
以下是角色策略:
{
"Statement": [
{
"Action": [
"cloudwatch:*",
"dynamodb:*",
"ec2:Describe*",
"elasticmapreduce:Describe*",
"rds:Describe*",
"s3:*",
"sdb:*",
"sns:*",
"sqs:*"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
其信托政策文件为:
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
我终于解决了这个问题。这很令人困惑,因为默认情况下实例配置文件和角色使用相同的名称。完整的步骤概述如下,但您可以跳过各种步骤。
-
创建默认角色(如果出现错误,则降级到awscli 1.10.30版本)
aws emr create-default-roles
-
如果实例配置文件不存在,请创建它:
aws iam create-instance-profile --instance-profile-name EMR_EC2_DefaultRole
-
验证实例配置文件是否存在,但没有任何角色:
aws iam get-instance-profile --instance-profile-name EMR_EC2_DefaultRole
-
使用添加角色
aws iam add-role-to-instance-profile --instance-profile-name EMR_EC2_DefaultRole --role-name EMR_EC2_DefaultRole
您对EMR 只有只读权限
"elasticmapreduce:描述*",
你需要完全访问弹性地图减少,这样你就可以启动集群/终止
一旦你给了这个访问角色策略将看起来像
"elasticmapreduce:*",
我尝试了一下,使用我自己的Cloudformation堆栈,可以在没有工具的情况下让它工作。
密钥必须具有流角色的InstanceProfile,并且流和服务角色都必须作为ARN提供。
这就是我让它为我工作的原因!
希望这也能帮助其他人。
我遇到了同样的问题。我没有给出新的集群名称,而是保留了相同的默认集群名称"我的集群",并再次单击"创建集群"。它创建时没有出现此错误。