我使用 Terragrunt 来编排非默认 AWS VPC 的创建。我有 S3/DynamoDB 状态管理,VPC 代码是一个模块。我已根据README.mdterraform.tfvars
将“VPC 环境”代码签入第二个存储库。terragrunt
我创建了第二个模块,它最终将在这个 VPC 中创建主机,但现在只是为了输出它的 ID。我terraform.tfvars
为这个模块的实例化创建了一个单独的“主机环境”/。
- 我
terragrunt apply
在 VPC 环境目录下运行 - VPC created - 我
terragrunt apply
在主机环境目录中第二次运行 - 输出指令不起作用(没有错误,但不正确,见下文)。
这是有一天terragrunt apply-all
在 VPC/hosts 环境目录的父目录中运行的前兆;我对文档的阅读建议使用terraform_remote_state
数据源来公开 VPC ID,因此我data.tf
在 hosts模块的文件中指定了这样的访问权限:
data "terraform_remote_state" "vpc" {
backend = "s3"
config {
bucket = "myBucket"
key = "keyToMy/vpcEnvironment.tfstate"
region = "stateRegion"
}
}
然后,在 hosts模块 outputs.tf
中,我指定了一个输出来检查分配:
output "mon_vpc" {
value = "${data.terraform_remote_state.vpc.id}"
}
当我在上面运行 (2) 时,它退出时:
申请完成!资源:添加 0 个,更改 0 个,销毁 0 个。
输出:
mon_vpc = 2018-06-02 23:14:42.958848954 +0000 UTC
问题:
我在设置代码时出错,以便将主机环境配置为从已经存在的 VPC(terraform 状态文件)正确获取 VPC ID - 任何关于此处更改内容的建议将不胜感激。
看起来我确实设法获得了创建 VPC 的日期而不是它的 ID,因为代码令人困惑——有人知道为什么吗?
我没有使用社区模块 - 都是手工制作的。
编辑:作为对 Brandon Miller 的回应,这里还有更多内容。在我的 VPC 模块中,我有一个 outputs.tf,其中包含其他输出:
output "aws_vpc.mv.id-op" {
value = "${aws_vpc.mv.id}"
}
并且 vpc.tf 包含
resource "aws_vpc" "mv" {
cidr_block = "${var.vpcCidr}"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "mv-vpc-${var.aws_region}"
}
}
由于这个 cfg 导致创建了一个 vpc,并且大多数参数<computed>
都是,而不是咨询不同的状态键)。
编辑 2:首先阅读所有@brendan-miller 的回答和以下评论。使用句点会导致问题,因为它会混淆 terraform(请参阅 Brendan 对以下规范格式的回答):
Error: output 'mon_vpc': unknown resource 'data.aws_vpc.mv-ds' referenced in variable data.aws_vpc.mv-ds.vpc.id