我们正在使用terraform来提升AWS中的基础架构,我们拥有3个独立的环境:开发,阶段和产品
Dev:需要-公共,private1a,privatedb和privatedb2子网 阶段和产品:需要-公共,private_1a,private_1b,privatedb和privatedb2子网
我有main.tf,变量,dev.tfvars,stage.tfvars和prod.tfvars。我试图了解如何使用当前用于开发环境的main.tf文件,以及如何使用.tfvars文件创建舞台和产品所需的资源。
terrain apply -var-file = dev.tfvars
terraform apply -var-file = stage.tfvars(除了其他子网外,这还将创建子网private_1b)
terrain apply -var-file = prod.tfvars(除了其他子网之外,这还将创建子网private_1b)
如果需要进一步说明,请告诉我。
谢谢
答案 0 :(得分:2)
您尝试做的确实是正确的方法。您还必须使用terraform workspaces。
Terraform从一个名为“默认”的工作区开始。这个 工作区之所以特别是因为它是默认工作区,还因为 它永远不能被删除。如果您从未明确使用过工作区, 那么您只曾在“默认”工作区工作过。
工作空间使用terraform工作空间命令集进行管理。 要创建一个新的工作区并切换到它,可以使用terraform 新的工作空间;切换环境,您可以使用terraform工作区 选择;等
从本质上讲,这意味着您将为每个环境都拥有一个工作区。
让我们看一些例子。
我有以下文件:
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
此文件包含我们所有的变量。请不要在这里没有分配默认,这可以确保我们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
您可以将其复制到任意多个环境。