教程:从 Amazon Virtual Private Cloud 将消息发送到 Amazon SQS 队列 - Amazon Simple Queue Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

教程:从 Amazon Virtual Private Cloud 将消息发送到 Amazon SQS 队列

在本教程中,您将了解如何通过安全的专用网络将消息发送到 Amazon SQS 队列。此网络包含一个包含 Amazon EC2 实例的 VPC。该实例通过接口 VPC 端点连接到 Amazon SQS,即使网络已从公共互联网断开连接,您也可以连接 Amazon EC2 实例并将消息发送到 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 密钥对

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

  1. 登录 Amazon EC2 控制台

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

  3. 选择创建密钥对

  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:创建 Amazon 资源

要设置必要的基础设施,您必须使用 Amazon CloudFormation 模板,该模板是用于创建由 Amazon EC2 实例和 Amazon SQS 队列等 Amazon 资源组成的堆栈的蓝图。

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

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

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

  • Amazon SQS 队列

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

  2. 登录 Amazon CloudFormation 控制台

  3. 选择创建堆栈

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

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

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

    2. 对于 KeyName,请选择 SQS-vpce-Tutorial-Key-p air。

    3. 请选择 Next(下一步)

  6. 选项页面上,选择下一步

  7. 在 “查看” 页面的 “能力” 部分,选择我确认这AmazonCloudFormation 可能会创建带有自定义名称的 IAM 资源。 ,然后选择 “创建”。

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-Key-Pair.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 创建 Amazon VPC 端点

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

注意

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

  1. 登录 Amazon VPC 控制台

  2. 在导航菜单上,选择端点

  3. 选择创建端点

  4. 创建端点页面上,对于服务名称,选择 Amazon SQS 的服务名称。

    注意

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

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

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

  7. 对于安全组,选择选择安全组,然后选择其组名称包含 SQS VPCE Tutorial Security Group 的安全组。

  8. 选择创建端点

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

  9. 选择关闭

    Amazon VPC 控制台会打开端点页面。

Amazon VPC 开始创建端点,并显示待处理状态。在此过程完成后,Amazon VPC 将显示可用状态。

步骤 5:向 Amazon SQS 队列发送消息

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

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

    ssh -i SQS-VPCE-Tutorial-Key-Pair.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),请参阅接收和删除消息(控制台)

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