本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:从 Amazon 虚拟私有云将消息发送到 Amazon SQS 队列
在本教程中,您将学习如何通过安全的专用网络将消息发送到 Amazon SQS 队列。此网络包含一个包含 Amazon EC2 实例的 VPC。该实例 Amazon SQS 过接口 VPC 终端节点,允许您连接 Amazon EC2 实例并将消息发送到 Amazon SQS 队列,即使网络已从公共 Internet 断开连接。有关更多信息,请参阅 Amazon Virtual Private Cloud S 的Amazon SQS 的Amaz。
-
您只能将 Amazon Virtual Private Cloud 用于 HTTPS Amazon SQS 终端节点。
-
在将 Amazon SQS 配置为从 Amazon VPC 发送消息时,您必须启用私有 DNS 并按格式指定终端节点
sqs..us-east-2.amazonaws.com -
私有 DNS 不支持传统终端节点,例如
queue.amazonaws.com或。us-east-2.queue.amazonaws.com
主题
第 1 步:创建 Amazon EC2 key pair
一个密钥对允许您连接 Amazon EC2 实例。它包含一个用于加密您的登录信息的公有密钥和一个用于解密该信息的私有密钥。
-
登录到Amazon EC2 控制台
. -
在导航菜单上的网络和安全性下,选择密钥对。
-
选择创建密钥对。
-
在创建密钥对对话框中,对于密钥对名称,输入
SQS-VPCE-Tutorial-Key-Pair并选择创建。 -
您的浏览器会自动下载私有密钥文件
SQS-VPCE-Tutorial-Key-Pair.pem。重要 将此文件保存在安全位置。EC2 不会再次为同一密钥对生成
.pem文件。 -
要允许 SSH 客户端连接到您的 EC2 实例,请设置私有密钥文件的权限,以便只有您的用户有权读取该文件,例如:
chmod 400 SQS-VPCE-Tutorial-Key-Pair.pem
第 2 步:创建 Amazon资源
要设置必要的基础设施,您必须使用Amazon CloudFormation 模板,这是创建堆包括Amazon资源,例如 Amazon EC2 实例和 Amazon SQS 队列。
本教程的堆栈包括以下资源:
-
VPC 和关联的网络资源,包括子网、安全组、Internet 网关和路由表。
-
在 VPC 子网中启动的 Amazon EC2 实例
-
Amazon SQS 队列
-
下载Amazon CloudFormation模板命名为
SQS-VPCE-Tutorial-CloudFormation.yaml从 GitHub 中发送 -
选择创建堆栈。
-
在选择模板页面上,依次选择将模板上传到 Amazon S3、
SQS-VPCE-SQS-Tutorial-CloudFormation.yaml文件和下一步。 -
在指定详细信息页面中,执行以下操作:
-
对于堆栈名称,输入
SQS-VPCE-Tutorial-Stack。 -
对于关键字名称,选择 SQS-VPCE-Tutorial-Key-Pair。
-
选择 Next(下一步)。
-
-
在 Options (选项) 页面上,选择 Next (下一步)。
-
在存储库的审核页面,在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。
-
登录到Amazon EC2 控制台
. -
在导航菜单上的实例下,选择实例。
-
选择 SQS-VPCE-Tutorial-EC2Instance。
-
复制公有 DNS (IPv4) 下的主机名,例如 ec2-203-0-113-0.us-west-2.compute.amazonaws.com。
-
从包含您之前创建的密钥对的目录中,使用以下命令连接到实例,例如:
ssh -i SQS-VPCE-Tutorial-KeyPair.pem ec2-user@ec2-203-0-113-0.us-east-2.compute.amazonaws.com -
尝试连接到任何公有终端节点,例如:
ping amazon.com正如预期的那样,连接尝试失败。
-
登录 Amazon SQS 控制台
。 -
从队列列表中,选择由 Amazon CloudFormation 模板(例如 VPCE-SQS-Tutorial-Stack-CFQueue-1ABCDEFGH2IJK)创建的队列。
-
在存储库的详细信息例如,复制 URL,例如,https://sqs.us-east-2.amazonaws.com/123456789012/.
-
从您的 EC2 实例,尝试使用以下命令向该队列发布消息,例如:
aws sqs send-message --regionus-east-2--endpoint-urlhttps://sqs.us-east-2.amazonaws.com/--queue-urlhttps://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 服务和终端节点。
-
登录 Amazon VPC 控制台
。 -
在导航菜单上,选择终端节点 (Endpoints)。
-
选择 Create Endpoint(创建端点)。
-
在存储库的创建终端节点页面,对于服务名称中,选择 Amazon SQS 的服务名称。
注意 服务名称因当前而异Amazon区域。例如,如果您在美国东部(俄亥俄),则服务名称为com.amazonaws.
us-east-2.sqs. -
对于 VPC,选择 SQS-VPCE-Tutorial-VPC。
-
对于子网 (Subnets),选择其子网 ID (Subnet ID) 包含 SQS-VPCE-Tutorial-Subnet 的子网。
-
对于安全组 (Security group),选择选择安全组 (Select security groups),然后选择其组名称 (Group Name)包含 SQS VPCE Tutorial Security Group 的安全组。
-
选择Create endpoint。
创建接口 VPC 终端节点并显示其 ID,例如 vpce-0ab1cdef2ghi3j456k。
-
选择关闭。
Amazon VPC 控制台会打开 Endpoints(终端节点)页面。
Amazon VPC 开始创建终端节点,并显示待定status。该过程完成后,Amazon VPC 将显示可用status。
第 5 步:向您的 Amazon SQS 队列发送消息
现在您的 VPC 包含 Amazon SQS 终端节点,您可以连接到您的 EC2 实例并将消息发送到您的队列。
-
重新连接到您的 EC2 实例,例如:
ssh -i SQS-VPCE-Tutorial-KeyPair.pem ec2-user@ec2-203-0-113-0.us-east-2.compute.amazonaws.com -
重新尝试使用以下命令向该队列发布消息,例如:
aws sqs send-message --regionus-east-2--endpoint-urlhttps://sqs.us-east-2.amazonaws.com/--queue-urlhttps://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),请参阅接收和删除消息(控制台)。
有关删除资源的信息,请参阅以下内容:
-
删除 VPC 终端节点中的Amazon VPC User Guide
-
终止您的实例中的适用于 Linux 实例的 Amazon EC2 用户指南
-
删除 VPC中的Amazon VPC User Guide
-
删除堆栈Amazon CloudFormation控制台中的Amazon CloudFormation用户指南
-
删除您的密钥对中的适用于 Linux 实例的 Amazon EC2 用户指南