zhlive 2020-05-19
下面先看看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。$?在shell里面代表了上一个命令的返回值,成功为真,失败为假。
这个是我们的metadata的定义,如果点开 install和configure,里面都是各种包的安装和数据库的配置。AWS 的metadata专门提供了一个键值给help script使用
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html
Install里面我们分成了3块, package , files 和 service
package 顾名思义就是安装对应的yum 包
files 则是生成一些文件,这个例子里面我们创建了一个index.php,用于生成测试网页
一个mysql 的脚本,用来创建数据库
以及cfn-hup的配置文件
service里面则是启动对应的服务
Configure部分则是执行了mysql的两条语句
Resource的最后他还有一个creationpolicy,他可以接收cfn-singal 命令发送来的信号,还可以指定多少个成功的signal才算通过。默认情况下收到一个就算pass。如果我们创建了Auto Scaling Group,指定了最小数目的实例,我们可以设置对应数目的signal(成功创建了XX个实例才算ASG成功)
这里我们使用的默认值,5分钟内收到一个cfn-signal发送的成功信号就算这个resource成功创建
CreationPolicy的相关链接
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-creationpolicy.html