使用 Lambda 函数、Amazon VPC 和无服务器架构生成静态出站 IP 地址 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Lambda 函数、Amazon VPC 和无服务器架构生成静态出站 IP 地址

由 Thomas Scott (AWS) 创作

环境:生产

技术:容器和微服务;软件开发和测试

AWS 服务:AWS Lambda

使用 Lambda 和 Amazon VPC 生成静态出站 IP 地址的摘要

此模式描述了如何使用无服务器架构在 Amazon Web Services (AWS) 云中生成静态出站 IP 地址。如果您的组织想要使用安全文件传输协议 (SFTP) 将文件发送到单独的业务实体,则可以从这种方法中受益。这意味着业务实体必须有权访问允许文件通过其防火墙的 IP 地址。 

该模式的方法可以帮助您创建使用弹性 IP 地址作为出站 IP 地址的 AWS Lambda 函数。按照此模式中的步骤操作,您可以创建 Lambda 函数和虚拟私有云 (VPC),用于通过具有静态 IP 地址的 Internet 网关路由出站流量。要使用静态 IP 地址,您需要将 Lambda 函数附加到 VPC 及其子网。 

使用 Lambda 和 Amazon VPC 生成静态出站 IP 地址的先决条件和限制

先决条件

  • 一个活跃的 AWS 账户。 

  • AWS Identity and Access Management (IAM) 权限,用于创建和部署 Lambda 函数以及创建 VPC 及其子网。有关这方面的更多信息,请参阅 AWS Lambda 文档中的执行角色和用户权限

  • 如果您计划使用基础设施即代码 (IaC) 来实现此模式的方法,则需要一个集成开发环境 (IDE),例如 AWS Cloud9。有关这方面的更多信息,请参阅什么是 AWS Cloud9? 在 AWS Cloud9 文档中。

使用 Lambda 和 Amazon VPC 生成静态出站 IP 地址的架构

下图显示了这种模式的无服务器架构。

该图显示了以下工作流程:

  1. 出站流量流NAT gateway 1Public subnet 1

  2. 出站流量流NAT gateway 2Public subnet 2

  3. Lambda 函数可以在或中运行。Private subnet 1 Private subnet 2

  4. Private subnet 1并将流量Private subnet 2路由到公有子网中的 NAT 网关。

  5. NAT 网关将出站流量从公有子网发送到互联网网关。

  6. 出站数据从互联网网关传输到外部服务器。

技术堆栈

  • Lambda

  • Amazon Virtual Private Cloud (Amazon VPC)

自动化和规模

您可以通过在不同的可用区使用两个公有子网和两个私有子网来确保高可用性 (HA)。即使一个可用区不可用,该模式的解决方案仍能继续发挥作用。

用于使用 Lambda 和 Amazon VPC 生成静态出站 IP 地址的工具

  • AWS Lambda — AWS Lambda 是一项计算服务,它支持在不预置或管理服务器的情况下运行代码。只有在需要时 Lambda 才运行您的代码,并且能自动扩展,从每天几个请求扩展到每秒数千个请求。您只需为消耗的计算时间付费 – 代码未运行时不产生费用。

  • 亚马逊 VPC — Amazon Virtual Private Cloud(亚马逊 VPC)在 AWS 云中配置了一个逻辑上隔离的部分,您可以在其中在您定义的虚拟网络中启动 AWS 资源。这个虚拟网络与您在数据中心中运行的传统网络极其相似,并会为您提供使用亚马逊云科技可扩展基础设施的优势。

使用 Lambda 和 Amazon VPC 生成静态出站 IP 地址的长篇故事

任务 描述 所需技能
创建新的 VPC。

登录 AWS 管理控制台,打开 Amazon VPC 控制台,然后创建一个名为 Lambda VPC IPv4 CIDR 范围的 VPC。10.0.0.0/25

有关创建 VPC 的更多信息,请参阅亚马逊 V PC 文档中的亚马逊 VPC 入门。 

AWS 管理员
任务 描述 所需技能
创建第一个公有子网。
  1. 在 Amazon VPC 控制台上,选择子网,然后选择创建子网。 

  2. 对于名称标签,输入 public-one

  3. 对于 VPC,选择 Lambda VPC

  4. 选择一个可用区并记录下来。 

  5. 对于 IPv4 CIDR 块,请输入,10.0.0.0/28然后选择创建子网。

AWS 管理员
创建第二个公有子网。
  1. 在 Amazon VPC 控制台上,选择子网,然后选择创建子网。 

  2. 对于名称标签,输入 public-two

  3. 对于 VPC,选择 Lambda VPC

  4. 选择一个可用区并记录下来。重要:您不能使用包含public-one子网的可用区。 

  5. 对于 IPv4 CIDR 块,请输入,10.0.0.16/28然后选择创建子网。

AWS 管理员
任务 描述 所需技能
创建第一个私有子网。
  1. 在 Amazon VPC 控制台上,选择子网,然后选择创建子网。 

  2. 对于名称标签,输入 private-one

  3. 对于 VPC,选择 Lambda VPC

  4. 选择包含您之前创建的public-one子网的可用区。 

  5. 对于 IPv4 CIDR 块,请输入,10.0.0.32/28然后选择创建子网。

AWS 管理员
创建第二个私有子网。
  1. 在 Amazon VPC 控制台上,选择子网,然后选择创建子网。 

  2. 对于名称标签,输入 private-two

  3. 对于 VPC,选择 Lambda VPC

  4. 选择包含您之前创建的public-two子网的相同可用区。 

  5. 对于 IPv4 CIDR 块,请输入,10.0.0.64/28然后选择创建子网。

AWS 管理员
任务 描述 所需技能
创建第一个弹性 IP 地址。
  1. 在 Amazon VPC 控制台上,选择弹性 IP,然后选择分配新地址

  2. 选择分配并记录您新创建的弹性 IP 地址的分配 ID

注意:此弹性 IP 地址用于您的第一个 NAT 网关。 

AWS 管理员
创建第二个弹性 IP 地址。
  1. 在 Amazon VPC 控制台上,选择弹性 IP,然后选择分配新地址

  2. 选择分配并记录第二个弹性 IP 地址的分配 ID

注意:此弹性 IP 地址用于您的第二个 NAT 网关。

AWS 管理员
任务 描述 所需技能
创建互联网网关。
  1. 在 Amazon VPC 控制台上,选择互联网网关,然后选择创建互联网网关

  2. 输入名称Lambda internet gateway,然后选择创建互联网网关。请务必记录互联网网关 ID。 

AWS 管理员
将互联网网关连接到 VPC。

选择刚刚创建的 Internet 网关,然后选择 Actions, Attach to VPC (操作,附加到 VPC)

AWS 管理员
任务 描述 所需技能
创建第一个 NAT 网关。
  1. 在 Amazon VPC 控制台上,选择 NAT 网关,然后选择创建 NAT 网关

  2. 输入nat-one作为 NAT 网关名称。

  3. 选择public-one作为创建 NAT 网关的子网。

  4. 对于 “连接类型”,选择 “公共”。

  5. 对于弹性 IP 分配 ID,请选择您之前创建的第一个弹性 IP 地址并将其与 NAT 网关关联。

  6. 选择创建 NAT 网关

AWS 管理员
创建第二个 NAT 网关。
  1. 在 Amazon VPC 控制台上,选择 NAT 网关,然后选择创建 NAT 网关

  2. 输入nat-two作为 NAT 网关名称。

  3. 选择public-two作为创建 NAT 网关的子网。

  4. 对于 “连接类型”,选择 “公共”。

  5. 对于弹性 IP 分配 ID,请选择您之前创建的第二个弹性 IP 地址并将其与 NAT 网关关联。

  6. 选择创建 NAT 网关

AWS 管理员
任务 描述 所需技能
为公有子网创建路由表。
  1. 在 Amazon VPC 控制台上,选择路由表,然后选择创建路由表

  2. 输入public-one-subnet作为路由表名称,然后选择创建路由表

  3. 选择public-one-subnet路由表,选择编辑路由,然后选择添加路由

  4. 在 “目标” 框0.0.0.0中指定,然后在 “目标” 列表中选择互联网网关 ID。

  5. 子网关联选项卡上,选择编辑子网关联,选择具有 10.0.0.0/28 CIDR 范围的public-one子网,然后选择保存关联

  6. 选择 Save Changes(保存更改)。

AWS 管理员
为公共二级子网创建路由表。
  1. 在 Amazon VPC 控制台上,选择路由表,然后选择创建路由表

  2. 输入public-two-subnet作为路由表名称,然后选择创建路由表

  3. 选择public-two-subnet路由表,选择编辑路由,然后选择添加路由

  4. 在 “目标” 框0.0.0.0中指定,然后在 “目标” 列表中选择互联网网关 ID。

  5. 子网关联选项卡上,选择编辑子网关联,选择具有 10.0.0.16/28 CIDR 范围的public-two子网,然后选择保存关联

  6. 选择 Save Changes(保存更改)。

AWS 管理员
为私有一子网创建路由表。
  1. 在 Amazon VPC 控制台上,选择路由表,然后选择创建路由表

  2. 输入private-one-subnet作为路由表名称,然后选择创建路由表

  3. 选择private-one-subnet路由表,选择编辑路由,然后选择添加路由

  4. 在 “目标” 框0.0.0.0中指定,然后在 “目标” 列表中选择public-one子网中的 NAT 网关。

  5. 子网关联选项卡上,选择编辑子网关联,选择具有 10.0.0.32/28 CIDR 范围的private-one子网,然后选择保存关联

  6. 选择 Save Changes(保存更改)。

AWS 管理员
为私有二级子网创建路由表。
  1. 在 Amazon VPC 控制台上,选择路由表,然后选择创建路由表

  2. 输入private-two-subnet作为路由表名称,然后选择创建路由表

  3. 选择private-two-subnet路由表,选择编辑路由,然后选择添加路由

  4. 在 “目标” 框0.0.0.0中指定,然后在 “目标” 列表中选择public-two子网中的 NAT 网关。

  5. 子网关联选项卡上,选择编辑子网关联,选择具有 10.0.0.64/28 CIDR 范围的private-two子网,然后选择保存关联

  6. 选择 Save Changes(保存更改)。

AWS 管理员
任务 描述 所需技能
新建 Lambda 函数。
  1. 打开 AWS Lambda 控制台并选择创建函数。

  2. 在 “基本信息Lambda test 下,在 “函数名称” 下输入,然后在 “运行时” 下选择您选择的语言。

  3. 选择 Create function (创建函数)

AWS 管理员
将 Lambda 函数添加到您的 VPC。
  1. 在 AWS Lambda 控制台上,选择函数,然后选择您之前创建的函数。 

  2. 选择 Configuration(配置),然后选择 VPC

  3. 选择编辑Lambda VPC然后选择两个私有子网。

  4. 选择用于测试目的的默认安全组,然后选择保存

AWS 管理员
编写调用外部服务的代码。
  1. 使用您选择的编程语言编写代码来调用返回您的 IP 地址的外部服务。

  2. 验证返回的 IP 地址是否与您的一个弹性 IP 地址相匹配。

AWS 管理员

用于使用 Lambda 和 Amazon VPC 生成静态出站 IP 地址的相关资源