我是否需要在 ECS 所在的同一 VPC 中创建 SQS?

Do I need to create the SQS in the same VPC as the ECS is in?

我在VPC里面有一个ECS集群。 ECS 必须从 SQS 读取。那么,我是否需要在同一个 VPC 中创建 SQS 才能进行通信?另外,如果说,我想在 VPC 之外进行通信,我该怎么做?

SQS 队列不属于特定的 VPC。 creating/configuring 队列时不涉及网络。

对 SQS 队列的访问完全由 IAM 权限管理。

使用 ECS,您必须正确配置您的任务执行角色。例如,如下所示的策略允许从特定队列发送、接收和删除消息:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sqs:DeleteMessage",
                "sqs:ReceiveMessage",
                "sqs:SendMessage"
            ],
            "Resource": "arn:aws:sqs:<region>:<account>:<queue name>"
        }
    ]
}

另见 Authentication and Access Control for Amazon SQS

虽然 SQS 是 AWS 托管服务,可以通过 public 互联网端点直接访问而没有任何 VPC 限制,但从 ECS 应用程序与 SQS 交互的角度来看,我建议创建 VPC PrivateLink 端点到 SQS,这是将使您免于通过 Internet 网关进行额外的跳跃旅行。

如果您不创建 VPC 端点,流量将按以下方式路由。

AWS ECS App ----> NAT Gateway(If ECS is in private subnet of VPC otherwise this is not needed) ----> Internet Gateway ----> AWS SQS.

如果您确实创建了到 SQS 的 VPC 端点,那么流量将类似于下面这样,它删除了通过互联网的跃点。

AWS ECS App ----> AWS SQS(Over PrivateLink)

这里有一些关于 VPC 端点如何工作的文档和一些为 SQS 创建 VPC 端点的指南。

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-vpc-endpoints.html