AWS Cloudformation - Helper Scripts
下面先看看helper script。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-helper-scripts-reference.html
Helper script 简单的说,就是一些预配置好的Python脚本,可以在template里面直接调用。 他们有4个脚本。
cfn-init: 获取我们在metadata里面配置的信息,安装包,创建文件,启动服务
cfn-signal: 当 cfn-init的资源或者程序准备就绪的时候,发送信号给creationpolicy 或者 waitcondition,
cfn-get-metadata: 获取我们的metadata等信息
cfn-hup: 一个守护进程,时时刻刻查看metadata里面的变更
他的工作流程可以如图所示
这样说还是比较迷糊,下面直接通过一个例子来说明
模板文件可以从这里下载,他会创建一个LAMP的EC2实例。LAMP的安装和配置都是在Template里面定义好的
创建一个新的stack
输入相关信息
注意查看events,他明确地收到一个成功信号之后,才完成EC2的创建
输出结果
打开测试网站看看
下面具体的分析一下配置文件。
所有的配置都是在Resources 里面的WebServerInstance 里面进行的。
然后在Properties的Userdata部分,我们执行了三个操作,首先是yum update更新一下bootstrap(也就是我们的helper script),然后执行了一个cfn-init 脚本,这个脚本读取了对我们在metedata里面定义的操作 InstallAndRun;最后通过cfn-signal 发送 执行结果给waitcondition或者 creationpolicy
这个是我们的metadata的定义,如果点开 install和configure,里面都是各种包的安装和数据库的配置
在install里面还启动了 cfn-hub的daemon进程
最后他还有一个creationpolicy,他可以指定多少个signal才算通过。默认情况下收到一个就算pass。如果我们创建了Auto Scaling Group,指定了最小数目的实例,我们可以设置对应数目的signal(成功创建了XX个实例才算ASG成功)
这里我们使用的默认值,5分钟内收到一个cfn-signal发送的成功信号就算这个resource成功创建