当配置AWS Cloudformation 的时候,我们可以把一些常用的组件单独地写成模板文件,当需要创建这些服务的时候,我们可以直接调用他们,而不需要手动的复制粘贴同样的内容到我们自己的模板文件里面。这个类似我们写一个程序,可以直接调用其他的函数一样。

调用其他的模板,主要体现在两种方式上,一个是nested stack,直接在我们的模板里面的Resource部分,指向其他的模板文件;另外一个是通过一个现有的stack 他output的结果 export, import对应的值到我们的模板文件里面。

这里我们先来看看nested stack是如何实现的。理论上可以无限制地嵌套下去,不过这个嵌套层次太多了容易出问题,因此一般两层结构就足够了

AWS Cloudformation - Nested Stack 学习笔记_第1张图片

下面看个实例说明,相关代码可以在这个github上找到

https://github.com/natonic/CloudFormation-Deep-Dive/tree/master/Labs/NestedStacks

首先我们先创建一个S3 bucket,然后上传两个json文件。这两个文件都是现成的template文件,内容几乎一致,都是创建一个S3 bucket,配置S3 Bucket Policy;唯一的区别是一个S3有deletion policy,需要retain;另外一个没有deletion policy

AWS Cloudformation - Nested Stack 学习笔记_第2张图片

然后我们创建一个Stack

AWS Cloudformation - Nested Stack 学习笔记_第3张图片

在template里面我们只创建了2个resource,分别指向我们的两个json文件

AWS Cloudformation - Nested Stack 学习笔记_第4张图片

一路Next 点下去,最后一页会要求我们确认

AWS Cloudformation - Nested Stack 学习笔记_第5张图片

稍等1分钟,我们的2个S3 Bucket就创建好了

AWS Cloudformation - Nested Stack 学习笔记_第6张图片

切换到S3看看

AWS Cloudformation - Nested Stack 学习笔记_第7张图片

接下来 我们试试删除

AWS Cloudformation - Nested Stack 学习笔记_第8张图片

删除很顺利,切换到S3,发现只有一个Bucket了

AWS Cloudformation - Nested Stack 学习笔记_第9张图片

在我们的Cloudformation 的root stack的Resource上面 我可以分别点开对应的子 stack查看,一个子stack里面的资源因为没有配置 deletion policy 直接被删了

AWS Cloudformation - Nested Stack 学习笔记_第10张图片

另外一个S3Bucket 因为配置了deletion policy所以skipped了

AWS Cloudformation - Nested Stack 学习笔记_第11张图片

实验结束。