【问题标题】:Does AWS CPP S3 SDK support "Transfer acceleration"AWS CPP S3 SDK 是否支持“传输加速”
【发布时间】:2017-10-18 15:55:33
【问题描述】:

我在存储桶上启用了“传输加速”。但我没有看到我的 C++ 应用程序的上传速度有任何改进。我已等待 AWS 文档中提到的 20 多分钟。

SDK 是否默认支持“传输加速”或者是否有运行时标志或编译器标志?我没有在 SDK 代码中发现任何内容。

谢谢

【问题讨论】:

    标签: c++ amazon-web-services amazon-s3 aws-sdk-cpp


    【解决方案1】:

    目前,没有一个配置选项可以简单地打开传输加速。但是,您可以在客户端配置中使用端点覆盖来设置加速端点。

    【讨论】:

      【解决方案2】:

      我做了什么来启用(工作)传输加速:

      • 在 AWS 面板“传输加速”的存储桶配置中设置为启用

      • 向我在 C++ 应用程序中使用的 IAM 用户添加权限 s3::PutAccelerateConfiguration

      • 将以下代码添加到 s3 传输配置(bucket_ 是您的存储桶名称,最终 URL 必须与 AWS 面板“传输加速”中显示的一致):

          Aws::Client::ClientConfiguration config;
          /* other configuration options */
          config.endpointOverride = bucket_ + ".s3-accelerate.amazonaws.com";
      
      • 转移前请求加速到铲斗...(here 中的文档)
          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 (@987654322 @)

      【讨论】:

        【解决方案3】:

        什么对我有用:

        1. 在 AWS 控制台中启用 S3 传输加速

        2. 配置客户端时,只使用加速端点服务:

          clientConfig-&gt;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);
        
        
        ...
        
         >>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-13
          • 2023-03-12
          • 1970-01-01
          • 2017-01-10
          • 2018-02-16
          • 2020-05-07
          • 1970-01-01
          相关资源
          最近更新 更多