提问人:anonymus1205 提问时间:11/12/2023 更新时间:11/12/2023 访问量:51
如何通过 DuckDB 访问模拟的 s3 存储桶
How to access mocked s3 bucket via DuckDB
问:
我有一个使用 AWS S3 的无服务器 python 代码,即 DuckDB API。
代码工作正常,重点是此代码的单元测试。
我正在使用 unittest 和 moto python 框架来测试此代码。
问题是将 duckdb 连接配置为指向模拟的 s3 存储桶。
这是 duckdb 配置的代码片段:
self.db_conn.execute(query=f"SET s3_region='{os.environ['AWS_REGION']}';")
self.db_conn.execute(query=f"SET s3_access_key_id='{self.tenant_ctx_aws_credentials['Credentials']['AccessKeyId']}';")
self.db_conn.execute(query=f"SET s3_secret_access_key='{self.tenant_ctx_aws_credentials['Credentials']['SecretAccessKey']}';")
self.db_conn.execute(query=f"SET s3_session_token='{self.tenant_ctx_aws_credentials['Credentials']['SessionToken']}';")
self.db_conn.execute(query=f"SET memory_limit='{self.memory_limit}';")
这是来自lambda函数的单元测试文件,该函数使用moto来模拟AWS服务:
@mock_s3
@mock_glue
@mock_ssm
@mock_sts
@mock_iam
@mock.patch.dict(os.environ)
class TestLambdaFunction(unittest.TestCase):
maxDiff = None
def setUp(self):
try:
# S3 setup:
self.s3_client = boto3.client('s3', region_name=self.aws_region)
self.s3_resource = boto3.resource('s3', region_name=self.aws_region)
self.s3_bucket = self.s3_resource.create_bucket(Bucket=self.dp_s3_bucket_name, CreateBucketConfiguration={
'LocationConstraint': self.aws_region})
所以我正在尝试这个模拟的 s3 存储桶将由 duckdb 访问。
当我运行此测试时,我收到以下错误:
IO Error: HTTP GET error on 'https://{test_bucket_name}.s3.amazonaws.com/{s3_path}/test_file.parquet' (HTTP 400)
我试图使用boto3客户端endpoint_url参数,但没有帮助。
此外,据我所知,当 moto 运行时,它运行在 localhost:5000 上,所以我也尝试将 duckdb 配置指向这个 doamin:port,但它也对我不起作用。
答: 暂无答案
评论