我尝试使用:
启动cfn-initFn::Base64: !Sub |
#!/bin/bash
sudo apt-get -y install python-setuptools
mkdir aws-cfn-bootstrap-latest
curl https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz | tar xz -C aws-cfn-bootstrap-latest --strip-components 1
sudo easy_install aws-cfn-bootstrap-latest
sudo /usr/local/bin/cfn-init --stack !Ref 'AWS::StackName' --resource xxx --region !Ref 'AWS::Region'
第一步有效。我可以访问该实例并安装了cfn-init
。当我在ec2实例中执行cfn-init --stack..
命令时,当我对stackname和region的值进行硬编码时,它可以正常工作。
如何使其在yaml
脚本中运行?它似乎无法读取StackName和region的值。
答案 0 :(得分:3)
如果您使用的是!Sub
,则需要使用${}
包裹变量,而不是使用!Ref
试试这个
Fn::Base64: !Sub |
#!/bin/bash
sudo apt-get -y install python-setuptools
mkdir aws-cfn-bootstrap-latest
curl https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz | tar xz -C aws-cfn-bootstrap-latest --strip-components 1
sudo easy_install aws-cfn-bootstrap-latest
sudo /usr/local/bin/cfn-init --stack ${AWS::StackName} --resource xxx --region ${AWS::Region}
如果指定模板参数名称或资源逻辑ID,则为 作为$ {InstanceTypeParameter},AWS CloudFormation返回相同的内容 值就像使用了Ref内部函数一样。如果你指定 资源属性,例如$ {MyInstance.PublicIp},AWS CloudFormation返回与使用Fn :: GetAtt时相同的值 内在功能。
有关详细信息,请查看AWS - Fn::Sub
答案 1 :(得分:0)
Fn::Base64: !Sub |
#!/bin/bash
sudo apt-get -y install python-setuptools
mkdir aws-cfn-bootstrap-latest
curl https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz | tar xz -C aws-cfn-bootstrap-latest --strip-components 1
sudo easy_install aws-cfn-bootstrap-latest
sudo /usr/local/bin/cfn-init --stack ${AWS::StackName} --resource xxx --region ${AWS::Region}
如果easy_install无法在ubuntu 18.04上运行,请使用以下命令:
python /usr/lib/python2.7/dist-packages/easy_install.py aws-cfn-bootstrap-latest