( Originally posted DevOps,但该空间似乎不那么活跃。)
TL; TR:假设存在用Terraform编码的Web服务器基础结构的开发,阶段和生产环境。如何确保每个环境在具有不同SSL证书(在Azure上)的不同域上运行?
基本上,我已经学到这些ways to manage Terraform states:
,对于每个环境(开发,阶段,产品),在AWS,Azure等上都有一个专用帐户。
我还了解了专用于本地manual testing the infrastructure code的沙箱环境的重要性。我还读了一些关于role of reusable Terraform modules以及Terragrunt for working with multiple Terraform modules, and managing remote state之类的助手的信息。
我想我已经很好地理解了所有这些难题如何在代码级别上更适合使用基础架构。
我所缺少的是如何在开发,测试和生产工作流以及使用不同环境的背景下设计基础结构的详细方面。
例如,让我们考虑一个简单的基础架构,该基础架构包括:
,并使用Terraform在单个main.tf
中进行配置。 terraform apply
发挥了神奇的作用,将所有资源部署到了我的(Azure)帐户,并使Web服务器可以从example.com
访问。
我知道如何重构基础结构代码,以采用上述最佳实践来介绍开发,阶段和产品环境。
我不知道如何处理特定于环境的变量,尤其是对于网络而言。也就是说,对于每个开发,阶段和生产环境:
example.com
。大概,这些都是用某种形式的参数化处理的。
variables.tf
和.tfvars
(或具有自定义帮助脚本或Makefile的等效环境变量)文件是不错的选择吗?答案 0 :(得分:2)
在我的项目中,我将所有局部变量存储到文件local-variables.tf
中,该文件的结构类似于:
locals {
database_ip = {
staging = xxx.xxx.xxx.xxx
production = xxx.xxx.xxx.xxx
}
ssl_cert = {
staging = <staging_path>
production = <production_path
}
}
然后,您可以引用变量local.database_ip[terraform.workspace]
请注意,局部变量的每个对象的键应反映您的地形环境的名称。