我正在使用cloudformation来部署/更新一些堆栈,包括RDS。目前我成功创建了数据库,并且我想更新端口,因为我设置了错误的端口。
阅读我遇到的文档,通过cloudformation更新它,我必须重命名堆栈以便能够更新端口,因此它只会使用新端口创建一个新的RDS实例并销毁旧的实例,这意味着我必须先创建备份,然后再恢复它。
我读到从 AWS 控制台“手动”更新端口的行为不会发生这种情况,并且不会发生数据丢失,到目前为止我还没有尝试过。
例如:
我部署的cloudformation如下:
cloudformation 模板 -> 端口 123 已部署的堆栈 -> 端口 123
我需要将其更新到端口 234
然后我的cloudformation仍然会知道端口123发生的最新部署 已部署堆栈 -> 234(通过 aws 控制台更新)
我的问题如下:在这种情况下,我可以通过 AWS 控制台更新端口,cloudformation 模板会发生什么情况?我应该更新模板以使用端口 234 还是应该将其保留为端口 123,这样它就不会尝试进行更新? (这会导致模板中的内容与实际部署的内容不一致,但我想知道是否可行)
我对所有 vpc、安全组、规则等都没有问题,它基本上只是端口。
对此有什么想法吗?
最佳答案
在 AWS 控制台(或 CLI、SDK)中手动修改 CFN 创建的资源是一种不好的做法,会导致 stack drift 。这种偏差可能会导致 future 的问题;来自docs :
Regardless, changes made outside of CloudFormation can complicate stack update or deletion operations.
专门回答你的问题:
In the case, I am able to update the port via AWS Console, what will happen with the cloudformation template?
本身不会发生任何事情。 CFN 本身不会知道 CFN 之外对您的 RDS 所做的任何更改。但您的堆栈将被视为漂移,正如 AWS 文档所写,这可能会导致问题。因此最好避免这种情况。
should I update the template to have port 234 or I should leave it with port 123 so it wont try to make an update?
是的,如果你想避免漂移。但通过 CFN 更新端口将导致数据库实例替换并导致数据丢失。因此,您必须就如何操作采取一切预防措施。最好是创建一些虚拟 RDS 数据库,并对其进行测试运行以了解更改其端口的过程和后果。
关于amazon-web-services - AWS 中使用 cloudformation 创建的手动更新堆栈将来会导致冲突吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65303349/