AWS Cloudformation - Helper Scripts
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS Cloudformation - Helper Scripts相关的知识,希望对你有一定的参考价值。
前面豆子学习了在AWS Cloudformation的基本操作。现在来学习进阶一些的东西。我们可以通过模板创建对应的资源,那么问题来了,这些资源创建的顺序如何保证;在EC2里面,如果我们需要额外的安装软件,配置软件,这又如何实现?当然,我们可以通过cloud init和 AMI的user data进行设置,但是在cloudformation的模板文件里面,我们同样可以进行配置。一般说来,对于不同Resource之间的优先顺序,我们是通过depends on和 waitcondition来进行配置;对于EC2和Auto Scaling内部软件的安装和配置,我们则是通过Helper Scripts 和 Creation Policy来进行配置。下面先看看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
以上是关于AWS Cloudformation - Helper Scripts的主要内容,如果未能解决你的问题,请参考以下文章
将现有 AWS 资源整合到 CloudFormation 堆栈中
CloudFormation - 将标签应用于其他 AWS 资源
AWS CloudFormation:Cognito LambdaTrigger CustomEmailSender - 属性“AWS CloudFormation 目前不支持。”和 CDK 的使用