【问题标题】:boto3 sqs incorrect url when not specified endpoint url未指定端点 url 时,boto3 sqs 不正确的 url
【发布时间】:2021-04-16 04:54:40
【问题描述】:

创建boto3客户端时是否总是需要指定endpoint_url? 为什么我不能指定QueueUrl 作为方法参数?

# boto3==1.16.51
import boto3


client = boto3.client('sqs')

messages = client.receive_message(
    QueueUrl='https://sqs.eu-central-1.amazonaws.com/325672072888/event-queue-test',
    WaitTimeSeconds=2,
    MaxNumberOfMessages=1,
    AttributeNames=["All"],
)

例外:

botocore.exceptions.ClientError:发生错误(InvalidAddress) 调用 ReceiveMessage 操作时:地址 https://eu-central-1.queue.amazonaws.com/ 对此无效 端点。

似乎它采用 sqs 队列的默认值。但是为什么它不从QueueUrl中获取价值

【问题讨论】:

  • endpoint_urlQueueUrl 是两个不同的东西。错误表示QueueUrl 不正确。
  • @Marcin 但是https://eu-central-1.queue.amazonaws.com/ url 与指定的QueueUrl 不同。

标签: python boto3 amazon-sqs boto


【解决方案1】:

错误消息的 url 与 QueueUrl 不同,因为 AWS CLI 和 boto3 使用 legacy 端点,其中之一是 eu-central-1.queue.amazonaws.com。来自docs

如果您使用 AWS CLI 或适用于 Python 的开发工具包,则可以使用以下旧式终端节点

您可以使用以下方法进行检查:

print(client._endpoint)

【讨论】:

  • 感谢您的回复。我的问题有点不同。为什么当我指定完整的QueueUrl 时它不起作用?我应该总是指定boto3.client('sqs', endpoint_url='...')吗?
  • @johanson 您的QueueUrl 一定是不正确的。它独立于endpoint_url。正确的 QueueUrl 适用于旧版和当前 endpoint_url 端点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
相关资源
最近更新 更多