Запустите cfn-init в экземпляре ubuntu с облачной информацией (yaml)

Я пытаюсь запустить 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 установлен. Когда я выполняю команду cfn-init --stack.. внутри своего экземпляра ec2, она отлично работает, когда я жестко кодирую значения для имени стека и региона.

Как заставить работать в скрипте yaml? Кажется, он не может прочитать значения для StackName и региона.

2
0
2 452
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если вы используете !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}

If you specify template parameter names or resource logical IDs, such as ${InstanceTypeParameter}, AWS CloudFormation returns the same values as if you used the Ref intrinsic function. If you specify resource attributes, such as ${MyInstance.PublicIp}, AWS CloudFormation returns the same values as if you used the Fn::GetAtt intrinsic function.

Подробнее см. AWS - Fn :: Sub.

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

Другие вопросы по теме