Чому формація хмари Aws не встановлює вказані мною пакети?


14

Я дуже новачок у послугах AWS. Я намагаюся використовувати хмарне формування AWS, і я створив шаблон. Шаблон не містить помилок, і я можу створити машини, використовуючи це.

Але я додав деякі шаблони в шаблон, щоб він встановив tomcat, git та інші речі під час запуску. Але це не трапляється для мене.

Ось частина коду, який я використовував для встановлення tomcat:

"Resources": {
    "Tomcat": {
        "Type": "AWS::EC2::Instance",
        "Metadata": {
            "AWS::CloudFormation::Init": {
                "config": {
                    "packages": {
                        "apt": {
                            "tomcat6": [],
                            "git": [],
                        }
                    }
                }
            }
        },

Але коли я заходжу в автомат, tomcatні gitйого не встановлювали!

Заздалегідь спасибі.


З ваших тегів я припускаю, що це Ubuntu AMI?
mattdm

Ви намагалися видалити "," після "git": []? Це не синтаксично правильно.
Едвін

Відповіді:


23

Я вважаю, що ваша проблема тут - плутанина навколо того, що хмара-ініт - це не те саме, що cfn-init.

  • cloud-init - це інструмент, що запустився як частина AMI Ubuntu AWS, що дозволяє інтерпретувати компонент даних EC2 користувача мета-даних екземпляра. Amazon Linux також прийняв цей інструмент і вбудував його в свій AMI.

  • cfn-init є частиною іншого набору інструментів під назвою CloudFormation Helper Scripts, створеного AWS для Amazon Linux, який може прочитати додатковий розділ, названий Metadataу вашому шаблоні CloudFormation.

Таким чином, для AMI Ubuntu та Amazon Linux попередньо встановлено інструменти хмари-init для доступу до даних користувачів, але лише Amazon Linux попередньо встановив хелперні сценарії CloudFormation, наприклад cfn-init для доступу до метаданих CloudFormation.

Однак AWS поширює пакети, які можна використовувати для читання метаданих CloudFormation. Зокрема, погляньте на цей шаблон, як можна використовувати сценарій даних хмари-init для встановлення python-setuptools, завантажити сценарії помічників CloudFormation, встановити їх за допомогою easy_install і потім викликати cfn-init.

Примітка. Є й інші дистрибутиви чи AMI, які можуть підтримувати хмарно-ініт або cfn-init, але я лише висвітлюю тут загальні випадки.


12

Вам потрібно зателефонувати 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 Metadata та налаштує все, що там зазначено.

Також при створенні CF Stack ви можете зайти в розширені налаштування на другій сторінці (після введення параметрів) і переконайтесь, що при відхиленні помилки встановлено значення "Ні". Таким чином, якщо скрипт cfn-init не вдасться з будь-якої причини, ви можете запустити екземпляр і перевірити файл /var/log/cfn-init.log для отримання додаткової інформації.


Я думаю, що це має бути прийнятою відповіддю.
Ерік ван Бракель


-3
    "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",

4
Я не розумію ...
Pierre.Vriens
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.