我正在使用 terraform 设置一个 aws 资源,该资源依赖于具有自己状态的早期资源的输出。我正在利用 terraform 中的数据源来尝试实现此目标https://www.terraform.io/docs/language/data-sources/index.html
状态
我有两个独立的 terraform 初始化/状态。一个
networking
和一个eks
。状态存储在 s3 上,我使用工作区。
s3://myorg-terraform-state/env:/prod/networking/terraform.tfstate
s3://myorg-terraform-state/env:/prod/eks/terraform.tfstate
网络/输出.tf
我有一个输出以下内容的网络地形。
output "vpc_id" {
description = "The ID of the VPC"
value = module.vpc.vpc_id
}
output "private_subnets" {
description = "List of IDs of private subnets"
value = module.vpc.private_subnets
}
output "worker_group_mgmt_one_id" {
description = "The id of worker_group_mgmt_one"
value = aws_security_group.worker_group_mgmt_one.id
}
output "worker_group_mgmt_two_id" {
description = "The id of worker_group_mgmt_two"
value = aws_security_group.worker_group_mgmt_two.id
}
EKS 需要上述变量,因此我创建一个数据源以便能够访问它们。
eks/data.tf
data "terraform_remote_state" "networking" {
backend = "s3"
config = {
bucket = "myorg-terraform-state"
key = "networking/terraform.tfstate"
region = "eu-west-2"
}
}
eks/main.tf
然后我在
eks/main.tf
中使用此数据源
...
data.terraform_remote_state.networking.outputs.private_subnets
...
问题
但是,当我运行以下命令时,尽管状态存在于 s3 上,但我收到错误,并且在检查后我可以看到输出。
terraform workspace select prod
terraform plan -var-file=prod.tfvars
错误:无法找到远程状态
在 data.tf 第 1 行,数据“terraform_remote_state”“networking”中:
1:数据“terraform_remote_state”“网络”{在给定的工作区中找不到给定工作区的存储状态 后端。
文件夹结构
├── networking
│ ├── backend.tf
│ ├── main.tf
│ ├── output.tf
│ ├── prod.tfvars
│ ├── provider.tf
│ └── variables.tf
├── eks
│ ├── backend.tf
│ ├── data.tf
│ ├── main.tf
│ ├── output.tf
│ ├── prod.tfvars
│ ├── provider.tf
│ └── variables.tf
├── README.md
我找到了解决方案。
网络的 terraform 状态存储在以下路径中
env:/prod/networking/terraform.tfstate
您可以看到我的数据配置中缺少以下前缀。
"env:/prod"
data "terraform_remote_state" "networking" {
backend = "s3"
config = {
bucket = "myorg-terraform-state"
key = "env://${local.workspace}/networking/terraform.tfstate"
region = "eu-west-2"
}
}
防火墙设置和防病毒软件经常干扰发出网络请求的应用程序,尤其是在初始化过程中。