如何使用Terraform合并多份JSON文件用于AWS DMS表映射配置?
Terraform 合并多份AWS DMS表映射规则文件实现方案
你可以直接通过Terraform内置函数完成规则合并,不需要额外手动整合文件或者调用外部脚本,实现步骤如下:
步骤1:定义本地变量完成文件读取与规则合并
在你的Terraform配置中添加如下locals块:
locals { # 匹配指定目录下所有JSON规则文件,可根据实际路径调整匹配规则 dms_rule_files = fileset("${path.module}/db1", "*.json") # 遍历所有文件,解析JSON后提取rules数组,扁平化合并为单个数组 merged_dms_rules = flatten([ for rule_file in local.dms_rule_files : jsondecode(file("${path.module}/db1/${rule_file}")).rules ]) # 封装为DMS要求的格式,编码为JSON字符串 dms_table_mappings = jsonencode({ rules = local.merged_dms_rules }) }
步骤2:修改DMS复制任务配置
将原来aws_dms_replication_task资源中的table_mappings参数替换为上面定义的本地变量即可:
resource "aws_dms_replication_task" "test" { migration_type = "full-load" replication_instance_arn = aws_dms_replication_instance.test-dms-replication-instance-tf.replication_instance_arn replication_task_id = "test-dms-replication-task-tf" source_endpoint_arn = aws_dms_endpoint.test-dms-source-endpoint-tf.endpoint_arn # 替换为合并后的映射配置 table_mappings = local.dms_table_mappings tags = { Name = "test" } target_endpoint_arn = aws_dms_endpoint.test-dms-target-endpoint-tf.endpoint_arn }
注意事项
- 所有规则文件中的
rule-id必须全局唯一,不可重复,否则AWS DMS会校验失败 - 如果你的规则文件存放在多个目录,可以调整
fileset的路径匹配规则,或者定义多个文件集合后合并 - 执行
terraform plan时可以输出local.dms_table_mappings的值,验证合并结果是否符合预期
内容的提问来源于stack exchange,提问作者Miantian
相关产品推荐
相关产品推荐

