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

请求协助在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变量控制安全组开放的端口,同时兼容用户自有安全组与自动创建安全组两种场景。

使用步骤

  1. 将代码保存为main.tf文件
  2. 执行terraform init完成初始化
  3. 执行terraform apply,按照提示输入各变量值(带默认值的项可直接回车使用默认配置)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:40:29