如何让boto3使用本地开发SQS队列(并避免错误`无法连接到端点URL`)

时间:2018-03-08 10:40:14

标签: python amazon-web-services boto3 amazon-sqs

我们正在使用Boto3连接到SQS队列。在测试/生产中,这很好,但对于本地开发,我使用的是fake_sqs版本。

而不是以某种方式伪造真实的AWS端点(如覆盖主机名),我选择使用虚假区域(富有想象力地称为test

我们代码的其他部分使用早期的boto库(而不是Boto3)。通过这种方式,可以通过指定名为BOTO_ENDPOINTS的环境变量来覆盖区域的端点主机名。它包含一个包含区域Boto配置的文件的路径。对于本地测试,它只包含一个

{ "sqs": { "test": "fake_sqs" } }

然而,Boto3忽略了这样一个envvar。它加载data/endpoints.json包中存储的botocore文件,当连接到我们的假区域时,我们收到错误EndpointConnectionError: Could not connect to the endpoint URL: "https://test.queue.amazonaws.com/"

我们继承的代码库已经深入嵌入了队列的配置,因此我们不能简单地告诉连接使用特定的端点(如this thread suggests)。

那么,是否有人知道如何让Boto3使用不同的主机名而不更改我们必须设置SQS连接的代码?

1 个答案:

答案 0 :(得分:2)

您可以在~/.aws/models中放入自定义端点文件,以替换botocore提供的默认端点文件。

此外,如果您在其他位置有数据覆盖,则可以使用AWS_DATA_PATH环境变量。