如何解决在 CloudFormation 中在 EC2 实例上包含元数据时出现的问题?

2 分钟阅读
0

在 AWS CloudFormation 中,我使用 AWS::CloudFormation::Init 在 Amazon Elastic Cloud Compute (Amazon EC2) 实例上包含元数据。但是,我在实例上看不到变化。

解决方法

先决条件:将 CloudFormation 堆栈的失败时回滚选项设置为

如果将失败时回滚设置为仍无法在 EC2 实例上包含元数据,请执行以下操作。

**注意:**以下解决方法步骤适用于使用 Linux 实例创建的 CloudFormation 堆栈。

验证 cfn-init 帮助程序脚本是否已安装

要确认您已经配置为向 CloudFormation 资源发送信号的实例上安装了 cfn-init,请完成以下步骤:

  1. 使用 SSH 连接到实例
  2. 验证在您的目录中是否安装 cfn-initaws-cfn-bootstrap 软件包。
    要检查是否安装 cfn-init,请运行以下命令:
    sudo find / -name cfn-init/opt/aws/bin/cfn-init
    /opt/aws/apitools/cfn-init
    /opt/aws/apitools/cfn-init-1.4-34.24.amzn1/bin/cfn-init
    /var/lib/cfn-init
    要检查是否安装 aws-cfn-bootstrap 软件包,请运行以下命令:
    sudo rpm -q aws-cfn-bootstrapaws-cfn-bootstrap-1.4-34.24.amzn1.noarch
    **注意:**前面的命令仅适用于使用 RPM 包管理器的发行版。

默认情况下,CloudFormation 帮助程序脚本安装在 Amazon Linux 亚马逊机器映像(AMI)上。

验证该实例是否已连接到互联网

如果实例位于 Amazon Virtual Private Cloud (Amazon VPC) 中,则该实例可以通过以下方法连接到互联网:

  • 私有子网中的 NAT 设备
  • 公有子网中的互联网网关

要测试实例的互联网连接,请打开亚马逊云科技主页等公共网页。然后,在实例上运行 curl 命令。示例:

curl -I https://aws.amazon.com

如果该实例已连接到互联网,则该命令会返回 HTTP 200 状态码。

如果您使用接口 VPC 端点,则该端点必须与实例位于同一 AWS 区域。此外,连接到接口端点的安全组必须允许端口 443 上来自 Amazon VPC 私有子网的传入连接。

在 cloud-init 或 cfn-init 日志中搜索错误

要在 cloud-init 日志或 cfn-init 日志中搜索语法错误或不正确的值,请完成以下步骤:

  1. 使用 SSH 连接到您的实例
  2. 要查找详细的错误消息,请在以下日志中搜索错误失败关键字:
    /var/log/cloud-init-output.log **
    /var/log/cloud-init.log **
    /var/log/cfn-init.log **
    /var/log/cfn-init-cmd.log **
    要查找 /var/log/cfn/var/log/cloud-init 文件中所有带有
    错误
    失败
    字样的记录,请运行以下命令:
    grep -ni 'error\|failure' $(sudo find /var/log -name cfn-init\* -or -name cloud-init\*)
    **注意:**前面的命令返回文件名、行号和错误消息。
  3. 参考详细的错误消息排除错误,然后更新堆栈

如果 cfn-init.log 不存在,则 CloudFormation 模板不会运行 cfn-init

要确认您已将 UserData 属性配置为运行 cfn-init,请完成以下步骤:

  1. 在代码编辑器中,打开堆栈的 CloudFormation 模板。
  2. UserData 下,检查语法错误、缺少空格、拼写错误和其他拼写错误等错误。
  3. 确认堆栈、资源和区域属性的值正确无误。
  4. 对于 UserData 属性的 Fn::Join 内置函数,使用 -v 在详细模式下运行 cfn-init。有关输出示例,请参见示例

相关信息

CloudFormation VPC 端点的考虑因素

AWS::CloudFormation::Init

如何解决 AWS CloudFormation 中的“Failed to receive X resource signal(s) within the specified duration”错误?

AWS 官方
AWS 官方已更新 7 个月前