Назад | Перейти на главную страницу

Почему формирование облака aws не устанавливает указанные мной пакеты?

Я новичок в сервисах 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",