

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

# 为 Amazon SNS 创建 Amazon VPC 终端节点
<a name="sns-vpc-create-endpoint"></a>

要将消息从 Amazon VPC 发布到您的 Amazon SNS 主题，请创建一个接口 VPC 终端节点。然后，您可以将消息发布到主题，同时保留您利用该 VPC 管理的网络内的流量。

使用以下信息创建终端节点并测试 VPC 与 Amazon SNS 之间的连接。或者，有关可帮助您从头开始的演练，请参阅[从 Amazon VPC 发布 Amazon SNS 消息](sns-vpc-tutorial.md)。

## 创建终端节点
<a name="sns-vpc-endpoint-create"></a>

您可以使用 AWS 管理控制台、AWS CLI、AWS 开发工具包、Amazon SNS API 或 AWS CloudFormation 在 VPC 中创建 Amazon SNS 终端节点。

有关使用 Amazon VPC 控制台或 AWS CLI 创建和配置终端节点的信息，请参阅 *Amazon VPC 用户指南*中的[创建接口终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html#create-interface-endpoint)。

**重要**  
您只能将 Amazon Virtual Private Cloud 与 HTTPS Amazon SNS 端点一起使用。  
在创建终端节点时，请将 Amazon SNS 指定为您希望 VPC 连接到的服务。在 Amazon VPC 控制台中，服务名称因区域而异。例如，如果您选择美国东部（弗吉尼亚北部），则服务名称为 **com.amazonaws.us-east-1.sns**。  
当您将 Amazon SNS 配置为从 Amazon VPC 发送消息时，必须启用私有 DNS 并按格式 `sns.us-east-2.amazonaws.com` 指定端点。  
私有 DNS 不支持传统端点，例如 `queue.amazonaws.com` 或 `us-east-2.queue.amazonaws.com`。

有关使用 AWS CloudFormation 创建和配置端点的信息，请参阅 *AWS CloudFormation 用户指南*中的 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html) 资源。

## 测试您的 VPC 和 Amazon SNS 之间的连接
<a name="sns-vpc-publish"></a>

在为 Amazon SNS 创建终端节点后，您可以将消息从您的 VPC 发布到 Amazon SNS 主题。要测试此连接，请执行以下操作：

1. 连接到位于您的 VPC 中的 Amazon EC2 实例。有关连接的信息，请参阅 Amazon EC2 文档中的[连接到您的 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/DeveloperGuide/AccessingInstances.html)或[连接到您的 Windows 实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html)。

   例如，要使用 SSH 客户端连接到 Linux 实例，请从终端运行以下命令：

   ```
   $ ssh -i ec2-key-pair.pem ec2-user@instance-hostname
   ```

   其中：
   + *ec2-key-pair.pem* 是包含 Amazon EC2 在您创建实例时提供的密钥对的文件。
   + *instance-hostname* 是实例的公有主机名。要在 [Amazon EC2 控制台](https://console.aws.amazon.com/ec2)中获取该主机名：请选择**实例**，选择您的实例，然后找到**公有 DNS** 的值。

1. 在您的实例中，将 Amazon SNS [https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html](https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html) 命令与 AWS CLI 结合使用。您可以使用以下命令将简单的消息发送到主题：

   ```
   $ aws sns publish --region aws-region --topic-arn sns-topic-arn --message "Hello"
   ```

   其中：
   + *aws-region* 是主题所在的 AWS 区域。
   + *sns-topic-arn* 是主题的 Amazon Resource Name (ARN)。从 [Amazon SNS 控制台](https://console.aws.amazon.com/sns/home)获取该 ARN：选择 **Topics**（主题），查找您的主题，然后找到 **ARN** 列中对应的值。

   如果 Amazon SNS 已成功收到消息，终端会打印一个消息 ID，如下所示：

   ```
   {
      "MessageId": "6c96dfff-0fdf-5b37-88d7-8cba910a8b64"
   }
   ```