Terraform无法识别AWS中预先存在的子网

Terraform无法识别AWS中预先存在的子网,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我正试图建立一个EC2与弹性IP与地形。我正在尝试为新的EC2使用现有的VPC和子网。 但是Terraform无法识别现有的子网 我使用预先存在的子网,如下所示- variable "subnet_id" {} data "aws_subnet" "my-subnet" { id = "${var.subnet_id}" } 当我运行terraform plan时,我得到了这个错误- Error: InvalidSubnetID.NotFound: The subnet ID 'subn

我正试图建立一个EC2与弹性IP与地形。我正在尝试为新的EC2使用现有的VPC和子网。 但是Terraform无法识别现有的子网

我使用预先存在的子网,如下所示-

variable "subnet_id" {}

data "aws_subnet" "my-subnet" {
  id = "${var.subnet_id}"
}
当我运行terraform plan时,我得到了这个错误-

Error: InvalidSubnetID.NotFound: The subnet ID 'subnet-02xxxxxxxxxx7' does not exist
    status code: 400, request id: c4b6142b-5dfd-458c-959d-e5440b89c9fd

  on ec2.tf line 3, in data "aws_subnet" "my-subnet":
   3: data "aws_subnet" "my-subnet" {

该子网是由terraform在过去创建的。那么为什么它说它不存在呢

子网最初是否由Terraform创建并不重要。 数据源正试图在当前状态文件中查找子网。plan命令返回错误,因为子网不在状态文件中

尝试导入子网,然后重新运行计划

$ terraform import aws_subnet.public_subnet subnet-02xxxxxxxxxx7
建议调试:

创建2个新的地形文件:

第一个文件,创建一个简单的子网(或VPC,然后是子网)

第二个文件,尝试检索您发布的子网id

这里的想法是不改变任何其他东西,意思是,相同的地区,相同的信念,相同的一切

可能的产出:

1) 您无法获取子网ID-然后您应该查看地形版本、提供商版本之类的东西


2) 您获得了子网ID,这意味着您的creds、region、名称的复制和粘贴中存在某些内容,基本上是人为错误导致了这种封锁,您应该重新审视您在拼写错误和权限方面如何处理emphysis。

您能在AWS控制台中查看该子网ID是否存在吗?如果有,您如何使用AWS进行身份验证?你扮演一个角色吗?如果是,该角色是否可以访问您的专有网络资源?是,AWS中存在子网。我正在使用管理员角色运行terraform脚本。它可以访问所有资源。您正在查找正确的AWS帐户和区域?如果您包括
aws_region
aws_caller_identity
数据源并输出它们的值,您看到了期望值吗?如果此子网过去是由Terraform创建的,那么为什么不使用存储在状态中的输出?@MattSchuchard-我如何使用存储在状态中的输出?tfstate存储在项目目录中,但如何使用它?当我尝试导入时,会出现此错误-错误:配置中不存在资源地址“aws\u subnet.public\u subnet”。导入此资源之前,请在根模块中创建其配置。例如:资源“aws#u subnet”“public#u subnet”{(资源参数)}@MikeCharles这是错误的。
aws\u子网
数据源查看aws帐户和区域中的所有子网,无论Terraform是否创建了这些子网。唯一关心地形状态的数据源是。