【问题标题】:Lambda can't send message to SQSLambda 无法向 SQS 发送消息
【发布时间】:2020-02-18 10:30:03
【问题描述】:

我无法从我的 lambda 向我的 SQS 队列发送消息 功能。这是我的设置

  • Lambda 连接到默认 VPC 中的 3 个公有子网
  • 存在 SQS 的 VPC 端点

我正在尝试使用以下命令通过 boto3 发送消息:

import json
import boto3

sqs = boto3.client("sqs")
sqs.send_message(
    QueueUrl="https://sqs.eu-west-1.amazonaws.com/012345678901/my_queue",
    MessageBody=json.dumps({"message": "hello"}),
)

lambda 正在超时(60 秒)。在调试时,我注意到 boto3 客户端连接到eu-west-1.queue.amazonaws.com 而不是 sqs.eu-west-1.amazonaws.com,我在 QueueUrl 参数中指定。 通过进一步调试,我注意到eu-west-1.queue.amazonaws.com 解析为 Lambda 中的公共地址,而 sqs.eu-west-1.amazonaws.com 解析为私有地址。我不 了解为什么会这样。

【问题讨论】:

  • 您在使用 vpc 的公共子网中,但 lambda 应该在使用 NAT 网关的私有子网中以与互联网通信。
  • @Lamanus,我不想通过 ipublic 网络进行交流。我创建了一个 VPC 终端节点,以便能够在我的 VPC 中私下访问 SQS。

标签: aws-lambda boto3


【解决方案1】:

我在GitHub 上问了同样的问题,因此感谢 swetashre 在那里回答我。事实证明,我需要在创建 SQS 客户端时指定端点 URL。

sqs = boto3.client("sqs", endpoint_url="https://sqs.eu-west-1.amazonaws.com")

【讨论】:

  • 救了我的命。谢谢老兄!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2019-10-09
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
相关资源
最近更新 更多