繁体   English   中英

如何配置 AWS Amplify 的 Storage.put 以使用传输加速的 s3 存储桶域?

[英]How to configure AWS Amplify's Storage.put to use a transfer accelerated s3 bucket domain?

我已经使用Cloudformation启用了S3 传输加速

文档说,启用后,开发人员需要让他们的客户使用新的加速域名。

例如从mybucket.s3.us-east-1.amazonaws.combucketname.s3-accelerate.amazonaws.com

但是,AWS Amplify 的 Storage.put 方法使用的是在配置期间定义的存储桶名称,如下所示:

Amplify.configure({
  Storage: {
    AWSS3: {
      bucket: AWS_BUCKET_NAME,
      region: AWS_REGION
    }
  }
})

既然这里没有域名,只有一个bucket名,那怎么设置成访问加速的endpoint呢?

在我看来,Amplify Storage 不支持这种开箱即用的配置,所以如果你想使用 Transfer Acceleration,你需要使用 javascript 的标准 S3 客户端,如下所示:

// obtain credentials from cognito to make uploads to s3...
let albumBucketName = "BUCKET_NAME";
let bucketRegion = "REGION";
let IdentityPoolId = "IDENTITY_POOL_ID";

AWS.config.update({
region: bucketRegion,
credentials: new AWS.CognitoIdentityCredentials({
    IdentityPoolId: IdentityPoolId
})
});

// configure the S3 client to use accelerate - note useAccelerateEndpoint flag
const options = {
    signatureVersion: 'v4',
    region: bucketRegion, // same as your bucket
    endpoint: new AWS.Endpoint('your-bucket-name.s3-accelerate.amazonaws.com'),    
    useAccelerateEndpoint: true,  
};
const s3 = new AWS.S3(options);

// then use the client...
// ...

class AWS.S3 的参考:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html

我也在为此苦苦挣扎,现在偶然发现使用 Storage.put 启用它:

  1. 像往常一样指定您的正常存储桶名称
  2. 在 Storage.put 的选项 object 中,设置 useAccelerateEndpoint: true (我从上面的答案中得到)

如果您进行测试,并查看 Chrome 开发人员工具的网络控制台,您将看到 Amplify 为加速端点指定了正确的路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM