我开始使用CloudFormation进行编排/配置,我发现有两种方法可以安装软件包:
第一种方法是在userdata部分使用 bash脚本,例如:
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"\n",
[
"#!/bin/bash",
"apt-get update",
"apt-get upgrade -y",
"apt-get install apache2 -y",
"echo \"<html><body><h1>Welcome</h1>\" > /var/www/index.html",
另一种方法是使用cfn-init:
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"yum update -y aws-cfn-bootstrap\n",
"# Install the files and packages from the metadata\n",
"/opt/aws/bin/cfn-init -v ",
" --stack ", { "Ref" : "AWS::StackName" },
" --resource WebServerInstance ",
" --configsets Install ",
" --region ", { "Ref" : "AWS::Region" }, "\n"
]]}}
是否有任何理由使用 cfn-init 而不是 UserData ?
答案 0 :(得分:0)
实际上,如果在UserData或cfn-init中使用bash,则没有任何区别。 但是要使用cnf-init,您需要安装aws-cfn-bootstrap包,就像您已经完成的那样,还需要定义
"Resources": {
"MyInstance": {
"Type": "AWS::EC2::Instance",
"Metadata" : {
"AWS::CloudFormation::Init" : {
"config" : {
"packages" : {
:
},
"groups" : {
:
},
"users" : {
:
},
"sources" : {
:
},
"files" : {
:
},
"commands" : {
:
},
"services" : {
:
}
}
}
},
"Properties": {
:
}
}
}
cfn-init就像一个干净的方式完成任务而不是你需要在UserData的bash中进行yum安装,尽管你会从这两个方法得到相同的结果。