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

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

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

本教程将向您演示如何通过安全的私有网络将消息发送到 Amazon SQS 队列。该网络包括:

  • 一个包含 Amazon EC2 实例的 VPC。

  • 一个接口 VPC 端点,它允许 Amazon EC2 实例在未使用公共互联网的情况下连接到 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.rproxy.govskope.casqs.us-east-2.api.aws 的端点。

  • Amazon SQS 还通过 PrivateLink 使用终端节点服务支持 FIPS 终端节点。com.amazonaws.region.sqs-fips您可以连接到格式为 sqs-fips.region.amazonaws.com 的 FIPS 端点。

  • 在 Amazon Virtual Private Cloud 中使用双栈终端节点时,将使用 IPv4 和 IPv6发送请求。

  • 私有 DNS 不支持传统端点,例如 queue.amazonaws.com.rproxy.govskope.caus-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:创建 AWS 资源

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

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

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

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

  • 一个 Amazon SQS 队列

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

  2. 登录 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. 选择下一步

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

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

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

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

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

  1. 登录 Amazon EC2 控制台

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

  3. 选择 SQS-VPCE-。Tutorial-EC2Instance

  4. 复制公有 DNS 下的主机名,例如 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. 从队列列表中,选择由您的 CloudFormation 模板创建的队列,例如 vpce-sqs-Tutorial-Stack-- 1 IJK。CFQueue ABCDEFGH2

  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。这使您无需通过公共 Internet 即可向 AWS 网络中的队列发送消息。

注意

EC2 实例仍然无法访问互联网上的其他 AWS 服务和终端节点。

  1. 登录 Amazon VPC 控制台

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

  3. 选择创建端点

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

    注意

    服务名称因当前 AWS 区域而异。例如,如果您在美国东部(俄亥俄州),则服务名称为 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" }

有关从您的 CloudFormation 模板创建的队列中接收和删除消息的信息(例如,vpce-sqs-Tutorial-Stack-- 1 IJK),请参阅。CFQueue ABCDEFGH2 在 Amazon SQS 中接收和删除消息

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