当我使用自定义 AMI 时,AWS EMR 配置失败

AWS EMR provisioning fails when I use custom AMI

问题: 我有一个在 cloudformation 模板中定义的 EMR 集群(以及许多其他资源)。我使用 AWS rest api 来配置我的堆栈。它有效,我可以成功配置堆栈。

然后,我做了一个更改:我为我的 EMR 集群指定了一个自定义 AMI。现在,当我配置我的堆栈时,EMR 配置失败。

现在由于 EMR 配置失败,我的堆栈创建失败了。我能找到的唯一信息是控制台上的错误:null: Error provisioning instances.。深入研究每个实例,我发现主节点因错误 Status: Terminated. Last state change reason:Time out occurred during bootstrap

而失败

我为我的 EMR 集群配置了 s3 日志记录,但 s3 存储桶中没有日志。

详情:

我像这样更新了我的 cloudformation 脚本: my_stack.cfn.yaml:

rMyEmrCluster:
  Type: AWS::EMR::Cluster
  ...
  Properties:
    ...
    CustomAmiId: "ami-xxxxxx" # <-- I added this

自定义 AMI 详细信息: 我正在添加一个自定义 AMI,因为我需要加密我所有节点上的根 EBS 卷。 (这是每个 documentation 所必需的)

我创建自定义 AMI 所采取的步骤:

  1. 我启动了 AWS 用于 EMR 节点的基本 AMI:emr 5.7.0-ami-roller-27 hvm ebs(ID:ami-8a5cb8f3
  2. 我从我的 运行 实例创建了一个图像
  3. 我创建了此映像的副本,启用了 EBS 根卷加密。我使用默认的加密密钥。 (我必须从 运行 实例创建我自己的基础镜像,因为您不能从您不拥有的 AMI 创建加密副本)

我想知道这是否可能是权限问题,或者我的 AMI 在某种程度上配置错误。但是我最好先找到一些日志,以找出节点配置到底出了什么问题。

我觉得自己很蠢。我不小心使用了一个完全不相关的 AMI(一个 redhat 7 映像)作为基础映像,而不是 EMR 默认用于其节点的 AMI:emr 5.7.0-ami-roller-27 hvm ebs (ami-8a5cb8f3)

我会留下这个问题并回答,以防其他人犯同样的错误。

确保从正确的基础 AMI 创建自定义 AMI:emr 5.7.0-ami-roller-27 hvm ebs (ami-8a5cb8f3)

您提到您基于 EMR AMI 创建了自定义 AMI。但是,根据您链接的文档,您实际上应该将 AMI 基于 "the most recent EBS-backed Amazon Linux AMI"。您的自定义 AMI 不需要基于 EMR AMI,事实上我认为这样做可能会导致一些问题(虽然我自己没有尝试过)。