Cod*_*165 3 amazon-s3 amazon-web-services terraform terraform-remote-state
在 AWS 中使用 Terraform (TF),在尝试使用 terraform_remote_state 调用 vpc_id 时遇到错误。我们分割了网络的不同部分,以减轻状态滑移。然而,它还需要与基础设施每个单独部分的状态文件(即 vpc、sgs、角色等的状态文件)进行交互。当我尝试从 S3 存储桶中保存的状态文件中获取 vpc_id 时,出现以下错误:
on main.tf line 78, in module "vpc_sg":
78: vpc_id = data.terraform_remote_state.vpc.vpc_id
This object has no argument, nested block, or exported attribute named
"vpc_id".
Run Code Online (Sandbox Code Playgroud)
这是我在 main.tf 文件中的 terraform_remote_state 调用:
backend = "s3"
workspace = var.workspace
config = {
bucket = "terraform-east"
key = "terraform-vpc.tfstate"
region ="us-east-1"
}
}
Run Code Online (Sandbox Code Playgroud)
这是同一个 main.tf 中的调用
// output "sg_id"
source = "git::https://url_to_sg.git/reference?
vpc_cidr = data.terraform_remote_state.vpc.vpc_cidr -- This line also doesn't work.. but same issue.
*vpc_id = data.terraform_remote_state.vpc.vpc_id* -- Here's the troublesome line.
deployment_name = "*redacted*"
workspace = var.workspace
tags = merge(
local.common_tags,
map(
"Name", "vpc_sg-${var.workspace}",
"module", "vpc_sg"
)
)
}
Run Code Online (Sandbox Code Playgroud)
这是 vpc 目录中的outputs.tf 文件:
output "vpc_id" {
value = module.vpc.vpc_id
description = "The VPC ID"
}
output "vpc_cidr" {
value = var.vpc_cidr
description = "The VPC CIDR block"
}
Run Code Online (Sandbox Code Playgroud)
这是 tf_remote_state 声明:
data "terraform_remote_state" "vpc" {
backend = "s3"
workspace = var.workspace
config = {
bucket = "correct bucket (trust me)
key = "correct key"
region = us-east-1
}
}
Run Code Online (Sandbox Code Playgroud)
最后,这是 vpc 目录中的 backend.tf 信息:
terraform {
backend "s3" {
bucket = "terraform-east"
key = "terraform-vpc.tfstate"
region ="us-east-1"
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过使用outputs.vpc_id(如上所述),不使用outputs(tf 0.12更新后需要outputs),使用outputs.vpc_id.value(因为statefile使它看起来像是这样的结构),以及使用outputs[1] .value..它给出了不同的错误,但它们都失败了。如有帮助,将不胜感激。
数据terraform_remote_state源在名为 的属性下导出远程状态的输出outputs,该属性本身是一个对象值,其中每个输出值包含一个属性。
因此,要特别引用vpc输出值,您需要编写:
data.terraform_remote_state.outputs.vpc
Run Code Online (Sandbox Code Playgroud)
vpc_id...然后从该嵌套对象获取属性vpc:
data.terraform_remote_state.outputs.vpc.vpc_id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9932 次 |
| 最近记录: |