如何使用一个 terraform 脚本和不同的变量值管理多个不同环境的部署
Posted
技术标签:
【中文标题】如何使用一个 terraform 脚本和不同的变量值管理多个不同环境的部署【英文标题】:How to manage deployment of several different environments with one terraform scripts and different variables values 【发布时间】:2019-08-10 22:31:36 【问题描述】:我正在使用 Terraform 在 Azure 上部署 3 层应用程序:前端、后端和数据库。它运作良好。 该应用程序是一个产品,我需要为多个客户提供多个实例。
我的问题是,我很难理解将多组值 (variables.tf) 应用于同一个脚本,以获得多个环境。
我希望有以下结构:
main.tf 客户1 变量.tf 客户2 变量.tf然后选择我是部署 customer1 还是 customer2。我阅读了有关 terraform 工作空间的信息,并开始为每位客户创建一个工作空间。但我不明白如何根据工作工作区为相同的脚本应用一组不同的值。在网上很难找到一个全面的例子,我想做的应该是 terraform 的面包和黄油。
谢谢!
【问题讨论】:
Ideal terraform workspace project structure的可能重复 链接的答案主要是解释工作空间何时有价值(动态环境,你不能/不提前知道什么将它们分开),但也链接到***.com/questions/43201497/…,它解释了如何在不使用工作区的情况下为多环境/多租户布局代码。 谢谢,我会仔细看看。我必须说官方码头缺乏具体的例子...... 【参考方案1】:您和@ydaetskcoR 都知道,工作区是一种选择。如果它不适合您的业务。您还有另一种方法,我会为您的用例推荐它。
Terragrunt 是 Terraform 的精简包装器,它提供了用于处理多个 Terraform 模块的额外工具。
所以在你的情况下,它可以很容易地用于管理不同的客户,如下结构。
└── customer1
├── prod
│ ├── app
│ │ └── terraform.tfvars
│ ├── mysql
│ │ └── terraform.tfvars
│ └── vpc
│ └── terraform.tfvars
└── stage
├── app
│ └── terraform.tfvars
├── mysql
│ └── terraform.tfvars
└── vpc
└── terraform.tfvars
└── customer2
├── prod
│ ├── app
│ │ └── terraform.tfvars
│ ├── mysql
│ │ └── terraform.tfvars
│ └── vpc
│ └── terraform.tfvars
└── stage
├── app
│ └── terraform.tfvars
├── mysql
│ └── terraform.tfvars
└── vpc
└── terraform.tfvars
【讨论】:
以上是关于如何使用一个 terraform 脚本和不同的变量值管理多个不同环境的部署的主要内容,如果未能解决你的问题,请参考以下文章
如何在脚本开始时在 terraform 中运行 null_resource