首页 文章

在Terraform中使用多个环境/变量

提问于
浏览
1

我们使用terraform在AWS内部开发我们的基础设施,我们有3个独立的环境:Dev,Stage和Prod

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

我有main.tf,变量,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以及其他子网)

如果您需要进一步说明,请与我们联系 .

谢谢,

1 回答

  • 2

    你要做的确实是正确的方法 . 您还必须使用terraform workspaces .

    Terraform以名为“default”的单个工作区开始 . 此工作空间是特殊的,因为它是默认值,也因为它永远不会被删除 . 如果您从未明确使用过工作区,那么您只能使用“默认”工作区 . 使用terraform工作空间命令集管理工作空间 . 要创建新工作区并切换到它,可以使用terraform workspace new;切换环境你可以使用terraform工作区选择;等等

    从本质上讲,这意味着您将拥有适用于您拥有的每个环境的工作区 .

    让我们看一些例子 .

    我有以下文件:

    • 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}"
    }
    

    variables.tf

    该文件包含我们所有的变量 . 请注意,我们不在此处指定 default ,这将确保我们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

    您可以根据需要为多个环境复制此项 .

相关问题