本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程: 发送消息至 Amazon SQS 队列从 Amazon Virtual Private Cloud
在本教程中,您将学习如何通过安全的专用网络将消息发送到 Amazon SQS 队列。此网络包含一个包含 Amazon EC2 实例的 VPC。该实例通过接口 VPC 终端节点连接到 Amazon SQS,这允许您连接到 Amazon EC2 实例并将消息发送到 Amazon SQS 队列,即使网络与公共 Internet 断开连接也是如此。有关更多信息,请参阅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.com
或
。us-east-2
.queue.amazonaws.com
主题
第1步: 创建 Amazon EC2 密钥对
利用密钥对,您可以连接到 Amazon EC2 实例。它包含一个用于加密您的登录信息的公有密钥和一个用于解密该信息的私有密钥。
-
登录到 Amazon EC2 控制台
。 -
在导航菜单上的网络和安全性下,选择密钥对。
-
选择 Create Key Pair。
-
在创建密钥对对话框中,对于密钥对名称,输入
SQS-VPCE-Tutorial-Key-Pair
并选择创建。 -
您的浏览器会自动下载私有密钥文件
SQS-VPCE-Tutorial-Key-Pair.pem
。重要 将此文件保存在安全位置。EC2 不会再次为同一密钥对生成
.pem
文件。 -
要允许 SSH 客户端连接到您的 EC2 实例,请设置私有密钥文件的权限,以便只有您的用户有权读取该文件,例如:
chmod 400 SQS-VPCE-Tutorial-Key-Pair.pem
第2步: 创建 AWS 资源
要设置必要的基础设施,您必须使用 AWS CloudFormation 模板,它是用于创建包含 AWS 资源(例如 Amazon EC2 实例和 Amazon SQS 队列)的堆栈 的蓝图。
本教程的堆栈包括以下资源:
-
VPC 和关联的网络资源,包括子网、安全组、Internet 网关和路由表。
-
在 VPC 子网中启动的 Amazon EC2 实例
-
一个 Amazon SQS 队列
-
下载 AWS CloudFormation 模板已命名
SQS-VPCE-Tutorial-CloudFormation.yaml
从 GitHub. -
选择创建堆栈。
-
在选择模板页面上,依次选择将模板上传到 Amazon S3、
SQS-VPCE-SQS-Tutorial-CloudFormation.yaml
文件和下一步。 -
在指定详细信息页面中,执行以下操作:
-
对于堆栈名称,输入
SQS-VPCE-Tutorial-Stack
。 -
对于关键字名称,选择 SQS-VPCE-Tutorial-Key-Pair。
-
选择下一步。
-
-
在 Options (选项) 页面上,选择 Next (下一步)。
-
在 回顾 页面,在 能力 部分中,选择 我确认AWS CloudFormation 可能使用自定义名称创建IAM资源。,然后选择 创建.
AWS CloudFormation 开始创建堆栈,并显示 CREATE_IN_PROGRESS 状态。在此过程完成后,AWS CloudFormation 将显示 CREATE_COMPLETE 状态。
第3步: 确认您的EC2实例不可公开访问
您的 AWS 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 控制台
。 -
从队列列表中,选择由 AWS CloudFormation 模板(例如 VPCE-SQS-Tutorial-Stack-CFQueue-1ABCDEFGH2IJK)创建的队列。
-
在 Details (详细信息) 表上,复制 URL,例如 https://sqs.us-east-2.amazonaws.com/123456789012/。
-
从您的 EC2 实例,尝试使用以下命令向该队列发布消息,例如:
aws sqs send-message --region
us-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 VPC 终点 Amazon SQS
要将 VPC 连接到 Amazon SQS,您必须定义一个接口 VPC 终端节点。添加终端节点后,可以使用 VPC 中的 EC2 实例的 Amazon SQS API。这允许您将消息发送到 AWS 网络中的队列,而无需跨公共 Internet。
EC2 实例仍无法访问 Internet 上的其他 AWS 服务和终端节点。
-
登录到 Amazon VPC 控制台
。 -
在导航菜单上,选择终端节点 (Endpoints)。
-
选择 Create Endpoint。
-
在创建终端节点 (Create Endpoint) 页上,对于服务名称 (Service Name),选择 Amazon SQS 的服务名称。
注意 服务名称因当前 AWS 区域而异。例如,如果您在 美国东部(俄亥俄州),服务名称为 com.amazonaws公司。
us-east-2
.平方. -
对于 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。
-
选择 Close。
Amazon VPC 控制台将打开终端节点页面。
Amazon VPC 开始创建终端节点,并显示待处理 (pending) 状态。在此过程完成后,Amazon VPC 将显示可用 (available) 状态。
第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 --region
us-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" }
有关在由 AWS CloudFormation 模板创建的队列中接收和删除消息的信息(例如,VPCE-SQS-Tutorial-Stack-CFQueue-1ABCDEFGH2IJK),请参阅接收和删除消息(控制台)。
有关删除资源的信息,请参阅以下内容:
-
删除VPC端点 在 Amazon VPC 用户指南
-
终止实例 在 Amazon EC2 用户指南(适用于 Linux 实例)
-
删除您的VPC 在 Amazon VPC 用户指南
-
在上删除堆栈 AWS CloudFormation 控制台 在 AWS CloudFormation 用户指南
-
删除您的密钥对 在 Amazon EC2 用户指南(适用于 Linux 实例)