我们正在使用 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
该文件包含 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/