繁体   English   中英

如何修复 Terraform 提供程序配置不存在

[英]How to fix Terraform Provider configuration not present

使用 Terraform v1.2.5 我正在尝试部署 AWS VPC 对等方。 但是,以下代码验证失败:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.1"
    }
  }
}

provider "aws" {
  region = "us-east-1"
}

data "aws_vpc" "accepter" {
    provider = aws.accepter
    id = "${var.accepter_vpc_id}"
}

locals {
    accepter_account_id = "${element(split(":", data.aws_vpc.accepter.arn), 4)}"
}

resource "aws_vpc_peering_connection" "requester" {
  description   = "peer_to_${var.accepter_profile}"
  vpc_id        = "{$var.requester_vpc_id}"
  peer_vpc_id   = "${data.aws_vpc.accepter.id}"
  peer_owner_id = "${local.accepter_account_id}"
}

验证此 terraform 代码时,我收到以下错误:

$ terraform validate
╷
│ Error: Provider configuration not present
│
│ To work with data.aws_vpc.accepter its original provider configuration at provider["registry.terraform.io/hashicorp/aws"].accepter is
│ required, but it has been removed. This occurs when a provider configuration is removed while objects created by that provider still exist
│ in the state. Re-add the provider configuration to destroy data.aws_vpc.accepter, after which you can remove the provider configuration
│ again.

我缺少或配置错误导致此错误的原因是什么?

您需要提供您在此处引用的别名提供程序版本:

data "aws_vpc" "accepter" {
    provider = aws.accepter # <--- missing aliased provider
    id = var.accepter_vpc_id
}

要解决此问题,您只需添加相应的别名提供程序块 [1]:

provider "aws" {
  alias  = "accepter"
  region = "us-east-1" # make sure the region is right
}

[1] https://developer.hashicorp.com/terraform/language/providers/configuration#alias-multiple-provider-configurations

由于 VPC 对等互连是“区域间”对等互连,因此我们需要 2 个 AWS 区域。 因此,实现这一点的方法是创建 AWS 提供商和 AWS 别名提供商块。

看一个例子:

 provider "aws" { region = "us-east-1" # Requester's credentials. } provider "aws" { alias = "peer" region = "us-west-2" # Accepter's credentials. }

您的资源不知道要使用哪个提供程序,您提供的那个不存在。

你有两个选择:

  1. 为提供商添加别名:
provider "aws" {
  region = "us-east-1"
  alias = "accepter"
}
  1. data "aws_vpc" "accepter"中删除行provider = aws.accepter

我想,不知何故,第一个对你来说更有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM