请求协助在Terraform代码中添加AWS相关变量(Size、AZ、HDD、Port)
整合Size/AZ/HDD/Port变量的Terraform AWS EC2代码
# 原有变量保留,补充类型定义与可选默认值 variable "security_group_id" { type = string description = "现有安全组ID(不想新建安全组时填写)" default = "" } variable "key" { type = string description = "EC2实例使用的密钥对名称" } variable "subnet_id" { type = string description = "实例部署的子网ID" } # 新增:实例规格(对应需求中的Size) variable "instance_size" { type = string description = "EC2实例规格,例如t2.micro、t3.small" default = "t2.micro" # 提供默认值,无需修改时可直接使用 } # 新增:可用区(对应需求中的AZ) variable "availability_zone" { type = string description = "实例所在可用区,例如us-east-1a" } # 新增:磁盘大小(对应需求中的HDD) variable "root_volume_size" { type = number description = "根磁盘大小,单位GB" default = 8 # 默认8GB,可自定义调整 } # 新增:开放端口(对应需求中的Port) variable "allowed_port" { type = number description = "安全组需开放的TCP端口,例如22(SSH)、80(HTTP)" default = 22 } # 可选逻辑:未提供现有安全组时,自动创建开放指定端口的安全组 resource "aws_security_group" "ec2_sg" { count = var.security_group_id != "" ? 0 : 1 name = "ec2-instance-sg" description = "允许指定端口的入站流量" vpc_id = element(split("-", var.subnet_id), 0) # 从子网ID自动提取VPC ID ingress { from_port = var.allowed_port to_port = var.allowed_port protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] # 允许所有IP访问,需限制范围可修改为特定CIDR } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } } # EC2实例核心配置 resource "aws_instance" "ec2" { ami = "ami-0fe0b2cf0e1f25c8a" instance_type = var.instance_size # 绑定实例规格变量 availability_zone = var.availability_zone # 绑定可用区变量 # 优先使用用户提供的安全组,无提供则使用自动创建的安全组 vpc_security_group_ids = var.security_group_id != "" ? [var.security_group_id] : [aws_security_group.ec2_sg[0].id] subnet_id = var.subnet_id key_name = var.key # 配置根磁盘参数,支持切换HDD类型 root_block_device { volume_size = var.root_volume_size # 若需真正的HDD磁盘,将gp2改为st1(吞吐量优化HDD)或sc1(冷HDD) volume_type = "gp2" } }
变量对应逻辑说明
- Size:通过
instance_size变量替换原固定的实例类型,用户可输入任意AWS支持的实例规格(如t3.large、c5.xlarge)。 - AZ:通过
availability_zone变量直接指定实例部署的可用区,绑定到EC2实例的availability_zone参数。 - HDD:通过
root_volume_size变量控制根磁盘容量,如需使用HDD存储,修改volume_type字段即可切换到对应HDD类型。 - Port:通过
allowed_port变量控制安全组开放的端口,同时兼容用户自有安全组与自动创建安全组两种场景。
使用步骤
- 将代码保存为
main.tf文件 - 执行
terraform init完成初始化 - 执行
terraform apply,按照提示输入各变量值(带默认值的项可直接回车使用默认配置)
内容的提问来源于stack exchange,提问作者Malik
相关产品推荐
相关产品推荐

