【问题标题】:CloudFormation Change Set Showing Replacement Despite no changeCloudFormation 更改集显示替换尽管没有更改
【发布时间】:2021-09-11 21:30:00
【问题描述】:

已部署 AWS::RDS::DBInstance 类型的资源。尽管我没有在模板中指定它,但数据库会自动使用标准端口 3306。这很好,符合预期。

但是,现在我想明确在模板中指定端口号,方法是添加that property:Port: "3306"

问题是,当我将它添加到模板时,CloudFormation 更改集告诉我这是一个将导致数据库替换的修改。这是变更集:

[
  {
    "resourceChange": {
      "logicalResourceId": "RDSDBInstanceA",
      "action": "Modify",
      "physicalResourceId": "awesome-db",
      "resourceType": "AWS::RDS::DBInstance",
      "replacement": "True",
      "moduleInfo": null,
      "details": [
        {
          "target": {
            "name": "Port",
            "requiresRecreation": "Always",
            "attribute": "Properties"
          },
          "causingEntity": null,
          "evaluation": "Static",
          "changeSource": "DirectModification"
        }
      ],
      "changeSetId": null,
      "scope": [
        "Properties"
      ]
    },
    "hookInvocationCount": null,
    "type": "Resource"
  }
]

预期行为

我希望 CloudFormation 说:未检测到更改。因为数据库已经在使用3306端口,所以有效没有变化。

如果它已经在使用我想要的端口,我为什么要尝试解决这个问题?

这样我就可以为 Postgres 重新使用我的 MySQL 模板,有条件地将端口号更改为标准的 5432。奇怪的是,当我在未指定端口号的情况下部署 Postgres 数据库时,它使用了 3306——这对我,因为我想要标准端口 5432。

我尝试过的事情:

  • 当它是 MySQL 部署时,通过使用 AWS::NoValue 作为 Port 属性的值,诱使 CloudFormation 认为没有变化:
Port: !If [IsMySQL, AWS::NoValue, "5432"]

结果相同。

如果这是 Terraform...

它会检查状态,看到端口已经是 3306,然后说“没有变化”。

我的问题

如何避免替换数据库,同时仍将此属性添加到模板?

【问题讨论】:

    标签: mysql postgresql amazon-web-services amazon-cloudformation infrastructure-as-code


    【解决方案1】:

    CloudFormation 不会查看已部署的资源来识别更改,它只是将当前部署的堆栈与新堆栈进行比较。因此,在这种情况下,您有一个以前不包含值的堆栈,现在正在包含它,CF 认为这是一个更改。我有点惊讶AWS::NoValue 选项不起作用。

    解决此问题的一种方法是利用堆栈导入。步骤是这样的:

    1. 通过将当前 RDS 实例的 DeletionPolicy 设置为 RETAIN 来更新当前堆栈(如果还没有的话)。
    2. 更新当前堆栈,删除 RDS 实例。 RDS 实例仍然存在,但不再受 CF 控制。
    3. 将 RDS 添加回您的模板,按照您想要的方式进行配置,然后使用 CF 中的“将资源导入堆栈”选项。这应该允许您将 RDS 实例重新添加到您的堆栈中,并按照您想要的方式进行配置。

    请记住,当您将某些内容导入堆栈 CF 时,只是假设模板中的配置与导入的资源匹配。

    【讨论】:

      猜你喜欢
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      相关资源
      最近更新 更多