

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

# Apache Kafka 虚拟私有云 (VPC) 目标
<a name="kafka-vpc-destination"></a>

Apache Kafka 规则操作将数据路由到 Amazon Virtual Private Cloud（Amazon VPC）中的 Apache Kafka 集群。当您为规则操作指定 VPC 目标时，将自动启用 Apache Kafka 规则操作使用的 VPC 配置。

Apache Kafka 虚拟私有云 (VPC) 目标包含 VPC 内的子网列表。规则引擎将在您在此列表中指定的每个子网中创建一个弹性网络接口。有关网络接口的更多信息，请参阅 Amazon EC2 用户指南中的[弹性网络接口](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。

## 要求和注意事项
<a name="kafka-vpc-destination-considerations"></a>
+ 如果您使用的是自我管理的 Apache Kafka 集群，则将在互联网上使用公有端点访问此集群：
  + 为子网中的实例创建 NAT 网关。NAT 网关具有可以连接到互联网的公有 IP 地址，这允许规则引擎将您的消息转发到公有 Kafka 集群。
  + 使用由 Apache Kafka Virtual Private Cloud (VPCENIs) 目标创建的弹性网络接口 () 分配弹性 IP 地址。必须将您使用的安全组配置为阻止传入流量。
**注意**  
如果 Apache Kafka 虚拟私有云 (VPC) 目标被禁用然后又重新启用，则必须将弹性云与新的目标重新关联。 IPs ENIs
+ 如果 Apache Kafka 虚拟私有云 (VPC) 目标连续 30 天没有收到任何流量，则该目标将被禁用。
+ 如果 Apache Kafka 虚拟私有云 (VPC) 目标使用的任何资源发生变化，则该目标将被禁用且无法使用。
+ 一些可以禁用 Apache Kafka 虚拟私有云 (VPC) 目标的更改包括：
  + 删除 VPC、子网、安全组或使用的角色。
  + 修改角色使其不再拥有必要的权限。
  + 接近子网容量，这使我们无法应用 [FedRAMP 补丁](https://aws.amazon.com/compliance/fedramp/)。
  + 禁用目的地。

## 定价
<a name="kafka-vpc-destination-pricing"></a>

出于定价目的，除了在资源位于您的 VPC 中时向资源发送消息的操作之外，还会计量 VPC 规则操作。有关定价信息，请参阅 [AWS IoT Core 定价](https://aws.amazon.com/iot-core/pricing/)。

## 创建 Apache Kafka 虚拟私有云 (VPC) 目标
<a name="kafka-vpc-destination-creating"></a>

您可以使用 API 或控制台创建 Apache Kafka 虚拟私有云 (VPC) 目标。[CreateTopicRuleDestination](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRuleDestination.html) AWS IoT Core 

创建目标时，必须指定以下信息。

vpcId  
亚马逊 VPC 的唯一 ID。

subnetIds  
规则引擎在其中创建弹性网络接口的子网列表。规则引擎为列表中的每个子网分配一个网络接口。

securityGroups（可选）  
要应用到网络接口的安全组列表。

roleArn  
有权代表您创建网络接口的角色的 Amazon 资源名称（ARN）。  
此 ARN 应附加一个类似于以下示例的策略。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeVpcs",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcAttribute",
                "ec2:DescribeSecurityGroups"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateNetworkInterfacePermission",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/VPCDestinationENI": "true"
            }
        }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "CreateNetworkInterface",
                    "aws:RequestTag/VPCDestinationENI": "true"
            }
        }
        }
    ]
}
```

### 使用创建 Apache Kafka 虚拟私有云 (VPC) 目标 AWS CLI
<a name="kafka-vpc-destination-create-cli"></a>

以下示例说明如何使用创建目的地 AWS CLI。

```
aws --region regions iot create-topic-rule-destination --destination-configuration 'vpcConfiguration={subnetIds=["subnet-123456789101230456"],securityGroups=[],vpcId="vpc-123456789101230456",roleArn="arn:aws:iam::123456789012:role/role-name"}'
```

运行此命令后，目标状态将为`IN_PROGRESS`。几分钟后，其状态将更改为 `ERROR`（如果命令不成功）或 `ENABLED`。当目标状态为 `ENABLED` 时，目标即可使用。

您可以使用以下命令获取 Apache Kafka 虚拟私有云 (VPC) 目标的状态。

```
aws --region region iot get-topic-rule-destination --arn "VPCDestinationARN"
```

### 使用控制台创建 Apache Kafka 虚拟私有云 (VPC) 目标 AWS IoT Core
<a name="kafka-vpc-destination-create-console"></a>

以下步骤介绍如何使用 AWS IoT Core 控制台创建目的地。

1. 导航到 AWS IoT Core 控制台。在左侧窗格的**操作**选项卡上，选择**目标**。

1. 输入以下字段的值。
   + ** - VPC ID**
   + **子网 IDs**
   + **安全组**

1. 选择具有创建网络接口所需权限的角色。前面的示例策略包含这些权限。

当 Apache Kafka Virtual Private Cloud (VPC) 目标状态为 “**已启用**” 时，它就可以使用了。