我在我的存储桶上启用了“传输加速”。但我没有看到我的 C++ 应用程序的上传速度有任何改进。我已等待 AWS 文档中提到的 20 多分钟。
SDK是否默认支持“传输加速”或者是否有运行时标志或编译器标志?我没有在 SDK 代码中发现任何内容。
谢谢
我在我的存储桶上启用了“传输加速”。但我没有看到我的 C++ 应用程序的上传速度有任何改进。我已等待 AWS 文档中提到的 20 多分钟。
SDK是否默认支持“传输加速”或者是否有运行时标志或编译器标志?我没有在 SDK 代码中发现任何内容。
谢谢
目前,没有一个配置选项可以简单地打开传输加速。但是,您可以在客户端配置中使用端点覆盖来设置加速端点。
我为启用(工作)传输加速所做的工作:
在 AWS 面板“Transfer Acceleration”的存储桶配置中设置为enabled。
向我在 C++ 应用程序中使用的 IAM 用户添加权限s3::PutAccelerateConfiguration
将以下代码添加到 s3 传输配置(bucket_ 是您的存储桶名称,最终 URL 必须与 AWS 面板“传输加速”中显示的 URL 匹配):
Aws::Client::ClientConfiguration config;
/* other configuration options */
config.endpointOverride = bucket_ + ".s3-accelerate.amazonaws.com";
auto s3Client = Aws::MakeShared<Aws::S3::S3Client>("Uploader",
Aws::Auth::AWSCredentials(id_, key_), config);
Aws::S3::Model::PutBucketAccelerateConfigurationRequest bucket_accel;
bucket_accel.SetAccelerateConfiguration(
Aws::S3::Model::AccelerateConfiguration().WithStatus(
Aws::S3::Model::BucketAccelerateStatus::Enabled));
bucket_accel.SetBucket(bucket_);
s3Client->PutBucketAccelerateConfiguration(bucket_accel);
您可以在 AWS sdk 的详细日志中检查您的代码正在使用加速入口点,您还可以检查在传输开始之前是否调用了/?accelerate ( info )
什么对我有用:
在 AWS 控制台中启用 S3 Transfer Acceleration
配置客户端时,仅使用加速端点服务:
clientConfig->endpointOverride = "s3-accelerate.amazonaws.com";
@gabry-您的解决方案非常接近,我认为它对我不起作用的原因可能是由于最初发布以来的SDK更改,因为更改相对较小。或者可能是因为我正在为与传输管理器一起使用的请求构建放置对象模板。
查看日志(调试级别),SDK 会自动将 transferManager::UploadFile() 中使用的存储桶与覆盖的端点连接起来。我收到未解决的主机错误,因为请求的主机看起来像:
[DEBUG] host: myBucket.myBucket.s3-accelerate.amazonaws.com
这样,我仍然可以保持相同的 S3_BUCKET 宏名称,同时仅在实例化新配置以进行上传时选择性地调用它。
例如
<<
...
auto putTemplate = new Aws::S3::Model::PutObjectRequest();
putTemplate->SetStorageClass(STORAGE_CLASS);
transferConfig->putObjectTemplate = *putTemplate;
auto multiTemplate = new Aws::S3::Model::CreateMultipartUploadRequest();
multiTemplate->SetStorageClass(STORAGE_CLASS);
transferConfig->createMultipartUploadTemplate = *multiTemplate;
transferMgr = Aws::Transfer::TransferManager::Create(*transferConfig);
auto transferHandle = transferMgr->UploadFile(localFile, S3_BUCKET, s3File);
transferMgr = Aws::Transfer::TransferManager::Create(*transferConfig);
...
>>