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

如何不使用条件格式编写Terraform脚本部署不同环境EC2实例

实现方案

不用条件判断的话,最靠谱的做法是利用Terraform的映射(map)类型变量关联环境与实例类型,通过指定环境名直接从映射里取值,完全避开条件语句。

1. 定义环境-实例类型映射变量

在variables.tf里定义两个变量:一个指定当前部署环境,另一个是环境到实例类型的映射表:

variable "environment" {
  description = "要部署的目标环境(Production/Staging)"
  type        = string
  default     = "Staging" # 默认用预发布环境
}

variable "instance_type_map" {
  description = "各环境对应的EC2实例类型"
  type        = map(string)
  default = {
    Production = "m5.large"
    Staging    = "t2.large"
  }
}

2. 资源中直接引用映射值

在EC2实例的资源配置里,直接用当前环境作为索引从映射中获取实例类型,全程不用任何条件判断:

resource "aws_instance" "app_server" {
  ami           = "ami-0c55b159cbfafe1f0" # 替换为你实际使用的AMI ID
  instance_type = var.instance_type_map[var.environment]

  # 附加标签方便识别环境归属
  tags = {
    Name = "${var.environment}-app-server"
  }
}

3. 部署指定环境

部署时可以通过命令行参数指定环境,或者在terraform.tfvars里固定环境:

  • 命令行指定方式:
# 部署预发布环境
terraform apply -var="environment=Staging"

# 部署生产环境
terraform apply -var="environment=Production"
  • 或者在terraform.tfvars里设置默认环境:
environment = "Production"

这种方式完全依赖Terraform的原生映射特性实现,代码简洁易维护,后续新增环境只需要在映射表中添加对应关系即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:26:19