Kar*_*hik 7 amazon-web-services terraform
我们使用 terraform 在 AWS 中启动我们的基础设施,我们有 3 个独立的环境:Dev、Stage 和 Prod
Dev :需要 - public、private1a、privatedb 和 privatedb2 子网 Stage & Prod :需要 - public、private_1a、private_1b、privatedb 和 privatedb2 子网
我有 main.tf、变量、dev.tfvars、stage.tfvars 和 prod.tfvars。我试图了解如何使用当前用于开发环境的 main.tf 文件,并使用 .tfvars 文件创建阶段和产品所需的资源。
terraform apply -var-file=dev.tfvars
terraform apply -var-file=stage.tfvars (除了其他子网之外,这还应该创建子网 private_1b)
terraform apply -var-file=prod.tfvars (除了其他子网之外,这还应该创建子网 private_1b)
如果您需要进一步说明,请告诉我。
谢谢,
您正在尝试做的确实是正确的方法。您还必须使用terraform 工作区。
Terraform 从名为“default”的单个工作区开始。该工作区很特别,因为它是默认工作区,而且永远无法删除。如果您从未明确使用过工作区,那么您只在“默认”工作区上工作过。
工作空间通过 terraform 工作空间命令集进行管理。要创建一个新的工作空间并切换到它,可以使用 terraformworkspacenew; 要切换环境,您可以使用 terraform Workspace select;ETC。
从本质上讲,这意味着您将拥有适合您所拥有的每个环境的工作空间。
让我们看一些例子。
我有以下文件:
主.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}"
}
Run Code Online (Sandbox Code Playgroud)
变量.tf
该文件包含我们所有的变量。请注意,我们不会在这里分配默认值,这将确保我们 100% 确定我们正在使用 .tfvars 文件中的变量。
variable "vpc_cidr_block" {}
variable "vpc_subnets_private" {
type = "list"
}
variable "vpc_subnets_public" {
type = "list"
}
Run Code Online (Sandbox Code Playgroud)
基本上就是这样。我们的 .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"]
Run Code Online (Sandbox Code Playgroud)
生产.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"]
Run Code Online (Sandbox Code Playgroud)
如果我想为我的开发环境运行 terraform,这些是我将使用的命令(假设工作区已创建,请参阅Terraform 工作区文档):
terraform workspace select dev
terraform plan -var-file=dev.tfvars -out=plan.out
terraform apply plan.out
您可以将其复制到任意数量的环境中。
归档时间: |
|
查看次数: |
11190 次 |
最近记录: |