如何让 boto3 使用本地开发 SQS 队列(并避免错误“Could not connect to the endpoint URL”)
How to get boto3 to use a local development SQS queue (and avoid the error `Could not connect to the endpoint URL`)
我们正在使用 Boto3 连接到 SQS 队列。在 testing/production 中这很好,但对于本地开发,我使用的是 fake_sqs.
的版本
我没有以某种方式伪造真实的 AWS 端点(比如覆盖主机名),而是选择使用伪造的区域(想象中称为 test
)
我们代码的其他部分使用早期的 boto 库(与 Boto3 相反)。这样就可以通过指定名为 BOTO_ENDPOINTS
的环境变量来覆盖区域的端点主机名。这包含一个文件的路径,该文件包含区域的 Boto 配置。对于本地测试,它只包含一个
{
"sqs": {
"test": "fake_sqs"
}
}
然而,Boto3 忽略了这样的环境变量。它加载存储在 botocore
包中的 data/endpoints.json
文件,当连接到我们的假区域时,我们得到错误 EndpointConnectionError: Could not connect to the endpoint URL: "https://test.queue.amazonaws.com/"
。
我们继承的代码库已经非常深入地嵌入了队列的配置,因此我们不能简单地告诉连接使用特定端点(如 )。
那么,有谁知道让 Boto3 使用不同的主机名而不更改我们必须设置 SQS 连接的代码的方法吗?
您可以在 ~/.aws/models
中放入自定义端点文件以替换 botocore 提供的默认端点文件。
此外,如果您在其他位置有数据覆盖,则可以使用 AWS_DATA_PATH
环境变量。
我们正在使用 Boto3 连接到 SQS 队列。在 testing/production 中这很好,但对于本地开发,我使用的是 fake_sqs.
的版本我没有以某种方式伪造真实的 AWS 端点(比如覆盖主机名),而是选择使用伪造的区域(想象中称为 test
)
我们代码的其他部分使用早期的 boto 库(与 Boto3 相反)。这样就可以通过指定名为 BOTO_ENDPOINTS
的环境变量来覆盖区域的端点主机名。这包含一个文件的路径,该文件包含区域的 Boto 配置。对于本地测试,它只包含一个
{
"sqs": {
"test": "fake_sqs"
}
}
然而,Boto3 忽略了这样的环境变量。它加载存储在 botocore
包中的 data/endpoints.json
文件,当连接到我们的假区域时,我们得到错误 EndpointConnectionError: Could not connect to the endpoint URL: "https://test.queue.amazonaws.com/"
。
我们继承的代码库已经非常深入地嵌入了队列的配置,因此我们不能简单地告诉连接使用特定端点(如
那么,有谁知道让 Boto3 使用不同的主机名而不更改我们必须设置 SQS 连接的代码的方法吗?
您可以在 ~/.aws/models
中放入自定义端点文件以替换 botocore 提供的默认端点文件。
此外,如果您在其他位置有数据覆盖,则可以使用 AWS_DATA_PATH
环境变量。