

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

# 为 EMR Serverless 应用程序配置 VPC 访问权限以连接数据
<a name="vpc-access"></a>

您可以配置 EMR Serverless 应用程序以连接到 VPC 内的数据存储，例如 Amazon Redshift 集群、Amazon RDS 数据库或具有 VPC 端点的 Amazon S3 存储桶。EMR Serverless 应用程序具有到 VPC 内数据存储的出站连接。默认情况下，EMR Serverless 会阻止对应用程序的入站访问和出站互联网访问，以增强安全性。

**注意**  
如果要对应用程序使用外部 Hive 元存储数据库，则必须配置 VPC 访问。有关如何配置外部 Hive 元存储的信息，请参阅[元存储配置](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/metastore-config.html)。

## 创建应用程序
<a name="vpc-create-app"></a>

在**创建应用程序**页面上，选择自定义设置，并指定 EMR Serverless 应用程序可以使用的 VPC、子网和安全组。

### VPCs
<a name="vpc-create-vpc"></a>

选择包含数据存储的虚拟私有云（VPC）名称。**创建应用程序**页面列出了您选择的所有 VPCs 应用程序 AWS 区域。

### 子网
<a name="vpc-create-subnet"></a>

选择包含数据存储的 VPC 内的子网。**创建应用程序**页面列出了 VPC 内数据存储的所有子网。支持公有和私有子网。您可以将私有子网或公有子网传递给您的应用程序。选择使用公有子网还是私有子网需要注意一些相关事项。

对于私有子网：
+ 关联的路由表不能有互联网网关。
+ 对于与互联网的出站连接，如果需要，请使用 NAT 网关配置出站路由。要配置 NAT 网关，请参阅 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with)。
+ 要实现 Amazon S3 连接，请配置 NAT 网关或 VPC 端点。要配置 S3 VPC 端点，请参阅[创建网关端点](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#create-gateway-endpoint-s3)。
+ 如果您配置了 S3 VPC 端点并附加了端点策略来控制访问，请按照[使用托管存储的 EMR Serverless 日志记录](logging.html#jobs-log-storage-managed-storage)中的说明为 EMR Serverless 提供存储和提供应用程序日志的权限。
+ 要连接到 VPC AWS 服务 外部的其他人，例如与 Amazon DynamoDB 的连接，请配置 VPC 终端节点或 NAT 网关。要为 AWS 服务配置 VPC 端点，请参阅[使用 VPC 端点](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html#working-with-privatelink)。

**注意**  
当您在私有子网中设置 Amazon EMR Serverless 应用程序时，我们建议您也为 Amazon S3 设置 VPC 端点。如果您的 EMR Serverless 应用程序位于没有适用于 Amazon S3 的 VPC 端点的私有子网中，则会产生与 S3 流量关联的额外 NAT 网关费用。这是因为如果未配置 VPC 端点，则您的 EMR 应用程序和 Amazon S3 之间的流量不会停留在您的 VPC 中。

对于公有子网：
+ 它们具有通向互联网网关的路由。
+ 您必须确保正确配置安全组以控制出站流量。

工作线程可通过出站流量连接到 VPC 内的数据存储。默认情况下，EMR Serverless 会阻止对工作线程的入站访问。这是为了提高安全性。

当你使用时 AWS Config，EMR Serverless 会为每个工作人员创建一个弹性网络接口项目记录。为避免与该资源相关的成本，请考虑关闭接`AWS::EC2::NetworkInterface`入 AWS Config。

**注意**  
建议您在多个可用区中选择多个子网。这是因为您选择的子网决定了可供 EMR Serverless 应用程序启动的可用区。每个工作线程都在其启动的子网上使用一个 IP 地址。请确保指定的子网具有足够的 IP 地址，以容纳您计划启动的工作线程数量。有关子网规划的更多信息，请参阅 [子网规划最佳实践](#subnet-best-practices)。

#### 子网的注意事项和限制
<a name="vpc-create-subnet-considerations"></a>
+ 带有公共子网的 EMR Serverless 不支持 Lake Formation。 AWS 
+ 公有子网不支持入站流量。

### 安全组
<a name="vpc-create-sg"></a>

选择一个或多个可与数据存储通信的安全组。**创建应用程序**页面列出了 VPC 内的所有安全组。EMR Serverless 会将这些安全组与附加到 VPC 子网的弹性网络接口关联。

**注意**  
建议您为 EMR Serverless 应用程序创建单独的安全组。如果安全组具有向 **0.0.0.0/0** 或 **::/0** 范围内的公共互联网开放的端口，则 EMR Serverless 不允许您**创建**/**更新**/**启动应用程序**。这提供增强安全、隔离，并使管理网络规则更加高效。例如，这会阻止向具有公有 IP 地址的工作线程发送的意外流量。例如，要与 Amazon Redshift 集群通信，请在 Redshift 和 EMR Serverless 安全组之间定义流量规则，如下例所示。

**Example 示例：与 Amazon Redshift 集群通信**  

1. 为从其中一个 EMR Serverless 安全组到 Amazon Redshift 安全组的入站流量添加规则。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/EMR-Serverless-UserGuide/vpc-access.html)

1. 为来自其中一个 EMR Serverless 安全组的出站流量添加规则。通过两种方式之一来执行此操作。首先，向所有端口开放出站流量。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/EMR-Serverless-UserGuide/vpc-access.html)

   或者，您可以限制到 Amazon Redshift 集群的出站流量。仅当应用程序必须与 Amazon Redshift 集群通信而无其他情况时，这才有用。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/emr/latest/EMR-Serverless-UserGuide/vpc-access.html)

## 配置应用程序
<a name="vpc-configure-app"></a>

您可以在**配置应用程序**页面上更改现有 EMR Serverless 应用程序的网络配置。

### 访问作业运行详细信息
<a name="vpc-configure-access-details"></a>

在**作业运行详细信息**页面上，访问作业在特定运行中使用的子网。请注意，作业只能在从指定子网中选择的一个子网中运行。

## 子网规划最佳实践
<a name="subnet-best-practices"></a>

AWS 资源是在子网中创建的，子网是 Amazon VPC 中可用 IP 地址的子集。例如，网络掩码为 /16 的 VPC 最多有 65536 个可用 IP 地址，可使用子网掩码将其分解为多个较小的网络。例如，您可以将此范围拆分为两个子网，每个子网使用 /17 掩码和 32768 个可用 IP 地址。子网位于可用区内，不能跨可用区。

在设计子网时，应考虑 EMR Serverless 应用程序扩展限制。例如，如果您的应用程序需要 4 个 vCpu 工作线程，并可以纵向扩展到 4,000 个 vCpu，则最多需要 1,000 个工作线程，共计 1,000 个网络接口。建议您在多个可用区创建子网。这样，EMR Serverless 在可用区发生故障时可以重试作业，或在其他可用区中配置预初始化容量（这种情况不太可能发生）。因此，至少两个可用区中的每个子网应具有超过 1000 个可用 IP 地址。

您需要掩码小于或等于 22 的子网才能预置 1000 个网络接口。任何大于 22 的掩码都不符合要求。例如，子网掩码 /23 提供 512 个 IP 地址，而掩码 /22 提供 1024 个 IP 地址，掩码 /21 提供 2048 个 IP 地址。以下是网络掩码为 /16 的 VPC 中掩码为 /22 的 4 个子网的示例，这些子网可以分配到不同的可用区。可用和可用 IP 地址之间存在五个差异，因为每个子网中的前四个 IP 地址和最后一个 IP 地址都由保留 AWS。


| 子网 ID | 子网地址 | 子网掩码 | IP 地址范围 | 可用 IP 地址 | 可用 IP 地址 | 
| --- | --- | --- | --- | --- | --- | 
|  1  |  10.0.0.0  |  255.255.252.0/22  |  10.0.0.0 - 10.0.3.255  |  1024  |  1,019  | 
|  2  |  10.0.4.0  |  255.255.252.0/22  |  10.0.4.0 - 10.0.7.255  |  1024  |  1,019  | 
|  3  |  10.0.8.0  |  255.255.252.0/22  |  10.0.8.0 - 10.0.11.255  |  1024  |  1,019  | 
|  4  |  10.0.12.0  |  255.255.252.0/22  |  10.0.12.0 - 10.0.15.255  |  1024  |  1,019  | 

您应该评估工作负载是否适合较大的工作线程。使用较大的工作线程需要的网络接口较少。例如，使用 16 个 vCpu 工作线程且应用程序扩展限制为 4,000 vCpu，最多需要 250 个工作线程，共计 250 个可用 IP 地址来预置网络接口。您需要多个可用区中掩码小于或等于 24 的子网才能预置 250 个网络接口。任何大于 24 的掩码都能提供少于 250 个 IP 地址。

如果多个应用程序共享子网，则每个子网的设计应考虑到所有应用程序的集体扩展限制。例如，如果您有 3 个应用程序请求 4 个 vCPU 工作线程，每个可以纵向扩展到 4000 个 vCPU，并且具有 12,000 个 vCPU 账户级服务配额，则每个子网需要 3000 个可用 IP 地址。如果要使用的 VPC 没有足够数量的 IP 地址，请尝试增加可用 IP 地址的数量。您可以通过关联其他无类别域间路由（CIDR）块与 VPC 来执行此操作。有关更多信息，请参阅 *Amazon VPC 用户指南中的将更多 IPv4 CIDR 块与您的 VPC* [关联起来](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#add-ipv4-cidr)。

您可以使用在线工具快速生成子网定义，并查看可用的 IP 地址范围。