Terraform AWS EC2模块创建多EBS卷时ebs_block_device内count失效求助
问题根因
count参数仅可用于Terraform的resource、module、data块的顶级层级,不支持在嵌套配置对象内部生效。你原配置中把count写在ebs_block_device列表的单条对象内属于无效配置,模块仅会把ebs_block_device列表中的每一个对象对应一块EBS盘,因此仅会创建1块数据盘。
修正方案
使用Terraform的for表达式直接生成包含多块盘配置的列表,传入ebs_block_device参数即可。注意for循环内使用独立的索引变量避免和外层EC2实例的count.index冲突。
修正后的完整配置示例
module "ec2_instance" { source = "terraform-aws-modules/ec2-instance/aws" version = "~> 3.0" count = var.count_ec2 name = "${var.name}${count.index + 1 }" ami = var.ami instance_type = var.instance_type key_name = var.key_name monitoring = true vpc_security_group_ids = [var.security_id] subnet_id = var.subnet_id root_block_device = [ { volume_type = var.root_drive_type volume_size = var.root_drive_size encrypted = true kms_key_id = var.kms_key } ] # 用for循环生成多块盘的配置列表 ebs_block_device = [ for idx in range(var.count_drives) : { device_name = element(var.ebs_devices_names, idx) volume_type = var.ebs_drives_type volume_size = element(var.ebs_devices_size, idx) encrypted = true delete_on_termination = false kms_key_id = var.kms_key } ] }
注意事项
- 请确保
var.ebs_devices_names和var.ebs_devices_size的列表长度大于等于var.count_drives,避免索引越界报错 - 该配置会为每台EC2实例都挂载相同配置的
var.count_drives块EBS数据盘,符合批量创建场景的通用需求
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

