RDS的Terraform AWS提供商升级问题



试图将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

最新更新