【发布时间】:2021-04-18 16:50:10
【问题描述】:
我正在尝试使用带有模块的 Terraform 在 AWS 中创建基础设施。所以我得到了 2 个模块,一个用于我的 Nat 网关,一个用于 EIP 创建和关联。在我的主文件中,为了将 EIP 关联到 NAT 网关,我使用了 NAT GW 和 EIP 的 2 个输出属性,即 NAT 的 ID 和 EIP ID,如下所示:
module "eip_assoc" {
source = "../Modules/eip_assoc"
nat_gw_qa = module.NAT_GW.aws_nat_gateway_id_output
nat_gw_association = module.EIP.eip_one_id_output
}
基础设施的其余部分一切正常,当我应用主文件时,它会在 AWS 中创建资源并将 EIP 与 NAT GW 关联,但在控制台结束时会显示如下错误:
“Error: Error associating EIP: InvalidNetworkInterfaceId.Malformed: Invalid id: "nat-0c15axxxxxxxxxx" (expecting "eni-...")"
好吧,它说我需要来自 NAT GW 的 eni-... 输出而不是 Allocation_id,我将输出更改为返回 NAT GW 的 ENI ID 的 network_interface_id,但之后我得到了另一个不同的错误:
错误:关联 EIP 时出错:AuthFailure:您无权访问指定资源。
在这种情况下,与以前一样,它在 AWS 中创建基础设施,并将 EIP 与 NAT GW 关联起来完全没有问题,但在 Terraform 文档中查找该错误消息后,它显示“不要使用 network_interface 将 EIP 关联到 aws_lb 或 aws_nat_gateway 资源。而是使用这些资源中可用的 allocation_id 来允许 AWS 管理关联,否则您将看到 AuthFailure 错误。"
因此,如果我使用分配 ID,它会显示预期 ENI ID 的错误,如果使用 ENI ID,它会显示 AuthFailure 错误,在这两种情况下都会部署整个资源,但会收到这些错误消息。
【问题讨论】:
-
我认为 NAT GW 没有 ENI。您只需要创建 EIP,然后将其指向 NatGW 中的 allocation_id,如下所示:allocation_id = element(aws_eip.eip_ngw.*.id, count.index)
标签: amazon-web-services terraform amazon-vpc terraform-provider-aws