

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

# 配置 Managed Service for Apache Flink，以访问 Amazon VPC 中的资源
<a name="vpc"></a>

您可以配置 Managed Service for Apache Flink应用程序以连接到您的账户的虚拟私有云 (VPC) 中的私有子网。使用 Amazon Virtual Private Cloud (Amazon VPC) 为数据库、缓存实例或内部服务等资源创建专用网络。将应用程序连接到 VPC 以在执行期间访问私有资源。

**Topics**
+ [Amazon VPC 概念](#vpc-concepts)
+ [VPC 应用程序权限](vpc-permissions.md)
+ [VPC 连接的 Managed Service for Apache Flink 应用程序的互联网和服务访问](vpc-internet.md)
+ [使用 Managed Service for Apache Flink VPC API](vpc-api.md)
+ [示例：使用 VPC 访问 Amazon MSK 集群中的数据](vpc-example.md)

## Amazon VPC 概念
<a name="vpc-concepts"></a>

Amazon VPC 是 Amazon EC2 的网络层。如果您不熟悉 Amazon EC2，请参阅*适用于 Linux 实例的 Amazon EC2 用户指南* 中的[什么是 Amazon EC2？](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/concepts.html)以了解简要说明。

以下是以下关键概念 VPCs：
+ *虚拟私有云* (VPC) 是专用于您的 Amazon 账户的虚拟网络。
+ *子网*是您的 VPC 内的 IP 地址范围。
+ *路由表* 包含一组称为“路由”的规则，它们用于确定将网络流量发送到何处。
+ *Internet 网关* 是一种横向扩展、冗余且高度可用的 VPC 组件，支持在 VPC 中的实例和 Internet 之间进行通信。因此它不会对网络流量造成可用性风险或带宽限制。
+ 使用 *VPC 终端节点*，您 PrivateLink 无需互联网网关、NAT 设备、VPN 连接或连接，即可将您的 VPC 与支持的 Amazon 服务和由其提供支持的 VPC 终端节点服务进行私密 Amazon Direct Connect 连接。VPC 中的实例无需公有 IP 地址便可与 服务中的资源通信。VPC 和其他服务之间的通信不会离开 Amazon 网络。

有关 Amazon VPC 服务的更多信息，请参阅 [《Amazon Virtual Private Cloud (VPC) 用户指南》](https://docs.amazonaws.cn/vpc/latest/userguide/what-is-amazon-vpc.html)。

Managed Service for Apache Flink在应用程序的 VPC 配置中提供的子网之一中创建[弹性网络接口](https://docs.amazonaws.cn/vpc/latest/userguide/VPC_ElasticNetworkInterfaces.html)。在 VPC 子网中创建的弹性网络接口数可能会有所不同，具体取决于应用程序的并行度和每个 KPU 的并行度。有关应用程序扩展的更多信息，请参阅[实施应用程序扩展](how-scaling.md)。

**注意**  
SQL 应用程序不支持 VPC 配置。

**注意**  
Managed Service for Apache Flink管理具有 VPC 配置的应用程序的检查点和快照状态。

# VPC 应用程序权限
<a name="vpc-permissions"></a>

本节介绍了应用程序与 VPC 一起使用时所需的权限策略。有关使用权限策略的更多信息，请参阅 [Amazon Managed Service for Apache Flink 的身份和访问管理](security-iam.md)。

以下权限策略为应用程序授予与 VPC 交互所需的权限。要使用该权限策略，请将其添加到应用程序的执行角色中。

## 添加用于访问 Amazon VPC 的权限策略
<a name="vpc-permissions-policy"></a>

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "VPCReadOnlyPermissions",
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeVpcs",
        "ec2:DescribeSubnets",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeDhcpOptions"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ENIReadWritePermissions",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateNetworkInterface",
        "ec2:CreateNetworkInterfacePermission",
        "ec2:DescribeNetworkInterfaces",
        "ec2:DeleteNetworkInterface"
      ],
      "Resource": "*"
    }

    ]
}
```

------

**注意**  
当您使用控制台指定应用程序资源（例如 CloudWatch 日志或 Amazon VPC）时，控制台会修改您的应用程序执行角色以授予访问这些资源的权限。只有在不使用控制台创建应用程序时，您才需要手动修改应用程序的执行角色。

# VPC 连接的 Managed Service for Apache Flink 应用程序的互联网和服务访问
<a name="vpc-internet"></a>

默认情况下，在将 Managed Service for Apache Flink的应用程序连接到您的账户中的 VPC 时，它无法访问 Internet，除非 VPC 提供了访问权限。如果应用程序需要访问 Internet，则需要满足以下条件：
+ Managed Service for Apache Flink 应用程序只能配置私有子网。
+ VPC 必须在公有子网中包含 NAT 网关或实例。
+ 出站流量必须具有从私有子网到公有子网中的 NAT 网关的路由。

**注意**  
一些服务提供了 [VPC 终端节点](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-endpoints.html)。您可以使用 VPC 端点从 VPC 内连接到 Amazon 服务，而无需互联网访问权限。

子网是公有还是私有子网取决于其路由表。每个路由表具有一个默认路由，它确定具有公有目标的数据包的下一跃点。
+ **对于私有子网：**默认路由指向 NAT 网关 (nat-...) 或 NAT 实例 (eni-...)。
+ **对于公有子网：**默认路由指向 Internet 网关 (igw-...)。

在为 VPC 配置一个公有子网（具有 NAT）以及一个或多个私有子网后，请执行以下操作以标识私有子网和公有子网：
+ 在 VPC 控制台的导航窗格中，选择 **Subnets (子网)**。
+ 选择一个子网，然后选择 **Route Table (路由表)** 选项卡。验证默认路由：
  + **公有子网：**目的地：0.0.0.0/0，目标：igw-…
  + **私有子网：**目的地：0.0.0.0/0，目标：nat-… 或 eni-…

要将 Managed Service for Apache Flink 应用程序与私有子网关联：
+ 登录并通过 /f Amazon Web Services 管理控制台 link 打开亚马逊 MSF 控制台。 https://console.aws.amazon.com
+ 在 **Managed Service for Apache Flink 应用程序**页面上，选择您的应用程序，然后选择**应用程序详细信息**。
+ 在应用程序页面上，选择 **Configure (配置)**。
+ 在 **VPC Connectivity (VPC 连接)** 部分中，选择要与您的应用程序关联的 VPC。选择与您的 VPC 关联的子网和安全组，您希望应用程序使用它们访问 VPC 资源。
+ 选择**更新**。

## 相关信息
<a name="vpc-internet-related"></a>

[创建具有公有和私有子网的 VPC](https://docs.amazonaws.cn/vpc/latest/userguide/VPC_Scenario2.html)

[NAT 网关基础知识](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-basics)

# 使用 Managed Service for Apache Flink VPC API
<a name="vpc-api"></a>

使用以下适用于 Apache Flink API 操作的托管服务来管理 VPCs 您的应用程序。有关使用 Managed Service for Apache Flink API 的信息，请参阅[Managed Service for Apache Flink API 示例代码](api-examples.md)。

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

在创建过程中，使用[CreateApplication](https://docs.amazonaws.cn/managed-flink/latest/apiv2/API_CreateApplication.html)操作向您的应用程序添加 VPC 配置。

`CreateApplication` 操作的以下示例请求代码在创建应用程序时包括 VPC 配置：

```
{
  "ApplicationName":"MyApplication",
  "ApplicationDescription":"My-Application-Description",
  "RuntimeEnvironment":"FLINK-1_15",
  "ServiceExecutionRole":"arn:aws:iam::123456789123:role/myrole",
  "ApplicationConfiguration": {
    "ApplicationCodeConfiguration":{
      "CodeContent":{
        "S3ContentLocation":{
          "BucketARN":"arn:aws:s3:::amzn-s3-demo-bucket",
          "FileKey":"myflink.jar",
          "ObjectVersion":"AbCdEfGhIjKlMnOpQrStUvWxYz12345"
        }
      },
      "CodeContentType":"ZIPFILE"
    },
      "FlinkApplicationConfiguration":{
      "ParallelismConfiguration":{
        "ConfigurationType":"CUSTOM",
        "Parallelism":2,
        "ParallelismPerKPU":1,
        "AutoScalingEnabled":true
      }
    },
  "VpcConfigurations": [ 
         { 
            "SecurityGroupIds": [ "sg-0123456789abcdef0" ],
            "SubnetIds": [ "subnet-0123456789abcdef0" ]
         }
      ]
  }
}
```

## AddApplicationVpcConfiguration
<a name="vpc-api-add"></a>

在创建 VPC 配置后，使用[AddApplicationVpcConfiguration](https://docs.amazonaws.cn/managed-flink/latest/apiv2/API_AddApplicationVpcConfiguration.html)操作将其添加到您的应用程序中。

`AddApplicationVpcConfiguration` 操作的以下示例请求代码将 VPC 配置添加到现有应用程序中：

```
{
   "ApplicationName": "MyApplication",
   "CurrentApplicationVersionId": 9,
   "VpcConfiguration": { 
      "SecurityGroupIds": [ "sg-0123456789abcdef0" ],
      "SubnetIds": [ "subnet-0123456789abcdef0" ]
   }
}
```

## DeleteApplicationVpcConfiguration
<a name="vpc-api-del"></a>

使用[DeleteApplicationVpcConfiguration](https://docs.amazonaws.cn/managed-flink/latest/apiv2/API_DeleteApplicationVpcConfiguration.html)操作从您的应用程序中删除 VPC 配置。

`AddApplicationVpcConfiguration` 操作的以下示例请求代码从应用程序中删除现有的 VPC 配置：

```
{
   "ApplicationName": "MyApplication",
   "CurrentApplicationVersionId": 9,
   "VpcConfigurationId": "1.1"
}
```

## 更新应用程序
<a name="vpc-api-upd"></a>

使用[UpdateApplication](https://docs.amazonaws.cn/managed-flink/latest/apiv2/API_UpdateApplication.html)操作一次性更新应用程序的所有 VPC 配置。

`UpdateApplication` 操作的以下示例请求代码更新应用程序的所有 VPC 配置：

```
{
   "ApplicationConfigurationUpdate": { 
      "VpcConfigurationUpdates": [ 
         { 
            "SecurityGroupIdUpdates": [ "sg-0123456789abcdef0" ],
            "SubnetIdUpdates": [ "subnet-0123456789abcdef0" ],
            "VpcConfigurationId": "2.1"
         }
      ]
   },
   "ApplicationName": "MyApplication",
   "CurrentApplicationVersionId": 9
}
```

# 示例：使用 VPC 访问 Amazon MSK 集群中的数据
<a name="vpc-example"></a>

有关如何从 VPC 上的 Amazon MSK 集群中访问数据的完整教程，请参阅 [MSK 复制](earlier.md#example-msk)。