Как создать LaunchConfiguration с помощью шаблона CloudFormation, который создает файл конфигурации?

Я хочу написать LaunchConfiguration для своего стека AWS, используя шаблон CloudFormation. Я написал это, как показано ниже.

"LaunchConfiguration": {
  "Type": "AWS::AutoScaling::LaunchConfiguration",
  "Metadata" : {
      "AWS::CloudFormation::Init" : {
          "files": {
              "/etc/test.conf": {
                  "content": { "Fn::Join": [ "", [
                                                  "user: root\n",
                                                  "password: password\n"
                  ]]},
                  "mode": "000400",
                  "user": "root",
                  "group": "root"
              }
          }
      }
  },
  "Properties": {
    "ImageId": "ami-*****",
    "InstanceType": "*****",
    "KeyName": "*****",
    "IamInstanceProfile": "*****",
    "InstanceMonitoring": "****",
    "SecurityGroups": [
      {
        "Ref": "SecurityGroup"
      }
    ]
  }
},

Файл не создается в созданных экземплярах EC2. Может ли кто-нибудь помочь мне в этом?


person sreedath    schedule 11.05.2015    source источник


Ответы (2)


Вы упускаете пару вещей. Во-первых, вам нужно вызвать скрипт cfn-init из пользовательских данных LaunchConfiguration. http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-helper-scripts-reference.html

"UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", [
  "#!/bin/bash -ve\n",

  "# Run cfn-init\n",
  "/opt/aws/bin/cfn-init -v ",
  "         --stack ", { "Ref": "AWS::StackName" },
  "         --resource LaunchConfiguration ",
  "         --region ", { "Ref" : "AWS::Region" }, "\n",

  "# Signal success\n",
  "/opt/aws/bin/cfn-signal -e $? ",
  "         --stack ", { "Ref" : "AWS::StackName" },
  "         --resource AutoScalingGroup ",
  "         --region ", { "Ref" : "AWS::Region" }, "\n"
]]}}

В этом примере также используется сигнал cfn-signal для сообщения об успехе, который уведомляет группу Auto Scaling об успешной начальной загрузке экземпляра. Чтобы использовать эту функцию, вам также потребуется добавить CreationPolicy в ресурс AutoScalingGroup. http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-creationpolicy.html

  "CreationPolicy" : {
    "ResourceSignal" : {
      "Timeout" : "PT10M",
      "Count"   : "1"
    }
  }

Наконец, вам не хватает стандартной оболочки config для ваших метаданных.

  "Metadata" : {
    "AWS::CloudFormation::Init" : {
      "config" : {
        "files": {
          "/etc/test.conf" : {
            "content" : { "Fn::Join": [ "", [
              "user: root\n",
              "password: password\n"
            ]]},
            "mode" : "000400",
            "user" : "root",
            "group" : "root"
          }
        }
      }
    }
  }

Вы можете использовать что-то другое, кроме config, но тогда вам нужно определить атрибут configSets. http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html#aws-resource-init-configsets

"AWS::CloudFormation::Init" : {
  "configSets" : {
      "default" : [
        "db-config",
        "app-config"
      ]
  },
  "db-config": {
    "files": {
      ...
    }
  },
  "app-config": {
    ...
  }
}

Дополнительные сведения см. в подробном обзоре начальной загрузки экземпляров с помощью CloudFormation. https://s3.amazonaws.com/cloudformation-examples/BoostrappingApplicationsWithAWSCloudFormation.pdf

person Jason    schedule 13.05.2015

Поместите «файлы» в раздел «загрузить» как

"Metadata" : {
      "AWS::CloudFormation::Init" : {
        "upload": {
          "files": {
              "/etc/test.conf": {
                  "content": { "Fn::Join": [ "", [
                                                  "user: root\n",
                                                  "password: password\n"
                  ]]},
                  "mode": "000400",
                  "user": "root",
                  "group": "root"
              }
          }
      }
    }
  },
person Evgeniy Kuzmin    schedule 11.05.2015
comment
Спасибо за ответ @Евгений Кузьмин. Но это не работает для меня. Есть ли что-то еще, что я должен добавить в шаблон? - person sreedath; 12.05.2015
comment
что вы видите в /var/log/cfn-init.log? - person Evgeniy Kuzmin; 12.05.2015
comment
у меня нет такого файла журнала в моем экземпляре - person sreedath; 12.05.2015