使用 Lambda 函数、亚马逊 VPC 和无服务器架构生成静态出站 IP 地址 - AWS 规范性指南

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

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

由托马斯·斯科特 (AWS) 创建

注意

AWS 专注于寻找提供更好客户体验的方法。为此,我们需要您的反馈。请抽出 5 分钟时间分享有关您使用 AWS 规范性指南的体验的见解。本次调查由外部公司主办,因此以下链接不指向我们的网站。

参加调查

环境:生产

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

AWS 服务:AWS Lambda

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

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

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

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

先决条件

  • 活跃的 AWS 账户。 

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

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

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

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

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

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

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

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

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

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

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

技术堆栈

  • Lambda

  • Amazon Virtual Private Cloud (Amazon VPC)

自动化和规模

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

使用 Lambda 和亚马逊 VPC 生成静态出站 IP 地址的工具

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

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

用于使用 Lambda 和亚马逊 VPC 生成静态出站 IP 地址的史诗

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

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

有关创建 VPC 的更多信息,请参阅 Amazon VPC 文档中的亚马逊 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. 在亚马逊 VPC 控制台上,选择互联网网关,然后选择创建互联网网关

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

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

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

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

  2. 输入 N nat-one AT 网关名称。

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

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

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

  6. 选择创建 NAT 网关

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

  2. 输入 N nat-two AT 网关名称。

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

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

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

  6. 选择创建 NAT 网关

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

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

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

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

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

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

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

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

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

  4. 在 “目标” 框0.0.0.0中指定,然后在 “目标” 列表中选择 Internet 网关 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 和亚马逊 VPC 生成静态出站 IP 地址的相关资源