我正在尝试使用带有模块的Terraform在AWS中创建一个基础架构。因此我得到了两个模块,一个用于我的Nat网关,另一个用于EIP创建和关联。在我的主文件中,为了将EIP关联到NAT网关,我使用了NAT GW和EIP的两个输出属性,分别是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,但在控制台的末尾,它会显示如下错误:
“错误:关联弹性公网id时出错: InvalidNetworkInterfaceId.Malformed:无效id:”nat-0c15axxxxxxxxxxxx“(应为”eni-...“)
所以好吧,上面说我需要埃尼...NAT GW的输出而不是Allocation_id,我将输出改为返回NAT GW的网卡ID的network_interface_id,但之后我得到了另一个不同的错误:
错误:关联弹性公网EIP出错: AuthFailure:您没有访问指定资源的权限。
在这种情况下,和以前一样,它在亚马逊网络服务中创建基础架构,并将弹性公网EIP与NAT GW进行关联,完全没有问题,但在Terraform文档中查找该错误消息后,它说“不要使用network_interface将企业EIP与aws_lb或aws_nat_gateway资源关联。相反,使用这些资源中可用的allocation_id来允许亚马逊网络服务管理关联,否则您将看到AuthFailure错误。”
因此,如果我使用分配ID,它会显示预期弹性网卡ID的错误,如果使用弹性网卡ID,它会显示AuthFailure错误,在这两个场景中,都部署了整个资源,但得到了这些错误消息。
发布于 2021-01-14 00:53:08
我从这段代码中看到了什么
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
}在我的主文件中,为了将弹性公网ID关联到NAT网关,我使用了NAT网关和弹性公网ID的两个输出属性,分别是NAT ID和弹性公网ID
问题出在顺序上,您必须已有弹性公网EIP或通过创建NAT网关创建新的弹性公网EIP,或者换句话说,您不能先创建弹性公网EIP并创建NAT网关,然后再将弹性公网EIP与NAT网关关联。
这就是NAT网关创建后不能更换弹性公网EIP的原因。
创建NAT网关后,弹性IP地址将无法与NAT网关解除关联。要对您的NAT网关使用不同的弹性IP地址,您必须使用所需的地址创建一个新的NAT网关,更新您的路由表,然后删除不再需要的现有NAT网关。
要对NAT网关使用与您当前用于NAT实例相同的弹性IP地址,还必须先取消弹性IP地址与NAT实例的关联,然后在创建网关时将其与您的NAT网关关联。指定要在其中创建NAT网关的子网,并选择要与NAT网关关联的弹性IP地址的分配ID。
https://stackoverflow.com/questions/65705922
复制相似问题