1

Я хочу написать LaunchConfiguration для моего AWS-стека, используя шаблон CloudFormation. Я написал это, как показано ниже.Как создать LaunchConfiguration с использованием шаблона 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. Может ли кто-нибудь помочь мне в этом?

ответ

4

Вы пропустили несколько вещей. Во-первых, вам нужно вызвать скрипт cfn-init из UserData 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" 
]]}} 

Этот пример также использует НКС-сигнал для сигнала успеха, который оповещает группу 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

0

PUT "файлы", чтобы "загрузить" раздел, как

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

Благодарим вас за ответ @Evgeniy Kuzmin. Но это не работает для меня. Есть ли что-нибудь еще, что я должен добавить в шаблон? – sreedath

+0

Что вы видите на /var/log/cfn-init.log? –

+0

У меня нет такого файла журнала в моем экземпляре – sreedath