如何使用一个 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

如何从不同的文件夹运行 terraform init?

使用 terraform 创建多个 GCP 存储桶

使用 terraform 配置 bigquery 数据集

是否可以为不同的资源重用 Terraform 模板,为变量提供不同的值?

如何从 terraform 状态设置打包程序变量