Terraform动态填充Bedrock知识库RDS配置的field_mapping块求助
基于多团队JSON配置动态生成Bedrock知识库RDS字段映射
核心实现思路
通过Terraform的dynamic块结合外部JSON配置文件,批量生成不同团队对应的aws_bedrockagent_knowledge_base资源及RDS字段映射规则。
步骤1:定义多团队JSON配置
创建team_kb_configs.json文件,按团队划分字段映射规则:
{ "teams": [ { "team_name": "team_a", "field_mappings": [ { "field": "TITLE", "column": "document_title" }, { "field": "CONTENT", "column": "document_content" } ], "db_name": "team_a_docs_db" }, { "team_name": "team_b", "field_mappings": [ { "field": "TITLE", "column": "doc_title" }, { "field": "CONTENT", "column": "doc_body" }, { "field": "SOURCE_URI", "column": "doc_source_url" } ], "db_name": "team_b_docs_db" } ] }
步骤2:Terraform代码实现
加载JSON配置,通过for_each和dynamic块动态生成资源及字段映射:
# 加载团队配置文件 locals { team_configs = jsondecode(file("${path.module}/team_kb_configs.json")) } # 为每个团队创建独立的Bedrock知识库 resource "aws_bedrockagent_knowledge_base" "team_kbs" { for_each = { for team in local.team_configs.teams : team.team_name => team } name = "${each.value.team_name}_kb" description = "Knowledge base for ${each.value.team_name} documentation" role_arn = aws_iam_role.bedrock_kb_exec_role.arn knowledge_base_configuration { type = "RDS" rds_configuration { database_name = each.value.db_name db_instance_arn = aws_db_instance.team_dbs[each.key].arn table_name = "docs_table" schema = "public" # 动态生成RDS字段映射 dynamic "field_mapping" { for_each = each.value.field_mappings content { field = field_mapping.value.field column = field_mapping.value.column } } } } storage_configuration { type = "RDS" } }
关键说明
dynamic "field_mapping":遍历每个团队的字段映射数组,自动生成对应Terraform块,无需手动重复编写for_each:实现每个团队对应一个独立的知识库资源,便于团队间资源隔离- 字段约束:
field值必须为AWS Bedrock支持的枚举值(如TITLE、CONTENT、SOURCE_URI、METADATA),column需匹配RDS表中实际存在的列名
注意事项
- 确保关联的IAM角色具备访问目标RDS实例、表的权限
- RDS实例和对应表需提前创建完成,或通过Terraform一同管理
- 若无需按团队隔离知识库,可调整逻辑为单个知识库加载多团队映射(需结合业务场景)
内容的提问来源于stack exchange,提问作者Divya p
相关产品推荐
相关产品推荐

