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

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

教程:从亚马逊虚拟私共 Cloud 将消息发送到 Amazon SQS 队列

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

重要
  • 您只能在 HTTPS Amazon SQS 终端节点上使用Amazon Virtual Private Cloud。

  • 当您将 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 允许您连接 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. 选择Create Stack(创建堆栈)。

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

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

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

    2. 对于 KeyName,选择 SQS-VPCE 教程密钥对

    3. 选择 Next(下一步)

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

  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-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. 详细信息表上,复制网址,例如 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. 在导航菜单上,选择终端节点 (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 控制台会打开 Endpoints(终端节点)页面。

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

步骤 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),请参阅接收和删除消息(控制台)

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