AWS Cloudformation

非 Y 不嫁゛ 提交于 2020-10-04 03:19:04

前面豆子学习了在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里面的变更


他的工作流程可以如图所示

AWS Cloudformation - Helper Scripts

这样说还是比较迷糊,下面直接通过一个例子来说明

模板文件可以从这里下载,他会创建一个LAMP的EC2实例。LAMP的安装和配置都是在Template里面定义好的

https://raw.githubusercontent.com/natonic/CloudFormation-Deep-Dive/master/6-5%20Helper%20Scripts/LampStack.json

创建一个新的stack

AWS Cloudformation - Helper Scripts

输入相关信息
AWS Cloudformation - Helper Scripts

注意查看events,他明确地收到一个成功信号之后,才完成EC2的创建
AWS Cloudformation - Helper Scripts

输出结果

AWS Cloudformation - Helper Scripts

打开测试网站看看

AWS Cloudformation - Helper Scripts

下面具体的分析一下配置文件。

所有的配置都是在Resources 里面的WebServerInstance 里面进行的。

AWS Cloudformation - Helper Scripts

然后在Properties的Userdata部分,我们执行了三个操作,首先是yum update更新一下bootstrap(也就是我们的helper script),然后执行了一个cfn-init 脚本,这个脚本读取了对我们在metedata里面定义的操作 InstallAndRun;最后通过cfn-signal 发送 执行结果给waitcondition或者 creationpolicy

AWS Cloudformation - Helper Scripts

这个是我们的metadata的定义,如果点开 install和configure,里面都是各种包的安装和数据库的配置

AWS Cloudformation - Helper Scripts

在install里面还启动了 cfn-hub的daemon进程
AWS Cloudformation - Helper Scripts

最后他还有一个creationpolicy,他可以指定多少个signal才算通过。默认情况下收到一个就算pass。如果我们创建了Auto Scaling Group,指定了最小数目的实例,我们可以设置对应数目的signal(成功创建了XX个实例才算ASG成功)
这里我们使用的默认值,5分钟内收到一个cfn-signal发送的成功信号就算这个resource成功创建

AWS Cloudformation - Helper Scripts

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!