我正在尝试从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"
}
]
}
答案 0 :(得分:4)
我终于解决了这个问题。这很令人困惑,因为实例配置文件和角色默认使用相同的名称。完整步骤概述如下,但您可以跳过各个步骤。
创建默认角色(如果错误,降级到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
答案 1 :(得分:0)
您只有EMR的读取权限
<强> “elasticmapreduce:描述*”,强>
您需要提供弹性地图缩减的完全访问权限,以便您可以启动群集/终止
一旦您授予此访问权限,策略将显示为
<强> “elasticmapreduce:*”,强>
答案 2 :(得分:0)
我试过,如果没有使用我自己的Cloudformation堆栈的工具,我可以让它工作。
必须为流角色提供InstanceProfile的密钥以及流和服务角色都必须作为ARN提供。
我是如何让它为我工作的!
希望能帮助别人。
答案 3 :(得分:0)
我遇到了同样的问题。我没有提供新的群集名称,而是保留了相同的默认群集名称&#39; My Cluster&#39;并点击“创建群集”#39;再次。它创建没有这个错误。