【问题标题】:Is it possible to change the Logical ID of an RDS instance in a Cloud Formation script?是否可以在 Cloud Formation 脚本中更改 RDS 实例的逻辑 ID?
【发布时间】:2018-12-18 13:41:20
【问题描述】:

我们的应用程序(开发、测试、产品等)有多个 AWS 堆栈。这些都是使用 Cloud Formation 模板创建的。在我之前的一些聪明人决定为 prod 堆栈使用与其他人不同的模板。我想合并为只有一个 Cloud Formation 模板。

我已经对两个模板进行了文件比较,唯一的区别是 RDS 实例的逻辑 ID。所以我们有这样的东西:

   "MyDbInstanceDev": {
      "Type": "AWS::RDS::DBInstance",
      "Properties": {
        "AllocatedStorage": "200",
        "CopyTagsToSnapshot" : true,
        "DBInstanceClass": "db.m3.medium",

诗句:

   "MyDbInstance": {
      "Type": "AWS::RDS::DBInstance",
      "Properties": {
        "AllocatedStorage": "200",
        "CopyTagsToSnapshot" : true,
        "DBInstanceClass": "db.m3.medium",

如果我将逻辑 ID 从“MyDbInstanceDev”更改为“MyDbInstance”,云形成认为我想删除现有 RDS 实例并在原始模板具有旧逻辑 ID 的堆栈中创建一个新实例。

有什么方法可以更改逻辑 ID 并使我的所有堆栈都具有相同的模板而不会丢失数据库?

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    没有。你不能使用 CFT 来做到这一点,因为 CFT 维护堆栈的状态(虽然你看不到它)。即使您重命名 DBInstance,如果您尝试删除堆栈,也会遇到问题。

    您可以使用 DBInstanceIdentifier 作为参数,并且每次您想要创建数据库时,您都会创建一个新的堆栈部署而不是更新堆栈。 CFT资源的Logical Id没有太大意义,除非你是auto naming的资源。

    要修复现有部署,请执行以下操作:

    • 获取已部署的数据库的快照 MyDbInstanceDev
    • 在里面添加一个名为RestoreFromDBSnapshotIdentifier的参数 MyDbInstanceCFT。
    • DBSnapshotIdentifier 属性添加到MyDbInstance 并在RestoreFromDBSnapshotIdentifier 不为空时有条件地设置它。
    • 部署。

    【讨论】:

    • 我与解决方案架构师进行了双重检查。他也是这么说的——你必须保留名称,一个选项是不公开这些名称并保持堆栈本身很小,这样你就不需要太依赖它了。
    猜你喜欢
    • 2015-01-03
    • 2010-12-26
    • 2016-02-16
    • 2020-10-07
    • 2018-09-21
    • 2018-05-20
    • 2022-09-29
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多