AWS EMR 集群无法启动

NSA*_*NSA 5 amazon-web-services emr amazon-iam

我正在尝试从 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
Run Code Online (Sandbox Code Playgroud)

任何人都知道这是什么意思以及如何解决它?

以下是角色策略:

{
  "Statement": [
    {
      "Action": [
        "cloudwatch:*",
        "dynamodb:*",
        "ec2:Describe*",
        "elasticmapreduce:Describe*",
        "rds:Describe*",
        "s3:*",
        "sdb:*",
        "sns:*",
        "sqs:*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

其信托政策文件为:

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

pyt*_*981 6

我终于解决了这个问题。这令人困惑,因为默认情况下实例配置文件和角色使用相同的名称。完整步骤概述如下,但您可以跳过各个步骤。

  1. 创建默认角色(如果出错,请降级到 awscli 版本 1.10.30)

    aws emr create-default-roles

  2. 如果尚不存在,则创建实例配置文件:

    aws iam create-instance-profile --instance-profile-name EMR_EC2_DefaultRole

  3. 验证实例配置文件是否存在但没有任何角色:

    aws iam get-instance-profile --instance-profile-name EMR_EC2_DefaultRole

  4. 使用以下命令添加角色:

    aws iam add-role-to-instance-profile --instance-profile-name EMR_EC2_DefaultRole --role-name EMR_EC2_DefaultRole


San*_*ane 0

您对 EMR 只有只读权限

"elasticmapreduce:描述*",

您需要授予对 Elastic MapReduce 的完全访问权限,以便可以启动集群/终止

一旦您授予此访问权限,角色策略将如下所示

“弹性映射减少:*”,