如何不使用条件格式编写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
相关产品推荐
相关产品推荐

