我们正在使用基于python的解决方案,它将从S3加载和存储文件。对于开发和本地测试,我们正在使用一个漂泊的环境,与码头和码头组成。我们有两个坞-组合定义-一个用于辅助后端服务(mongo、restheart、redis和s3),另一个包含使用后端服务的基于python的REST公开解决方案。
当我们的“前端”停靠-撰写组与restheart交互时,工作正常(在http调用中使用restheart容器的名称作为服务器主机)。当我们在scality/s3服务器上做同样的事情时,这是行不通的。
有趣的部分是,我们已经创建了一个测试套件,用于使用scality/s3服务器,该测试套件来自运行在主机(windows10)上的python测试套件,该测试套件通过流浪者通过漂流器传送到docker-compose组中scality/s3服务器的对接容器。我们使用了endpoint_url本地主机,它工作得非常完美。
在错误情况下(当前端web服务想要写入S3时),“前端”服务总是使用: botocore.exceptions.ClientError: a error发生(InvalidURI)响应,当调用CreateBucket操作:无法解析指定的URI时。检查您的restEndpoints配置。s3server总是以HTTP400和消息响应:
s3server {“名称”:“S3”、"clientIP":"::ffff:172.20.0.7“、"clientPort":49404、"httpMethod":"PUT”、"httpURL":"/raw-data“、"time":1521306054614、"req_id":"e385aae3c04d99fc824d”、"level":"info“、”message“:”接收到的请求“、”cdc8a2f93d2f“、"pid":83} s3server {"name":"S3”、"bytesSent":233,"clientIP":"::ffff:172.20.0.7","clientPort":49404,"httpMethod":"PUT","httpURL":"/raw-data",clientIP:1521306054639,"req_id":"e385aae3c04d99fc824d","elapsed_ms":25.907569,"level":"info","message":"responded with error XML","hostname":"cdc8a2f93d2f","pid":83}
我们使用以下boto3代码调用scality:
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')发布于 2018-03-21 16:40:48
这个问题很常见。在您安装在Docker容器中的config.json文件中,我假设有一个restEndpoints部分,您必须将域名与默认区域关联起来。这意味着您的前端域名应该指定在那里,匹配默认区域。请注意,默认区域并不会阻止您使用其他区域:如果不指定其他区域,则只需要在其中创建存储桶。
将来,我建议您在Zenko论坛上直接打开一个问题,因为这是大多数社区和核心开发人员所在的地方。
干杯,
劳尔
https://stackoverflow.com/questions/49339557
复制相似问题