Terraform 模块参数传递实战:从根模块到子模块,为 Stage 与 Prod 环境部署不同 Web 服务器
如何在 Terraform 子模块与根模块之间传递参数:以 Web 服务器模块为例
在实际的基础设施管理中,经常需要为不同环境(如 stage 和 prod)创建配置相似但参数不同的资源。Terraform 模块化设计允许我们将通用逻辑封装在子模块中,并通过根模块传递环境特定的参数。本文以 webserver 模块为例,演示如何在子模块与根模块之间传递参数,并为 stage 和 prod 环境分别创建不同的 Web 服务器实例。
1. 理解参数传递机制
Terraform 中模块之间的参数传递遵循清晰的输入输出模式:
· 输入变量(Input Variables):根模块通过设置变量值,传递给子模块的 variable 块。
· 输出值(Output Values):子模块可以导出资源属性(如 IP 地址、ID),供根模块或其他模块使用。
对于多环境场景,我们通常采用独立的根模块配置目录(如 /stage 和 /prod),或者同一根模块下使用 Terraform workspaces + 环境变量文件(.tfvars)。本文采用后者:同一个根模块,通过不同的 tfvars 文件区分 stage 与 prod,并在根模块中调用同一个 webserver 子模块,传递不同的参数。
2. 项目结构
```
terraform-webserver/
├── modules/
│ └── webserver/
│ ├── main.tf
│ ├── variables.tf
│ └── outputs.tf
├── stage.tfvars
