首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法让soto与非AWS服务对话

无法让soto与非AWS服务对话
EN

Stack Overflow用户
提问于 2021-05-07 01:36:32
回答 1查看 34关注 0票数 1

我已经使用Swift soto包成功实现了Amazon Web Service S3存储应用程序。

我像这样创建S3服务对象:

代码语言:javascript
复制
func s3Maker() -> S3
{
    return S3(client: client, region: Region(rawValue: awsConfiguration.region), endpoint: awsConfiguration.endpoint, timeout: commandTimeout)
}

在使用亚马逊网络服务时,awsConfiguration.region是亚马逊网络服务的标准区域名称之一(在本例中是"us-west-2"),.endpointnil (这告诉soto使用标准的"amazonaws.com“域名)。

一切都很好。

现在,我想重用此代码来与模拟亚马逊网络服务S3应用程序接口的非亚马逊网络服务提供商(从BackBlaze开始)进行通信。我的理解是,您只需在创建服务对象时更改端点和区域即可。

我有一个awsConfiguration对象的子类,它只是具有不同的region ("us-west-000")和endpoint ("backblazeb2.com")属性值,但它不起作用。

当代码运行时,它无法获取存储桶中的对象列表,并返回错误:"unable to read bucket content“

为了对此进行调试,我到处运行Fiddler来监视从我的机器发送的HTTP请求。当我运行亚马逊网络服务版本时,我看到两个HTTPS请求:http://qr3dev1.s3.us-west-2.amazonaws.com:443https://qr3dev1.s3.us-west-2.amazonaws.com/?list-type=2,这两个请求都成功了。

但是,当我将区域和端点更改为BackBlaze时,代码什么也不做。Soto从不发送任何HTTP请求。代码只返回错误。

有没有人每次都遇到这种情况,知道如何调试它,或者知道让soto与非AWS服务对话的秘密?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-13 23:37:53

事实证明,“问题”只是我的大脑、soto文档和代码之间的阻抗不匹配。

感谢Adam Fowler ( soto的作者之一),他为我提供了一些示例代码,演示了endpoint的正确用法。

endpoint属性必须是一个URL片段,而不仅仅是服务的域名(这是我的假设):

代码语言:javascript
复制
func s3Maker() -> S3
{
    return S3(client: client,
              region: Region(rawValue: "us-region-1"),
            endpoint: "https://s3.us-region-1.non-aws-server.com") // <-- CORRECT
//          endpoint: "non-aws-server.com" ) <--- wrong
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67423314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档