AWS Cloudformation在Amazon Linux AMI上使用cloud-init时出现util.py错误

4
我正在尝试在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: ''

我在这个相关的StackOverflow问题中发现,有一个用户通过在模板的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"
                            ]]}}

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

0

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

/var/log/cfn-init.log

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


0

我成功解决了这个问题。正如Max所建议的那样,我从cfn-init命令中删除了sudo。但它没有产生预期的效果。

然后,我意识到环境变量EC2_HOME不会为sudo设置。我在我的configset中做了一堆使用aws cli的事情,为了让它们工作,需要设置EC2_HOME。因此,我去掉了我的configset和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"
                            ]]}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接