Terraform 系列 - Terraform 项目的典型文件布局
本文最后更新于:2024年7月25日 下午
系列文章
典型文件布局
1 | |
🔥 提示:
- [ ]表示该项为可选内容- 示例如
examples/表示该项为文件夹
详细说明
顶层文件夹
用于隔离环境
modules:Terraform (可复用)模块文件夹stage:预发布 Envprod:生产 envmgmt:管理 / DevOps 环境(如:堡垒机、Jenkins 等)global:用于运行各种环境下都要共享的资源(如:Terraform backend - S3、IAM)
二级文件夹
用于环境中的组件
vpc:网络拓扑services:此环境中运行的应用环境或微服务,例如 NGINX 前端或 Java 后端。每个应用程序甚至都应该驻留在单独的文件夹中,与其他应用程序隔离data-storage:在此环境中运行的数据存储,例如 MySQL 或 Redis。每个数据存储应该驻留在它自己的文件夹中,与其他数据存储隔离。
文件
每一个组件中,都会有相应的 Terraform 的配置文件,其命名规则如下:
vars.tf: 输入变量outputs.tf: 输出变量main.tf: 资源定义user-data.sh:(可选),用户自定义脚本README.md:说明文档provider.tf:(可选),provider 信息,典型如:provider、region。不同环境,甚至同一环境的不同组件的 provider 可能不同。versions.tf:(可选),Terraform version、provider version、Terraform backend 信息。terraform.tfvars(or*.auto.tfvars): (可选),terraform plan 及 apply默认会传入该文件中的变量值main.tfvars:(可选),terraform plan 及 apply可以通过-var-file=filename来手动指定。
变量赋值
可以通过如下 3 种方式指定变量:
1 | |
-
命令行参数:
-var 'foo=bar' -
参数文件:默认读取 terraform.tfvars(or
*.auto.tfvars) 或通过命令行-var-file=filename指定 -
环境变量:可以通过设置名为
TF_VAR_<NAME>的环境变量为输入变量赋值,例如:1
2
3$ export TF_VAR_image_id=ami-abc123
$ terraform plan
...环境变量传值非常适合在自动化流水线中使用,尤其适合用来传递敏感数据,类似密码、访问密钥等
Terraform 系列 - Terraform 项目的典型文件布局
https://ewhisper.cn/posts/62564/