试图将AWS提供商升级到版本4,但在RDS模块中出现以下错误:
Error: Conflicting configuration arguments
│
│ with module.my-instance-mysql-eu[0].module.rds.module.db_instance.aws_db_instance.this[0],
│ on .terraform/modules/my-instance-mysql-eu.rds/modules/db_instance/main.tf line 47, in resource "aws_db_instance" "this":
│ 47: db_name = var.db_name
│
│ "db_name": conflicts with replicate_source_db
错误说明db_name
属性与replicate_source_db
属性冲突;不能同时指定两个属性,必须是其中之一。Terraform文档中也提到了这一点。
如果您正在复制现有的RDS数据库,则数据库名称将与源名称相同。如果这是一个新数据库,则根本不要设置replicate_source_db
属性。
我在engine
&engine_version
变量:
│ Error: Conflicting configuration arguments
│
│ with module.production.module.replica_app_db_production.aws_db_instance.db,
│ on modules/rds/postgres/main.tf line 36, in resource "aws_db_instance" "db":
│ 36: engine = var.engine
│
│ "engine": conflicts with replicate_source_db
╵
╷
│ Error: Conflicting configuration arguments
│
│ with module.production.module.replica_app_db_production.aws_db_instance.db,
│ on modules/rds/postgres/main.tf line 37, in resource "aws_db_instance" "db":
│ 37: engine_version = var.engine_version
│
│ "engine_version": conflicts with replicate_source_db
╵
我在这里找到了一个很好的解决方案示例:https://github.com/terraform-aws-modules/terraform-aws-rds/blob/v5.2.2/modules/db_instance/main.tf
我设法在以下条件下解决了这个问题:
# Replicas will use source metadata
username = var.replicate_source_db != null ? null : var.username
password = var.replicate_source_db != null ? null : var.password
engine = var.replicate_source_db != null ? null : var.engine
engine_version = var.replicate_source_db != null ? null : var.engine_version
如果var.replicate_source_db
不为null,则用户名/密码/engine/engine_version将设置为null(这正是我们所需要的,因为不能为复制副本指定这些变量(。如果它不是复制品,那么我们将相应地设置变量:(
您可以为db_name
参数添加相同的内容:
db_name = var.replicate_source_db != null ? null : var.db_name