当我尝试创建一个 Amazon EMR 集群时,我收到了下面的一种错误消息:
"EMR_DefaultRole is invalid"
"EMR_EC2_DefaultRole is invalid"
简短描述
这些错误通常会在您编辑附加到 Amazon EMR 默认角色的一个或多个 AWS Identity and Access Management (IAM) 策略时发生。要排查问题,请将修改后的角色与原始版本(AmazonElasticMapReduceRole 或 AmazonElasticMapReduceforEC2Role)进行比较。
如果无法找到问题的根源,请删除并重新创建角色。
解决方法
将修改后的角色与原始版本进行比较
如果您向 IAM 角色 EMR_DefaultRole 或 EMR_EC2_DefaultRole 添加了策略,请查看您所做的更改。请将修改后的角色版本与原始版本(AmazonElasticMapReduceRole 或 AmazonElasticMapReduceforEC2Role)进行比较。如果您无法确定导致问题的原因,请删除角色和实例配置文件,详见以下部分的解释。
删除并重新创建角色和实例配置文件
在开始之前,请注意以下事项:
- 确保没有任何使用您要删除的角色或实例配置文件的 EC2 实例正在运行。如果删除与正在运行的实例关联的角色或实例配置文件,会中断正在实例上运行的应用程序。
- 以下步骤会将 EMR_DefaultRole 和 EMR_EC2_DefaultRole 重置为原始配置。如果您自定义了附加到这些角色的 IAM 策略,那么这些更改将会丢失。
AWS 管理控制台
1. 使用 IAM 控制台删除角色。IAM 会自动删除与角色关联的实例配置文件和策略。
2. 打开 Amazon EMR 控制台。
3. 创建一个 EMR 集群。对于 Permissions(权限),选择 Default(默认)。Amazon EMR 在启动集群时会创建默认角色。这些角色可用于您稍后启动的任何集群。
AWS 命令行界面 (AWS CLI)
注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
1. 从实例配置文件中移除 EMR_EC2_DefaultRole:
aws iam remove-role-from-instance-profile --instance-profile-name EMR_EC2_DefaultRole --role-name EMR_EC2_DefaultRole
2. 删除实例配置文件:
aws iam delete-instance-profile --instance-profile-name EMR_EC2_DefaultRole
3. 移除与 EMR_EC2_DefaultRole 关联的 IAM 策略:
aws iam detach-role-policy --role-name EMR_EC2_DefaultRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceforEC2Role
4. 删除 EMR_EC2_DefaultRole:
aws iam delete-role --role-name EMR_EC2_DefaultRole
5. 移除与 EMR_DefaultRole 关联的 IAM 策略:
aws iam detach-role-policy --role-name EMR_DefaultRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceRole
6. 删除 EMR_DefaultRole:
aws iam delete-role --role-name EMR_DefaultRole
7. 重新创建默认角色:
aws emr create-default-roles
8. 启动新的 EMR 集群。
相关信息
为 IAM 服务角色配置访问亚马逊云科技服务和资源所需的 Amazon EMR 权限