Azure 使用Terraform管理基础设施的特定于环境的属性

Azure 使用Terraform管理基础设施的特定于环境的属性,azure,azure-devops,terraform,devops,environment,Azure,Azure Devops,Terraform,Devops,Environment,(但这个空间似乎不那么活跃。) TL;TR:假设存在使用Terraform编码的Web服务器基础设施的开发、阶段和产品环境。如何确保每个环境在具有不同SSL证书的不同域上运行(在Azure上) 基本上,我学到了这些: 隔离通孔 通过文件布局进行隔离 对于每个环境(开发、阶段、产品),AWS、Azure等上都有一个专用帐户 我还了解了沙箱环境的重要性,并专门为本地用户提供了一个帐户。我也读过一些关于像这样的助手的文章 我想我已经很好地理解了所有这些难题是如何与基础架构(但是在代码级别)结合在一起

(但这个空间似乎不那么活跃。)

TL;TR:假设存在使用Terraform编码的Web服务器基础设施的开发、阶段和产品环境。如何确保每个环境在具有不同SSL证书的不同域上运行(在Azure上)


基本上,我学到了这些:

  • 隔离通孔
  • 通过文件布局进行隔离
  • 对于每个环境(开发、阶段、产品),AWS、Azure等上都有一个专用帐户

    我还了解了沙箱环境的重要性,并专门为本地用户提供了一个帐户。我也读过一些关于像这样的助手的文章

    我想我已经很好地理解了所有这些难题是如何与基础架构(但是在代码级别)结合在一起的

    我缺少的是如何在开发、测试和生产工作流的上下文中以及使用不同的环境来设计基础架构的详细方面

    例如,让我们考虑一个简单的基础结构,包括:

  • 单个虚拟网络(具有必要的子网等)
  • 具有(公共IP)的Web服务器
  • 数据库服务器(可从Web服务器访问专用IP)
  • 并在single
    main.tf中使用Terraform进行配置。
    terraformapply
    发挥了神奇的作用,将所有资源部署到我的(Azure)帐户,并使Web服务器可以访问
    example.com

    我知道如何重构我的基础架构代码,以引入应用上述最佳实践的开发、阶段和产品环境

    我不知道的是如何处理特定于环境的变量,尤其是在网络中。也就是说,对于每个开发、阶段和产品环境:

  • 在哪里保存各种秘密,特别是对于开发人员和舞台
  • 如何管理DNS/FQND设置?显然,所有环境不能共享相同的
    example.com
  • 如何处理SSL证书
  • 如何使用特定于开发或阶段的数据处理预加载数据库
  • 据推测,这些都是通过某种形式的参数化来处理的

    • 建议使用哪些地形技术
    • 每个环境目录下的
      variables.tf
      .tfvars
      (或具有自定义帮助程序脚本或Makefiles的等效环境变量)文件是好的选择吗

    在我的项目中,我将所有局部变量存储到一个文件
    local variables.tf
    ,其结构类似于:

    locals {
      database_ip = {
        staging = xxx.xxx.xxx.xxx
        production = xxx.xxx.xxx.xxx
    
      }
      ssl_cert = {
        staging = <staging_path>
        production = <production_path
    
      }
    }
    
    本地人{
    数据库ip={
    暂存=xxx.xxx.xxx.xxx
    生产=xxx.xxx.xxx.xxx
    }
    ssl_证书={
    分期付款=
    
    production=在我的项目中,我将所有局部变量存储到一个文件
    local variables.tf
    ,其结构类似于:

    locals {
      database_ip = {
        staging = xxx.xxx.xxx.xxx
        production = xxx.xxx.xxx.xxx
    
      }
      ssl_cert = {
        staging = <staging_path>
        production = <production_path
    
      }
    }
    
    本地人{
    数据库ip={
    暂存=xxx.xxx.xxx.xxx
    生产=xxx.xxx.xxx.xxx
    }
    ssl_证书={
    分期付款=
    
    production=就目前而言,这个问题相当广泛,没有一个具体的答案。根据个人喜好,不同用户的答案可能不同。此外,你有很多小问题,很难给出所有答案。我会尝试将问题的范围缩小到一个特定的问题r有待解决的错误。背景可能会像我想完整描述我在Terraform中所处的位置一样广泛,但问题非常具体:如何管理特定于环境的属性,如机密或域名。这都是从几个角度提出的单个问题。我不同意结束这个问题。也许吧ps Azure MVP在盲目判断问题没有重点之前,也应该学习如何理解和了解Terraform。它清楚地询问了如何管理特定于环境的属性以及在详细问题(机密、DNS、SSL)中询问的所有问题在这种情况下是特定于环境的,因此以同样的方式进行管理。我甚至给那些想回答的人一些提示。我实际上考虑过回答这个问题。但是你在最后有4个不同的问题。我可以在地形的情况下回答1和2。但是3和4我不能,因为它开始改变范围。如果你你可以编辑这个问题,以便更好地解决每个工作区切换变量的问题。我很乐意给出一种处理方法。但我的答案是针对地形和工作区的,对那些使用Terragrunt的人来说是无效的,并且超出了Azure DevOps的范围。因此,为什么我建议缩小范围。我试图概述我的推理对于最初的结束。@AndyShinn我究竟如何知道问题1和2的解决方案与问题3和4的解决方案不同?如果我知道,我可能不需要问。我猜特定于环境的机密和DNS名称可以通过
    variables.tf
    文件进行有效管理。应用此类知识的传递属性是有效的并假定SSL证书和其他证书可以进行类似的管理(通过变量到证书文件的不同路径,等等)。如果这不正确,答案可以告诉我们,澄清OP的误解,指出需要不同的解决方案。关闭只会强化鸡蛋问题。目前来看,这个问题相当广泛,不会有一个单一的具体答案。根据个人喜好,不同用户的答案可能不同。此外,你有很多很难给出所有答案的小问题。我会尝试将问题的范围缩小到一个需要解决的特定问题或错误。背景可能会呈现得非常广泛,就像我想完整描述我在Terraform中所处的位置一样,但问题非常具体:如何管理环境特定于环境的属性,如机密或域名。这都是从几个角度提出的一个问题。我不同意结束这个问题。也许是Azure MVPs sh