terraform 使用数据源时,在给定后端中找不到给定工作区的存储状态

问题描述 投票:0回答:2

我正在使用 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
2个回答
5
投票

我找到了解决方案。

网络的 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"
    }
}

0
投票

防火墙设置和防病毒软件经常干扰发出网络请求的应用程序,尤其是在初始化过程中。

© www.soinside.com 2019 - 2024. All rights reserved.