【问题标题】:AWS Cloudformation cloud-init on Amazon Linux AMI fails in util.pyAmazon Linux AMI 上的 AWS Cloudformation cloud-init 在 util.py 中失败
【发布时间】:2015-03-26 21:23:05
【问题描述】:

我正在尝试在 Amazon 提供的 NAT AMI 中使用 userdata 脚本。 userdata 脚本永远不会开始执行,当我查看日志时,我发现

Mar 10 21:34:13 cloud-init[2290]: util.py[DEBUG]: Failed running /var/lib/cloud/instance/scripts/part-001 [1]
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/cloudinit/util.py", line 638, in runparts
subp([exe_path], capture=False, shell=True)
File "/usr/lib/python2.6/site-packages/cloudinit/util.py", line 1529, in subp
cmd=args)
ProcessExecutionError: Unexpected error while running command.
Command: ['/var/lib/cloud/instance/scripts/part-001']
Exit code: 1
Reason: -
Stdout: ''
Stderr: ''

我在这个related StackOverflow Question 中发现,一个用户可以通过在模板的UserData 部分中使用#!/bin/sh 而不是#!/bin/sh -e -v 来绕过它,但这个问题似乎没有明确的解决方案.

我尝试只使用#!/bin/bash#!/bin/bash -xe 并完全删除这条线。我仍然继续遇到该错误。

之前是否有人在使用 Amazon 提供的 NAT AMI 时遇到过这个问题,如果有,我该如何解决这个问题?

我的UserData 看起来像这样:

         "UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [
                                    "#!/bin/bash\n",
                                    "sudo yum update -y aws-cfn-bootstrap\n",

                                    "# Install the files and packages and run the commands from the metadata\n",
                                    "sudo /opt/aws/bin/cfn-init -v --access-key ", { "Ref" : "IAMUserAccessKey" }, " --secret-key ", { "Ref" : "SecretAccessKey" },  
                                    "         --stack ", { "Ref" : "AWS::StackName" },
                                    "         --resource NAT2 ",
                                    "         --configsets config ",
                                    "         --region ", { "Ref" : "AWS::Region" }, "\n"
                            ]]}}

【问题讨论】:

  • 只是一个想法,也许不要将 cfn-signal 作为 sudo 运行?它已经以 root 身份运行
  • 我尝试在没有 sudo 的情况下执行 /opt/aws/bin/cfn-init。它没有帮助。我仍然看到同样的错误

标签: linux amazon-web-services amazon-cloudformation


【解决方案1】:

我能够解决这个问题。正如 Max 所建议的,我从 cfn-init 命令中删除了 sudo。但它没有达到预期的效果。

但后来,我意识到不会为 sudo 设置环境变量 EC2_HOME。我在使用 aws cli 的配置集中做了很多事情,为了使这些工作正常,需要设置 EC2_HOME。因此,我进入并删除了我的配置集和 UserData 中的任何地方的 sudo。所以现在,我的 UserData 看起来像:

"UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [
                                    "#!/bin/bash -xe\n",
                                    "yum update -y aws-cfn-bootstrap\n",

                                    "# Install the files and packages and run the commands from the metadata\n",
                                    "/opt/aws/bin/cfn-init -v --access-key ", { "Ref" : "IAMUserAccessKey" }, " --secret-key ", { "Ref" : "SecretAccessKey" },  
                                    "         --stack ", { "Ref" : "AWS::StackName" },
                                    "         --resource NAT2 ",
                                    "         --configsets config ",
                                    "         --region ", { "Ref" : "AWS::Region" }, "\n"
                            ]]}}

【讨论】:

    【解决方案2】:

    对我来说,我试图将 Apache 用户分配给一个文件,但我们没有在此设置中使用 apache,因此该用户不存在。这引发了 CFN 错误。很难找到错误,但对于遇到此问题的任何人,我建议您在此处查看日志:

    /var/log/cfn-init.log
    

    并查找带有错误消息的回溯以帮助您进行调试。

    【讨论】:

      猜你喜欢
      • 2020-10-19
      • 1970-01-01
      • 2011-12-28
      • 2019-05-28
      • 2014-06-18
      • 2018-09-09
      • 2020-01-18
      • 2022-12-17
      • 2022-06-18
      相关资源
      最近更新 更多