Amazon Linux上的AWS Cloudformation cloud-init在util.py中失败

时间:2015-03-10 21:22:39

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

我正在尝试在亚马逊提供的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中发现,一位用户可以通过在#!/bin/sh部分模板中使用#!/bin/sh -e -v代替UserData来解决问题,但问题是似乎没有一个明确的解决方案。

我尝试仅使用#!/bin/bash#!/bin/bash -xe并完全删除此行。我仍然继续发现这个错误。

之前有没有人遇到亚马逊提供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"
                            ]]}}

2 个答案:

答案 0 :(得分:0)

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

但后来,我意识到不会为sudo设置环境变量EC2_HOME。我在我的配置集中使用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"
                            ]]}}

答案 1 :(得分:0)

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

/var/log/cfn-init.log

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