我们正在使用 terraform 在 AWS 中启动我们的基础设施,我们有 3 个独立的环境:Dev、Stage 和 Prod

开发:需要 - public、private1a、privatedb 和 privatedb2 子网
Stage & Prod:需要 - public、private_1a、private_1b、privatedb 和 privatedb2 子网

我有 main.tf、variables、dev.tfvars、stage.tfvars 和 prod.tfvars。我试图了解如何使用我目前用于开发环境的 main.tf 文件,并使用 .tfvars 文件创建 stage 和 prod 所需的资源。

terraform apply -var-file=dev.tfvars

terraform apply -var-file=stage.tfvars (除了其他子网之外,这还应该创建子网 private_1b)

terraform apply -var-file=prod.tfvars (除了其他子网之外,这还应该创建子网 private_1b)

如果您需要进一步说明,请告诉我。

谢谢,

最佳答案

您正在尝试做的确实是正确的方法。您还必须使用 terraform workspaces



从本质上讲,这意味着您将为您拥有的每个环境提供一个工作空间。

让我们看一些例子。

我有以下文件:

  • main.tf
  • variables.tf
  • dev.tfvars
  • production.tfvars

  • main.tf

    该文件包含 VPC 模块 9 可以是 c) 的任何资源。我们通过 var 调用变量。功能:
    module "vpc" {
      source          = "modules/vpc"
      cidr_block      = "${var.vpc_cidr_block}"
      subnets_private = "${var.vpc_subnets_private}"
      subnets_public  = "${var.vpc_subnets_public}"
    }
    

    变量.tf

    该文件包含我们所有的变量。请不要因为我们没有在此处分配 默认 ,这将确保我们 100% 确定我们正在使用 .tfvars 文件中的变量。
    variable "vpc_cidr_block" {}
    
    variable "vpc_subnets_private" {
      type = "list"
    }
    
    variable "vpc_subnets_public" {
      type = "list"
    }
    

    基本上就是这样。我们的 .tfvars 文件将如下所示:

    dev.tfvars
    vpc_cidr_block = "10.40.0.0/16"
    vpc_subnets_private = ["10.40.0.0/19", "10.40.64.0/19", "10.40.128.0/19"]
    vpc_subnets_public = ["10.40.32.0/20", "10.40.96.0/20", "10.40.160.0/20"]
    

    production.tfvars
    vpc_cidr_block = "10.30.0.0/16"
    vpc_subnets_private = ["10.30.0.0/19", "10.30.64.0/19", "10.30.128.0/19"]
    vpc_subnets_public = ["10.30.32.0/20", "10.30.96.0/20", "10.30.160.0/20"]
    

    如果我想为我的开发环境运行 terraform,这些是我将使用的命令(假设工作区已经创建,请参阅 Terraform workspace docs ):
  • 选择开发环境:terraform workspace select dev
  • 运行计划以查看更改: terraform plan -var-file=dev.tfvars -out=plan.out
  • 应用更改: terraform apply plan.out

  • 您可以根据需要将其复制到任意数量的环境中。

    关于amazon-web-services - 在 Terraform 中使用多个环境/变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51146328/

    10-11 07:24