gpt4 book ai didi

amazon-web-services - Terraform 环境 - 如何使其干燥

转载 作者:行者123 更新时间:2023-12-04 04:24:06 26 4
gpt4 key购买 nike

我们大量使用 Terraform 进行 AWS 云配置。我们的基本 terraform 结构如下所示:

├─ modules
├── x
├── y
├─ environments
├── dev
│ ├── main.tf
│ ├── output.tf
│ └── variables.tf
└── uat
│ ├── main.tf
│ ├── output.tf
│ └── variables.tf
└── prod
├── main.tf
├── output.tf
└── variables.tf

当我们达到了拥有许多模块和许多环境的地步时,代码重复现在变得更加令人头疼,我们希望尽可能多地摆脱它。

我们目前主要关注的是 output.tf 文件 - 每次我们扩展现有模块或添加新模块时,我们都需要为其设置特定于环境的配置(这是预期的),但我们仍然必须复制/粘贴所需的部分到 output.tf 以输出配置的结果(如 IP 地址、AWS ARN 等)。

有没有办法摆脱重复的 output.tf 文件?我们是否可以在模块本身中定义所需的输出,并在为特定环境运行 terraform 时查看所有定义的输出?

最佳答案

我们构建并开源了 Terragrunt来解决这个问题。 Terragrunt 的功能之一是能够下载远程 Terraform 配置。这个想法是,您只需在一个存储库中为您的基础架构定义一次 Terraform 代码,例如,modules :

└── modules
├── app
│ └── main.tf
├── mysql
│ └── main.tf
└── vpc
└── main.tf

这个 repo 包含典型的 Terraform 代码,有一个区别:代码中任何在环境之间应该不同的东西都应该作为输入变量公开。例如,应用程序模块可能会公开以下变量:
variable "instance_count" {
description = "How many servers to run"
}

variable "instance_type" {
description = "What kind of servers to run (e.g. t2.large)"
}

在一个单独的 repo 中,例如 live,你为你的所有环境定义代码,现在它只包含一个 .tfvars。每个组件的文件(例如 app/terraform.tfvarsmysql/terraform.tfvars 等)。这为您提供了以下文件布局:
└── live
├── prod
│ ├── app
│ │ └── terraform.tfvars
│ ├── mysql
│ │ └── terraform.tfvars
│ └── vpc
│ └── terraform.tfvars
├── qa
│ ├── app
│ │ └── terraform.tfvars
│ ├── mysql
│ │ └── terraform.tfvars
│ └── vpc
│ └── terraform.tfvars
└── stage
├── app
│ └── terraform.tfvars
├── mysql
│ └── terraform.tfvars
└── vpc
└── terraform.tfvars

请注意,任何文件夹中都没有 Terraform 配置( .tf 文件)。相反,每个 .tfvars文件指定 terraform { ... } block ,指定从何处下载 Terraform 代码,以及该 Terraform 代码中输入变量的环境特定值。例如, stage/app/terraform.tfvars可能看起来像这样:
terragrunt = {
terraform {
source = "git::git@github.com:foo/modules.git//app?ref=v0.0.3"
}
}

instance_count = 3
instance_type = "t2.micro"

prod/app/terraform.tfvars可能看起来像这样:
terragrunt = {
terraform {
source = "git::git@github.com:foo/modules.git//app?ref=v0.0.1"
}
}

instance_count = 10
instance_type = "m2.large"

Terragrunt documentation了解更多信息。

关于amazon-web-services - Terraform 环境 - 如何使其干燥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49388931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com