为出站流量启用 VPC 访问权限 - AWS App Runner

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

为出站流量启用 VPC 访问权限

默认情况下,您的 AWS App Runner 应用程序可以向公共终端节点发送消息。这包括您自己的解决方案 AWS 服务以及任何其他公共网站或网络服务。您的应用程序甚至可以从亚马逊虚拟私有云 (Amazon VPC) 向在 VPC 中运行的应用程序的公共终端节点发送消息。如果您在启动环境时未配置 VPC,App Runner 将使用默认 VPC,即公有的 VPC。

您可以选择在自定义 VPC 中启动您的环境,以自定义传出流量的网络和安全设置。您可以允许您的 AWS App Runner 服务从亚马逊虚拟私有云 (Amazon VPC) 访问在私有 VPC 中运行的应用程序。完成此操作后,您的应用程序可以连接托管在 Amazon Virt ual Private Cloud (Amazon VPC) 中的其他应用程序并向其发送消息。例如,Amazon RDS 数据库 ElastiCache、Amazon 以及托管在私有 VPC 中的其他私有服务。

VPC 连接器

您可以通过从 App Runner 控制台创建名为 VPC 连接器的 VPC 终端节点,将您的服务与 VPC 关联起来。要创建 VPC 连接器,请指定 VPC、一个或多个子网以及一个或多个安全组(可选)。配置 VPC 连接器后,您可以将其与一个或多个 App Runner 服务一起使用。

一次性延迟

如果您将 App Runner 服务配置为用于出站流量的自定义 VPC 连接器,则该服务可能会遇到两到五分钟的一次性启动延迟。启动过程将等待 VPC 连接器准备好连接到其他资源,然后才会将服务状态设置为 “正在运行”。您可以在首次创建服务时使用自定义 VPC 连接器对其进行配置,也可以在之后通过更新服务来进行配置。

请注意,如果您为其他服务重复使用相同的 VPC 连接器配置,则不会出现任何延迟。VPC 连接器配置基于安全组和子网组合。对于给定的 VPC 连接器配置,在初始创建 VPC 连接器 Hyperplane ENI(弹性网络接口)期间,延迟仅发生一次。

有关自定义 VPC 连接器和 AWS Hyperplane 的更多信息

App Runner 中的 VPC 连接器基于 AWS Hyperplane,Hyperplane 是亚马逊内部网络系统,位于网络负载均衡器NAT Gateway 和 A WS PrivateLink 等多种 AWS 资源背后。 AWS Hyperplane 技术提供高吞吐量和低延迟功能,以及更高的共享程度。当您创建 VPC 连接器并将其与您的服务关联时,将在您的子网中创建 Hyperplane ENI。VPC 连接器配置基于安全组和子网组合,您可以跨多个 App Runner 服务引用相同的 VPC 连接器。因此,底层的 Hyperplane ENI 将在你的 App Runner 服务之间共享。即使您扩大了处理请求负载所需的任务数量,这种共享也是可行的,并且可以更有效地利用您的 VPC 中的 IP 空间。有关更多信息,请参阅 AWS 容器博客中的 AWS App Runner VPC 网络深入探讨

子网

每个子网都位于特定的可用区中。为了获得高可用性,我们建议您在至少三个可用区中选择子网。如果该区域的可用区少于三个,我们建议您在所有支持的可用区中选择您的子网。

为您的 VPC 选择子网时,请确保选择私有子网,而不是公有子网。这是因为,当您创建 VPC 连接器时,App Runner 服务会在每个子网中创建一个 Hyperplane ENI。每个 Hyperplane ENI 仅分配一个私有 IP 地址,并标有AWSAppRunnerManaged密钥标签。如果您选择公有子网,则在运行 App Runner 服务时会出现错误。但是,如果您的服务需要访问互联网或其他公共服务上的某些服务 AWS 服务,请参阅选择子网时的注意事项

选择子网时的注意事项

  • 当您将服务连接到 VPC 时,出站流量无法访问公共互联网。来自您的应用程序的所有出站流量都将通过您的服务所连接的 VPC 定向。VPC 的所有联网规则都适用于您的应用程序的出站流量。这意味着您的服务无法访问公共互联网和 AWS API。要获得访问权限,请执行以下操作之一:

    • 通过 NAT 网关将子网连接到互联网。

    • 为您要访问的 AWS 服务 设置 VPC 终端节点。通过使用,您的服务将保留在 Amazon VPC 内 AWS PrivateLink。

  • 有些可用区中的某些可用区 AWS 区域 不支持可用于 App Runner 服务的子网。如果您在这些可用区中选择子网,则无法创建或更新您的服务。对于这些情况,App Runner 会提供一条详细的错误消息,指向不支持的子网和可用区。出现这种情况时,请通过从请求中删除不支持的子网来排除故障,然后重试。

安全组

您可以选择指定 App Runner 用于在指定子网 AWS 下访问的安全组。如果您未指定安全组,App Runner 将使用 VPC 的默认安全组。默认安全组允许所有出站流量。

添加安全组可为 VCP 连接器提供额外的安全层,使您可以更好地控制网络流量。VPC 连接器仅用于来自您的应用程序的出站通信。您可以使用出站规则来允许与所需的目标终端节点进行通信。您还必须确保与目标资源关联的所有安全组都具有相应的入站规则。否则,这些资源将无法接受来自 VPC 连接器安全组的流量。

注意

当您将服务与 VPC 关联时,以下流量不会受到影响:

  • 入站流量-您的应用程序收到的传入消息不受关联 VPC 的影响。消息通过与您的服务关联的公共域名进行路由,并且不与 VPC 交互。

  • App Runner 流量 — App Runner 代表你管理多项操作,例如提取源代码和图像、推送日志和检索机密。这些操作生成的流量不会通过您的 VPC 路由。

要详细了解如何 AWS App Runner 与 Amazon VPC 集成,请参阅 A AWS pp Runner VPC 网络

注意

对于传出流量,App Runner 目前仅支持 IPv4。

管理 VPC 访问权限

注意

如果您为服务创建出站流量 VPC 连接器,则随后的服务启动过程将出现一次性延迟。您可以在创建新服务时或之后通过服务更新为新服务设置此配置。有关更多信息,请参阅一次性延迟本指南的 “与 App Runner 联网” 一章。

使用以下方法之一管理您的 App Runner 服务的 VPC 访问权限:

App Runner console

当您使用 App Runner 控制台创建服务时,或者稍后更新其配置时,您可以选择配置您的传出流量。在控制台页面上查找 “网络配置” 部分。对于传出网络流量,请选择以下选项:

  • 公共访问:将您的服务与其他人的公共终端节点相关联 AWS 服务。

  • 自定义 VPC:将您的服务与亚马逊 VPC 中的 VPC 关联。您的应用程序可以连接托管在 Amazon VPC 中的其他应用程序并向其发送消息。

启用自定义 VPC
  1. 打开 App Runner 控制台,然后在 “区域” 列表中,选择您的 AWS 区域。

  2. 转到 “配置服务” 下的 “网络” 部分。

    显示网络选项的 App Runner 控制台配置页面
  3. 传出网络流量选择自定义 VPC

  4. 在导航窗格中,选择 VPC 连接器

    如果您创建了 VPC 连接器,则控制台会显示您账户中的 VPC 连接器列表。您可以选择现有 VPC 连接器,然后选择 “下一步” 来查看您的配置。然后,移至最后一步。或者,您可以使用以下步骤添加新的 VPC 连接器。

  5. 选择新增,为您的服务创建新的 VPC 连接器。

    然后,将打开 “添加新 VPC 连接器” 对话框。

    App Runner 控制台显示 “添加新 VPC 连接器” 对话框
  6. 输入 VPC 连接器的名称,然后从可用列表中选择所需的 VPC。

  7. 对于子网,为计划从中访问 App Runner 服务的每个可用区选择一个子网。为了获得更好的可用性,请选择三个子网。或者,如果子网少于三个,请选择所有可用的子网。

    注意

    确保为 VPC 连接器分配私有子网。如果您将公有子网分配给 VPC 连接器,则您的服务将无法创建或在更新期间自动回滚。

  8. (可选)对于安全组,选择要与端点网络接口关联的安全组。

  9. (可选)若要添加标签,请选择 Add new tag(添加新标签),然后输入该标签的键和值。

  10. 选择添加

    您创建的 VPC 连接器的详细信息显示在 VPC 连接器下。

  11. 选择 “下一步” 查看您的配置,然后选择 “创建并部署”。

    App Runner 会为您创建 VPC 连接器资源,然后将其与您的服务关联。如果成功创建了服务,控制台将显示服务控制面板,其中包含新服务的服务概述

App Runner API or AWS CLI

当您调用CreateServiceUpdateServiceApp Runner API 操作时,请使用NetworkConfiguration参数的EgressConfiguration成员为您的服务指定 VPC 连接器资源。

使用以下 App Runner API 操作来管理您的 VPC 连接器资源。

  • CreateVpcConnector— 创建新的 VPC 连接器。

  • ListVpcConnectors— 返回与您的关联的 VPC 连接器的列表 AWS 账户。该列表包括完整描述。

  • DescribeVpcConnector— 返回 VPC 连接器的完整描述。

  • DeleteVpcConnector— 删除 VPC 连接器。如果您已达到自己的 VPC 连接器配额 AWS 账户,则可能需要删除不必要的 VPC 连接器。

要在 App Runner 上部署可出站访问 VPC 的应用程序,必须先创建 VPC 连接器。为此,您可以指定一个或多个子网和安全组与应用程序关联。然后,您可以在 “创建” 中或UpdateService通过 CLI 引用 VPC 连接器,如以下示例所示:

cat > vpc-connector.json <<EOF { "VpcConnectorName": "my-vpc-connector", "Subnets": [ "subnet-a", "subnet-b", "subnet-c" ], "SecurityGroups": [ "sg-1", "sg-2" ] } EOF aws apprunner create-vpc-connector \ --cli-input-json file:///vpc-connector.json cat > service.json <<EOF { "ServiceName": "my-vpc-connected-service", "SourceConfiguration": { "ImageRepository": { "ImageIdentifier": "<ecr-image-identifier> ", "ImageConfiguration": { "Port": "8000" }, "ImageRepositoryType": "ECR" } }, "NetworkConfiguration": { "EgressConfiguration": { "EgressType": "VPC", "VpcConnectorArn": "arn:aws:apprunner:..../my-vpc-connector" } } } EOF aws apprunner create-service \ --cli-input-json file:///service.js