【发布时间】: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