AWS Cloudformation Update Stack注意事项

旧街凉风 提交于 2020-05-01 18:01:24

我们通过Cloudformation创建了Stack之后,如果发生需求改变,那么需要进行修改。Update Stack的操作其实很容易,不过有几点需要注意。

  1. 进行Update操作之前,请执行stack drift的操作,以确保一致性。
  2. 进行Update操作的时候,请查阅相关的resource的属性,判断是否会导致某些服务中断
  3. 有些属性,例如EC2 的Public IP,如果没有绑定EIP,那么重启之后会变化,这些因素需要考虑
  4. 我们可以通过Stack Policy来限制对某些Resource进行修改
  5. 我们可以通过Change set来预览我们的改变。

下面通过一个例子说明

首先我们创建一个演示的LAMP 的 Cloudformation stack,他会创建一个EC2 实例和一个SG

AWS Cloudformation Update Stack注意事项

输入 Parameters 的值

AWS Cloudformation Update Stack注意事项

值得一提的是,他的Instance的Resource的名字叫做WebServerInstance,这个下一步会用到

AWS Cloudformation Update Stack注意事项

在Stack policy的设定里面,我们输入下面的Policy 。 这个Policy的目的是允许修改所有的资源,除了WebServerInstance。

AWS Cloudformation Update Stack注意事项

提交之后,我们的Stack就创建好了

AWS Cloudformation Update Stack注意事项

接下来,我们试试修改,点击 Update

AWS Cloudformation Update Stack注意事项

我们有三个选项, Use Current template 只能修改Parameters的值,后面两个可以修改整个Template

AWS Cloudformation Update Stack注意事项

作为测试,我修改了我的InstanceType 从 t2.micro 到 t2.small ( 如果我的stack policy工作的话,这里是禁止修改的,因此会导致更新失败,而回滚到原先状态)

AWS Cloudformation Update Stack注意事项

下一步,注意看他的Replacement 显示为 Conditonal

AWS Cloudformation Update Stack注意事项

这个代表的是他的Update Behavior。具体有三种

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement
AWS Cloudformation Update Stack注意事项

我们如何判断一个resource的修改是否会造成服务中断呢?一个是常识,另外我们还可以查看对应的CF的帮助文档,每一个属性都会告知 Update requires的类型是什么

AWS Cloudformation Update Stack注意事项

最后我们提交Update,等待1分钟后,发现他更新失败(意料之中)。错误提示为我的stack policy 否决了对EC2的修改
AWS Cloudformation Update Stack注意事项

最后,我们再来看看Change set。这个功能允许我们提交一个update的请求,然后可以查看对应的变化,然后才真正的提交执行。上面的例子我并没有手动的创建change set,而是直接进行的Update,即便如此,他也自动创建了一个Change Set。如果我们的改动成功了,那么这里会自动清空。因为change set是把我们的改动和初始文件进行对比,所以如果我们有多个change set,只要其中一个成功执行了,其他的change set所执向的初始文件就会自动作废了,也就是所有的change set都会清空。当然上面我们的update因为 stack policy被拒绝了,因此他默认产生的change set依然在这里

AWS Cloudformation Update Stack注意事项

点进去看看

Changes 会显示哪些resource 做了改动

AWS Cloudformation Update Stack注意事项

Input是 显示我输入的Parameter 参数

AWS Cloudformation Update Stack注意事项

Template就是当前的模板

AWS Cloudformation Update Stack注意事项

JSON change 显示具体哪些东西做了改变,以及他们可能会造成中断,他很智能的把相关的Ref 调用的资源以及影响都显示出来

AWS Cloudformation Update Stack注意事项

然后确认无误之后,就可以选择执行或者删除

AWS Cloudformation Update Stack注意事项

我再进行一次Update的操作,这次我修改了EC2 的实例,同时也修改了我的stack policy。注意 AWS不允许删除stack policy,因此如果需要移除保护,我们只能在配置文件里面设置允许所有操作。

AWS Cloudformation Update Stack注意事项

提交之后,成功执行了Update

AWS Cloudformation Update Stack注意事项

查看EC2 可以看见类型变成了t2.small, instance id,avaiable zone等等都没变化,但是public IP自动变化了,因为他没有绑定EIP,所以当实例关机,再开机之后public ip也自动变了,尽管这个并没有在我们的update的设置之中。

AWS Cloudformation Update Stack注意事项

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