【发布时间】:2021-03-13 02:25:19
【问题描述】:
用例
- 使用 Terraform 我想创建不同的 preprod env(例如:dev、qa、uat env.. 等等)。资源定义和模块使用相同,唯一的区别是名称前缀,因此它为每个提到的 env 创建单独的资源,但保持 VPC 对所有人通用。
Terraform 版本:v0.13.5
目录结构
├── dev
│ ├── dev.tfvars
│ ├── main.tf
│ ├── outputs.tf
│ ├── provider.tf
│ └── variables.tf
├── qa
│ ├── qa.tfvars
│ ├── main.tf
│ ├── outputs.tf
│ ├── provider.tf
│ └── variables.tf
└── preprod-common
├── main.tf
├── outputs.tf
├── provider.tf
└── variables.tf
preprod-common
main.tf
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = var.vpc_name
cidr = var.vpc_cidr
azs = var.vpc_azs
private_subnets = var.vpc_private_subnets
public_subnets = var.vpc_public_subnets
}
输出.tf
output "vpc_id" {
description = "The ID of the VPC"
value = module.vpc.vpc_id
}
开发
main.tf
module "security-group" {
source = "terraform-aws-modules/security-group/aws"
name = ${var.prefix}-${var.sg-name}
vpc_id = <vpc_id created from preprod-common>
}
前缀 - 是环境名称。这样,它会根据前缀值为每个环境创建单独的资源,例如:(dev、qa 或 uat..so on)。
qa
main.tf
module "security-group" {
source = "terraform-aws-modules/security-group/aws"
name = ${var.prefix}-${var.sg-name}
vpc_id = <vpc_id created from preprod-common>
}
等等..对于其他环境。
仅供参考 - 我已经运行了 preprod-common 配置,并且它创建了一个新的 AWS VPC。问题是,如何将 preprod-common 创建的 vpc_id 引用到 dev、qa 和其他低级环境中?
注意:- 我也知道工作空间,但这就是我想要实现的方式。
【问题讨论】:
-
您在父模板中的何处以及如何使用 child?
-
@Marcin,这是我的问题的一部分,我该如何使用它或者使用它的最佳方式是什么?抱歉,如果我之前没说清楚的话。
-
你使用它类似于使用
vpc模块:module "child-module"它的源路径。 -
是的,我做到了。那么当我导入本地子模块时,我需要再次定义 vpc_id 吗?导入模块中 vpc_id 的 value 参数是什么?
-
@Marcin,请再看一遍,我已经更新了我的问题以便更好地理解。
标签: amazon-web-services terraform terraform-provider-aws terraform0.12+ terraform-template-file