使用cloudformation(yaml)在Ubuntu实例中启动cfn-init

时间:2018-04-11 09:41:11

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

我尝试使用:

启动cfn-init
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 !Ref 'AWS::StackName' --resource xxx --region !Ref 'AWS::Region'

第一步有效。我可以访问该实例并安装了cfn-init。当我在ec2实例中执行cfn-init --stack..命令时,当我对stackname和region的值进行硬编码时,它可以正常工作。

如何使其在yaml脚本中运行?它似乎无法读取StackName和region的值。

2 个答案:

答案 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