教程:从 Amazon 虚拟私有云向 Amazon SQS 队列发送消息 - Amazon Simple Queue Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

教程:从 Amazon 虚拟私有云向 Amazon SQS 队列发送消息

在本教程中,您将学习如何通过安全的私有网络将消息发送到 Amazon SQS 队列。此网络包含一个包含 Amazon EC2 实例的 VPC。该实 Amazon SQS 过接口 VPC 终端节点,即使网络与公共 Internet 断开连接,您也可以连接到 Amazon EC2 实例并将消息发送到 Amazon SQS 队列。有关更多信息,请参阅Amazon SQS 的 Amazon SQS 的 Amazon Virtual Private Cloud 终端节点

重要
  • 您只能将 Amazon Virtual Private Cloud 与 HTTPS Amazon SQS 终端节点结合使用。

  • 在将 Amazon SQS 配置为从 Amazon VPC 发送消息时,您必须启用私有 DNS,并且指定格式为sqs.us-east-2.amazonaws.com

  • 私有 DNS 不支持传统终端节点,例如 queue.amazonaws.comus-east-2.queue.amazonaws.com

第 1 步:创建 Amazon EC2 key pair

A密钥对允许您连接到 Amazon EC2 实例。它包含一个用于加密您的登录信息的公有密钥和一个用于解密该信息的私有密钥。

  1. 登录到Amazon EC2 控制台

  2. 在导航菜单上的网络和安全性下,选择密钥对

  3. 选择 Create Key Pair

  4. 创建密钥对对话框中,对于密钥对名称,输入 SQS-VPCE-Tutorial-Key-Pair 并选择创建

  5. 您的浏览器会自动下载私有密钥文件 SQS-VPCE-Tutorial-Key-Pair.pem

    重要

    将此文件保存在安全位置。EC2 不会再次为同一密钥对生成 .pem 文件。

  6. 要允许 SSH 客户端连接到您的 EC2 实例,请设置私有密钥文件的权限,以便只有您的用户有权读取该文件,例如:

    chmod 400 SQS-VPCE-Tutorial-Key-Pair.pem

第 2 步:CreateAmazonresources

要设置必要基础架构,您必须使用Amazon CloudFormation 模板,它是用于创建堆栈包括Amazon资源,例如 Amazon EC2 实例和 Amazon SQS 队列。

本教程的堆栈包括以下资源:

  • VPC 和关联的网络资源,包括子网、安全组、Internet 网关和路由表。

  • 在 VPC 子网中启动的 Amazon EC2 实例

  • Amazon SQS 队列

  1. 下载Amazon CloudFormation模板名为SQS-VPCE-Tutorial-CloudFormation.yaml从 GitHub。

  2. 登录到 Amazon CloudFormation 控制台

  3. 选择创建堆栈

  4. 选择模板页面上,依次选择将模板上传到 Amazon S3SQS-VPCE-SQS-Tutorial-CloudFormation.yaml 文件和下一步

  5. 指定详细信息页面中,执行以下操作:

    1. 对于堆栈名称,输入 SQS-VPCE-Tutorial-Stack

    2. 对于关键字名称,选择 SQS-VPCE-Tutorial-Key-Pair

    3. 选择 Next

  6. Options (选项) 页面上,选择 Next (下一步)

  7. 在存储库的审核页面上,在Capabilities部分,选择我承认AmazonCloudFormation 可使用自定义名称创建 IAM 资源。,然后选择Create

Amazon CloudFormation 开始创建堆栈,并显示 CREATE_IN_PROGRESS 状态。在此过程完成后,Amazon CloudFormation 将显示 CREATE_COMPLETE 状态。

第 3 步:确认您的 EC2 实例不可公开访问

您的 Amazon CloudFormation 模板在 VPC 中启动名为 SQS-VPCE-Tutorial-EC2-Instance 的 EC2 实例。此 EC2 实例不允许出站流量,并且无法将消息发送到 Amazon SQS。要验证这一点,您必须连接到实例,请尝试连接到公有终端节点,然后尝试将消息发送到 Amazon SQS。

  1. 登录到Amazon EC2 控制台

  2. 在导航菜单上的实例下,选择实例

  3. 选择 SQS-VPCE-Tutorial-EC2Instance

  4. 复制公有 DNS (IPv4) 下的主机名,例如 ec2-203-0-113-0.us-west-2.compute.amazonaws.com

  5. 从包含您之前创建的密钥对的目录中,使用以下命令连接到实例,例如:

    ssh -i SQS-VPCE-Tutorial-KeyPair.pem ec2-user@ec2-203-0-113-0.us-east-2.compute.amazonaws.com
  6. 尝试连接到任何公有终端节点,例如:

    ping amazon.com

    正如预期的那样,连接尝试失败。

  7. 登录到Amazon SQS 控制台

  8. 从队列列表中,选择由 Amazon CloudFormation 模板(例如 VPCE-SQS-Tutorial-Stack-CFQueue-1ABCDEFGH2IJK)创建的队列。

  9. 在存储库的详细信息表中,复制 URL,例如https://sqs.us-east-2.amazonaws.com/123456789012/

  10. 从您的 EC2 实例,尝试使用以下命令向该队列发布消息,例如:

    aws sqs send-message --region us-east-2 --endpoint-url https://sqs.us-east-2.amazonaws.com/ --queue-url https://sqs.us-east-2.amazonaws.com/123456789012/ --message-body "Hello from Amazon SQS."

    正如预期的那样,发送尝试失败。

    重要

    稍后,当您为 Amazon SQS 创建 VPC 终端节点时,您的发送尝试将成功。

第 4 步:为 Amazon SQS 创建一个亚马逊 VPC 终端节点

要将 VPC 连接到 Amazon SQS,您必须定义一个接口 VPC 终端节点。添加终端节点后,您可以使用 VPC 中的 EC2 实例中的 Amazon SQS API。这允许您将消息发送到 Amazon 网络中的队列,而无需跨公共 Internet。

注意

EC2 实例仍无法访问 Internet 上的其他 Amazon 服务和终端节点。

  1. 登录 Amazon VPC 控制台

  2. 在导航菜单上,选择终端节点 (Endpoints)

  3. 选择 Create Endpoint

  4. 在存储库的创建终端节点页面, 用于服务名称中,选择 Amazon SQS 的服务名称。

    注意

    服务名称因当前Amazon区域。例如,如果您位于美国东部(俄亥俄),则服务名称为com.amazonaws.us-east-2.sqs

  5. 对于 VPC,选择 SQS-VPCE-Tutorial-VPC

  6. 对于子网 (Subnets),选择其子网 ID (Subnet ID) 包含 SQS-VPCE-Tutorial-Subnet 的子网。

  7. 对于安全组 (Security group),选择选择安全组 (Select security groups),然后选择其组名称 (Group Name)包含 SQS VPCE Tutorial Security Group 的安全组。

  8. 选择Create endpoint

    创建接口 VPC 终端节点并显示其 ID,例如 vpce-0ab1cdef2ghi3j456k

  9. 选择 Close (关闭)

    Amazon VPC 控制台将打开终端节点页.

Amazon VPC 开始创建终端节点,并显示Pending状态。在此过程完成后,Amazon VPC 将显示available状态。

第 5 步:向您的 Amazon SQS 队列发送消息

现在您的 VPC 包含一个用于 Amazon SQS 的终端节点,您可以连接到您的 EC2 实例并将消息发送到您的队列。

  1. 重新连接到您的 EC2 实例,例如:

    ssh -i SQS-VPCE-Tutorial-KeyPair.pem ec2-user@ec2-203-0-113-0.us-east-2.compute.amazonaws.com
  2. 重新尝试使用以下命令向该队列发布消息,例如:

    aws sqs send-message --region us-east-2 --endpoint-url https://sqs.us-east-2.amazonaws.com/ --queue-url https://sqs.us-east-2.amazonaws.com/123456789012/ --message-body "Hello from Amazon SQS."

    发送尝试成功,并且将显示消息正文的 MD5 摘要和消息 ID,例如:

    { "MD5OfMessageBody": "a1bcd2ef3g45hi678j90klmn12p34qr5", "MessageId": "12345a67-8901-2345-bc67-d890123e45fg" }

有关在由 Amazon CloudFormation 模板创建的队列中接收和删除消息的信息(例如,VPCE-SQS-Tutorial-Stack-CFQueue-1ABCDEFGH2IJK),请参阅接收和删除消息(控制台)

有关删除资源的信息,请参阅以下内容: