如何使用CloudFormation在Redhat中安装aws-cfn-bootstrap / cfn-init软件包?

问题描述 投票:2回答:4

我正在尝试使用CloudFormation模板启动实例。实例已启动,但UserData部分未完全执行,因为Redhat 7 AMI中未安装cfn-init/aws-cfn-bootstrap软件包。我尝试手动安装aws-cfn-bootstrap软件包,但由于与python版本的冲突而无法安装。

这里是CloudFormation模板的UserData部分

"UserData": {
                "Fn::Base64": {
                    "Fn::Join": [
                        "\n",
                        [
                            "#!/bin/bash",
                            "set -x",
                            "",
                            "INSTANCE_ID=`/opt/aws/bin/ec2-metadata --instance-id | cut -f2 -d' '`",
                            "REGION=`/opt/aws/bin/ec2-metadata --availability-zone| cut -f2 -d' ' | sed '$s/.$//'`",
                            {
                                "Fn::Join": [
                                    "",
                                    [
                                        "AID='",
                                        {
                                            "Fn::GetAtt": [
                                                "eip",
                                                "AllocationId"
                                            ]
                                        },
                                        "'"
                                    ]
                                ]
                            },
                            "aws ec2 associate-address --region $REGION --instance-id $INSTANCE_ID --allocation-id $AID"
                        ]
                    ]
                }
            }

cloud-init.log

Nov 12 03:55:27 localhost cloud-init: Cloud-init v. 0.7.6 running 'modules:config' at Thu, 12 Nov 2015 08:55:27 +0000. Up 19.01 seconds. 
Nov 12 03:55:28 localhost cloud-init: Cloud-init v. 0.7.6 running 'modules:final' at Thu, 12 Nov 2015 08:55:27 +0000. Up 19.67 seconds. 
Nov 12 03:55:28 localhost cloud-init: ++ /opt/aws/bin/ec2-metadata --instance-id 
Nov 12 03:55:28 localhost cloud-init: /var/lib/cloud/instance/scripts/part-001: line 4: /opt/aws/bin/ec2-metadata: No such file or directory 
Nov 12 03:55:28 localhost cloud-init: ++ cut -f2 '-d ' 
Nov 12 03:55:28 localhost cloud-init: + INSTANCE_ID= 
Nov 12 03:55:28 localhost cloud-init: ++ cut -f2 '-d ' 
Nov 12 03:55:28 localhost cloud-init: ++ sed '$s/.$//' 
Nov 12 03:55:28 localhost cloud-init: ++ /opt/aws/bin/ec2-metadata --availability-zone 
Nov 12 03:55:28 localhost cloud-init: /var/lib/cloud/instance/scripts/part-001: line 5: /opt/aws/bin/ec2-metadata: No such file or directory 
Nov 12 03:55:28 localhost cloud-init: + REGION= 
Nov 12 03:55:28 localhost cloud-init: + AID=eipalloc-XXXXXX 
Nov 12 03:55:28 localhost cloud-init: + aws ec2 associate-address --region --instance-id --allocation-id eipalloc-XXXXXX 
Nov 12 03:55:28 localhost cloud-init: /var/lib/cloud/instance/scripts/part-001: line 7: aws: command not found 
Nov 12 03:55:28 localhost cloud-init: 2015-11-12 03:55:28,078 - util.py[WARNING]: Failed running /var/lib/cloud/instance/scripts/part-001 [127] 
Nov 12 03:55:28 localhost cloud-init: 2015-11-12 03:55:28,089 - cc_scripts_user.py[WARNING]: Failed to run module scripts-user (scripts in /var/lib/cloud/instance/scripts) 
Nov 12 03:55:28 localhost cloud-init: 2015-11-12 03:55:28,089 - util.py[WARNING]: Running module scripts-user (<module 'cloudinit.config.cc_scripts_user' from '/usr/lib/pyt
hon2.7/site-packages/cloudinit/config/cc_scripts_user.pyc'>) failed 
amazon-web-services redhat amazon-cloudformation cloud-init
4个回答
5
投票
这是模板中用于安装cfn-init脚本的Userdata部分:

"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -xe\n", "### This is redhat 6. It supports cloud-init but Cfn packages need to be installed unlike AWS Linux. And they are installed in a different location\n", "# First enable EPEL\n", "rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm", "\n", "# Now install Python Setuptools(easy_install) and Pip", "\n", "yum -y install python-pip", "\n", "# Now install cfn scripts", "\n", "/usr/bin/easy_install --script-dir /opt/aws/bin https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz", "\n", "# Now fix the cfn-hup script and copy to init.d location as AWS does not do it for you", "\n", "cp -f `pip show aws-cfn-bootstrap 2> /dev/null | egrep \"^Location\" | awk -F \":\" ' { print $2 }'`/init/redhat/cfn-hup /etc/init.d/", "\n", "chmod 755 /etc/init.d/cfn-hup", "\n", "chkconfig --add cfn-hup", "\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref" : "AWS::StackId" }, " --resource AppServer ", " --configsets Install ", " --region ", { "Ref" : "AWS::Region" }, "\n" ]]}}


1
投票
"UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash\n", "## Install EPEL\n", "rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm\n", "# Installing CFN-init \n", "yum -y install python-pip", "\n", "cd /use/bin", "\n", "/usr/bin/easy_install --script-dir /opt/aws/bin https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz", "\n", "cp -f `pip show aws-cfn-bootstrap 2> /dev/null | grep -i \"^Location\" | awk '{ print $2\"/init/redhat/cfn-hup\"}'` /etc/init.d/", "\n", "chmod 755 /etc/init.d/cfn-hup", "\n", "chkconfig --add cfn-hup", "\n", "## DONE \n", "# Install the files and packages from the metadata\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref": "AWS::StackName" }, " --resource appInstance1 ", " --region ", { "Ref": "AWS::Region" }, "\n", "# Start up the cfn-hup daemon to listen for changes to the Web Server metadata\n", "/opt/aws/bin/cfn-hup || error_exit 'Failed to start cfn-hup'\n", "# Signal the status from cfn-init\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref": "AWS::StackName" }, " --resource appInstance1 ", " --region ", { "Ref": "AWS::Region" }, "\n" ] ] } }

1
投票
pip以这种方式安装它(无需使用

easy_install):

pip install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz 来源:https://gist.github.com/dasgoll/d533da8a7dc9f05579e2c08ff67788ef

0
投票
RedHat 8]的示例::

UserData: Fn::Base64: !Sub | #!/bin/bash -x yum update -y yum -y install python2-pip pip2 install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz python2 /usr/bin/cfn-signal -e $? \ --stack ${AWS::StackName} \ --resource MyInstance \ --region ${AWS::Region}

MyInstance是您的CFN中实例资源的名称。
© www.soinside.com 2019 - 2024. All rights reserved.