Я новичок в сервисах AWS. Я пытаюсь использовать формирование облака AWS и создал шаблон. В шаблоне нет ошибок, и я могу создавать машины, используя его.
Но я добавил некоторую конфигурацию в шаблон, чтобы он устанавливал tomcat, git и другие вещи во время запуска. Но со мной этого не происходит.
Вот часть кода, который я использовал для установки tomcat:
"Resources": {
"Tomcat": {
"Type": "AWS::EC2::Instance",
"Metadata": {
"AWS::CloudFormation::Init": {
"config": {
"packages": {
"apt": {
"tomcat6": [],
"git": [],
}
}
}
}
},
Но когда я вхожу в машину, ни tomcat
ни git
были установлены!
Заранее спасибо.
Я считаю, что ваша проблема здесь в путанице с тем, что cloud-init не то же самое, что cfn-init.
cloud-init - это инструмент, запущенный как часть образов Ubuntu AWS AMI, позволяющий интерпретировать компонент пользовательских данных EC2 в метаданных экземпляра. Amazon Linux также принял этот инструмент и встроил его в свой AMI.
cfn-init является частью другого набора инструментов, называемого Сценарии помощника CloudFormation создано AWS для Amazon Linux который может читать дополнительный раздел под названием Metadata
в вашем шаблоне CloudFormation.
Итак, в обоих AMI Ubuntu и Amazon Linux предустановлены инструменты облачной инициализации для доступа к пользовательским данным, но только Amazon Linux имеет Сценарии помощника CloudFormation предустановлен например cfn-init для доступа к метаданным CloudFormation.
Однако AWS делает распространять пакеты которые вы можете использовать для чтения метаданных CloudFormation. В частности, посмотрите на это шаблон чтобы узнать, как использовать сценарий пользовательских данных cloud-init для установки python-setuptools, загрузить сценарии помощника CloudFormation, установить их с помощью easy_install и затем вызвать cfn-init.
Примечание. Существуют и другие дистрибутивы или AMI, которые могут поддерживать cloud-init или cfn-init, но здесь я рассматриваю только общие случаи.
Вам нужно вызвать cfn-init (http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-init.html) внутри свойства UserData экземпляра:
{
"Resources": {
"Tomcat": {
"Type": "AWS::EC2::Instance",
"Metadata": {
"AWS::CloudFormation::Init": {
"config": {
"packages": {
"apt": {
"tomcat6": [],
"git": []
}
}
}
}
},
"Properties": {
"UserData": {
"Fn::Base64": {
"Fn::Join": ["", [
"#!/bin/bash\n",
"/opt/aws/bin/cfn-init -s ", {
"Ref": "AWS::StackName"
},
" -r Tomcat",
" --region ", {
"Ref": "AWS::Region"
}, "\n"
]]
}
}
}
}
}
}
Свойство UserData закодировано в Base64 и позволяет указать сценарий, который должен запускаться при запуске экземпляра. Здесь вы можете вызвать cfn-init, который прочитает метаданные CloudFormation :: Init и настроит все, что там указано.
Также при создании стека CF вам может потребоваться перейти к дополнительным настройкам на второй странице (после указания параметров) и убедиться, что для параметра Откат при ошибке установлено значение «Нет». Таким образом, если скрипт cfn-init не работает по какой-либо причине, вы можете подключиться к экземпляру по ssh и проверить файл /var/log/cfn-init.log для получения дополнительной информации.
Выше правильный ответ. Но вы также должны убедиться, что вы успешно установили вспомогательные скрипты CloudFormation. Пожалуйста, следуйте за http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-helper-scripts-reference.html для получения информации об установке.
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"#!/bin/bash\n",
"export DEBIAN_FRONTEND=noninteractive\n",
"apt-get update && apt-get upgrade -y\n",
"apt-get -y install python-setuptools\n",
"easy_install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz\n",
"/usr/local/bin/cfn-init --stack ", { "Ref":"AWS::StackName" }, " --resource <REPLACE_WITH_RESOURCENAME>", " --region ", { "Ref": "AWS::Region" }, "\n",