首页 > 解决方案 > 如何使用 Terraform 将现有 ElasticIP 分配给 VPC 中的 NAT

问题描述

我有一些列入白名单的 ElasticIP,我正尝试将它们用作我的 VPC 中 NAT 网关的 IP,用于 Lambda 函数。

我的 VPC 配置如下所示:

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"

  name = "lambda-vpc"
  cidr = "11.0.0.0/16"

  azs                 = ["ap-southeast-2b", "ap-southeast-2c"]
  private_subnets     = ["11.0.1.0/24", "11.0.2.0/24"]
  public_subnets      = ["11.0.0.0/24"]
  enable_nat_gateway  = true
  external_nat_ip_ids = ["eipalloc-03092d9e4de71d859", "eipalloc-03092d9e4de71d859"]
}

但这会导致 NAT 网关创建自己的 ElasticIP,而不是使用已列入白名单的现有 ElasticIP。

标签: amazon-web-servicesterraformamazon-vpcnat

解决方案


根据模块文档reuse_nat_ips选项应结合使用external_nat_ip_ids

reuse_nat_ips - 如果您不希望为您的 NAT 网关创建 EIP,而是通过“external_nat_ip_ids”变量传递它们,则应该为真

因此,假设您的代码中的其他所有内容都是正确的:

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"

  name = "lambda-vpc"
  cidr = "11.0.0.0/16"

  azs                 = ["ap-southeast-2b", "ap-southeast-2c"]
  private_subnets     = ["11.0.1.0/24", "11.0.2.0/24"]
  public_subnets      = ["11.0.0.0/24"]
  enable_nat_gateway  = true

  reuse_nat_ips       = true
  external_nat_ip_ids = ["eipalloc-03092d9e4de71d859", "eipalloc-03092d9e4de71d859"]
}

推荐阅读