har*_*kon 4 amazon-s3 docker boto3 docker-compose
我们正在使用基于 python 的解决方案,该解决方案将从 S3 加载和存储文件。对于开发和本地测试,我们使用带有 docker 和 docker-compose 的 vagrant 环境。我们有两个 docker-compose 定义 - 一个用于辅助后端服务(mongo、restheart、redis 和 s3),另一个包含使用后端服务的基于 python 的 REST API 公开解决方案。
当我们的“前端”docker-compose 组与restheart 交互时,效果很好(在http 调用中使用restheart 容器的名称作为服务器主机)。当我们对 scality/s3 服务器执行相同操作时,这是行不通的。
有趣的是,我们创建了一个测试套件,用于使用在主机(windows10)上运行的 python 测试套件中的 scality/s3 服务器,通过转发端口通过 vagrant 到 docker- 中的 scality/s3 服务器的 docker 容器。组成组。我们使用了endpoint_url localhost,它工作得很好。
在错误情况下(当前端 Web 服务想要写入 S3 时),“前端”服务始终响应: botocore.exceptions.ClientError: 调用 CreateBucket 操作时发生错误 (InvalidURI):无法解析指定的 URI。检查您的restEndpoints 配置。s3server 总是以 http 400 和消息响应:
s3服务器 | {“名称”:“S3”,“clientIP”:“::ffff:172.20.0.7”,“clientPort”:49404,“httpMethod”:“PUT”,“httpURL”:“/原始数据”,“时间“:1521306054614,”req_id“:“e385aae3c04d99fc824d”,“级别”:“信息”,“消息”:“收到请求”,“主机名”:“cdc8a2f93d2f”,“pid”:83} s3server | {“名称”:“S3”,“bytesSent”:233,“clientIP”:“::ffff:172.20.0.7”,“clientPort”:49404,“httpMethod”:“PUT”,“httpURL”:“/ raw -data", "httpCode":400 ,"time":1521306054639,"req_id":"e385aae3c04d99fc824d","elapsed_ms":25.907569,"level":"info","message":"响应错误 XML ","主机名":"cdc8a2f93d2f","pid":83}
我们使用以下 boto3 代码调用缩放比例:
s3 = boto3.resource('s3',
aws_access_key_id='accessKey1',
aws_secret_access_key='verySecretKey1',
endpoint_url='http://s3server:8000')
s3_client = boto3.client('s3',
aws_access_key_id='accessKey1',
aws_secret_access_key='verySecretKey1',
endpoint_url='http://s3server:8000')
s3.create_bucket(Bucket='raw-data') # here the exception comes
bucket = self.s3.Bucket('raw-data')
Run Code Online (Sandbox Code Playgroud)
小智 5
这个问题很常见。我假设在您挂载到 Docker 容器中的config.json文件中,有一个 restEndpoints 部分,您必须在其中将域名与默认区域相关联。这意味着您的前端域名应在其中指定,与默认区域匹配。请注意,默认区域不会阻止您使用其他区域:如果您不另外指定,它只是创建存储桶的位置。
将来,我建议您直接在Zenko 论坛上提出问题,因为这是大多数社区和核心开发人员所在的地方。
干杯,
劳尔
归档时间: |
|
查看次数: |
2241 次 |
最近记录: |