为适用于macos的AWS SDK启用传输加速

时间:2017-04-22 08:52:45

标签: objective-c macos amazon-web-services amazon-s3

免责声明:我最初在代码审核上发布了this,但由于代码目前无效,我建议在SO上发帖。

我已将官方AWS SDK iOS(v 2.5.0)框架(专注于S3)转换为macOS,所有内容都按预期上传和下载。不过,我还希望使用Transfer Acceleration for S3启用AWSTransferManager。我知道您可以使用AWSTransferUtility启用传输加速(TA),但该实用程序使用仅有效50分钟的预签名请求(对iOS而非macOS有用)。我希望能够传输大型文件,即使使用传输加速也可能需要数小时。

我已经编辑了AWS的原始代码以启用AWSTransferManager的TA,但是,由于上传/下载请求的最终签名失败,我仍然无法正常工作。错误消息是:

Message=The request signature we calculated does not match the signature you provided. Check your key and signing method.}]

在大多数情况下,我编辑了AWSSignature,AWSS3TransferManager和AWSService(AWSServiceConfiguration)文件。我认为签名错误的发生是因为我正在编辑路径,或者没有正确code signing更改的URL(可能在AWSSignature.m中)。由于我不确定我的代码在哪里中断,我创建了一个存储库,其中包含编译框架所需的所有AWS SKD macOS文件,包括unit test。如果我运行test初始化对AWSServiceConfiguration的调用:

 AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc]initWithRegion:[region aws_regionTypeValue]                                                                            credentialsProvider:credentialsProvider
                                                                  accelerateModeEnabled:@(NO)
                                                                             bucketName:self.testBucketName];

然后一切都按预期工作,测试文件正确上传和下载。但是,如果我尝试打开传输加速(我已经确定我的存储桶已启用加速),则会因上面的代码签名错误而失败。

AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc]initWithRegion:[region aws_regionTypeValue]                                                                            credentialsProvider:credentialsProvider
                                                                  accelerateModeEnabled:@(YES)
                                                                             bucketName:self.testBucketName];

事实上,测试脚本似乎正在尝试上传比testfile(3 Mb)实际大得多的文件。我认为我的错误与URL正文的签名有关,因为文件的大小似乎是错误的。

我知道发现这个错误需要比SO通常所期望的更大的努力,并且它不是许多人会投入的东西(但希望有些),因为它涉及非常复杂的代码并且它非常耗时。但是,我相信如果我们能够做到这一点,那么很多人都可以找到适用于macOS + Transfer Acceleration的AWS SKD框架非常有用。

我希望你能看看尝试找出破坏代码签名的问题。

此处提供了框架+测试示例的所有代码:https://github.com/trondkr/aws-sdk-macos-TA。要运行单元测试,您需要为AWS S3提供密钥和访问ID,以及启用了传输加速的存储桶名称。

感谢。干杯,特隆德

0 个答案:

没有答案