You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform中为整数类型变量使用for_each?

Terraform 用数字变量创建指定数量RDS副本的问题

我在Terraform中写了这段代码,想通过整数变量创建对应数量的RDS只读副本:

resource "aws_db_instance" "replica_rds_instance" {
  for_each = var.rds_number_of_replicas // 该变量必须保持整数类型
  // 其他配置项
}

运行时直接报错:

给定的"for_each"参数值不适用:"for_each"参数必须是映射或字符串集合,而你提供的是数字类型的值。

我尝试用toset(range(var.rds_number_of_replicas))转换,结果又触发新错误:

给定的"for_each"参数值不适用:"for_each"支持映射和字符串集合,但你提供的集合包含数字类型元素。

解决办法

Terraform的for_each仅支持字符串集合或映射类型,所以需要把range生成的数字序列转成字符串集合。可以通过列表推导式将每个数字转为字符串,再转成集合:

修改后的代码示例:

resource "aws_db_instance" "replica_rds_instance" {
  for_each = toset([for n in range(var.rds_number_of_replicas) : tostring(n)])
  
  // 示例:用each.key给每个副本添加唯一标识后缀
  identifier = "my-db-replica-${each.key}"
  
  // 其他必要配置示例
  source_db_instance_identifier = aws_db_instance.primary.id
  engine                        = "mysql"
  // ... 其他必填参数
}

如果想要更具可读性的键名,也可以构造映射,直接用副本名称作为键:

resource "aws_db_instance" "replica_rds_instance" {
  for_each = { for idx in range(var.rds_number_of_replicas) : 
               "replica-${tostring(idx+1)}" => idx }
  
  identifier = each.key
  // 其他配置项...
}

这样既保留了变量的整数类型,又完全符合for_each的参数要求,能正常创建指定数量的RDS副本。

内容的提问来源于stack exchange,提问作者Edgar Peixoto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:52:19