首页 > 解决方案 > 传输加速是否有效?响应位置和对象 URL 不同

问题描述

我在反应环境中使用 aws-sdk 将视频上传到 S3。并使用加速端点实现更快的数据传输。

端点是bucket-name.s3-accelerate.amazonaws.com

我将选项更改为“启用”以加速存储桶属性中的传输。

下面是我将文件对象上传到 s3 的代码。

import AWS from "aws-sdk";

require("dotenv").config();

const AWS_ACCESS_KEY = process.env.REACT_APP_AWS_ACCESS_KEY;
const AWS_SECRET_KEY = process.env.REACT_APP_AWS_SECRET_KEY;
const BUCKET = process.env.REACT_APP_BUCKET_NAME;
const REGION = process.env.REACT_APP_REGION;

AWS.config.update({
  accessKeyId: AWS_ACCESS_KEY,
  secretAccessKey: AWS_SECRET_KEY,
  region: REGION,
  useAccelerateEndpoint: true, //----> the options is here.
});

async function uploadFileToS3(file) {
  const params = {
    Bucket: BUCKET,
    Key: file.name,
    ContentType: 'multipart/form-data',
    Body: file
  };

  const accelerateOption = {
     Bucket: BUCKET,
     AccelerateConfiguration: { Status: 'Enabled'},
     ExpectedBucketOwner: process.env.REACT_APP_BUCKET_OWNER_ID,
  };

  const s3 = new AWS.S3();

  try {
    s3.putBucketAccelerateConfiguration(accelerateOption, (err, data) => {
      if (err) console.log(err)
      else console.log(data, 'data put accelerate') //----> this is just object {}
    });

    s3.upload(params)
      .on("httpUploadProgress", progress => {
        const { loaded, total } = progress;
        const progressPercentage = parseInt((loaded / total) * 100);
        console.log(progressPercentage);
       })
      .send((err, data) => {
          console.log(data, 'data data');
       });
  } catch (err) {
    console.log(err);
  }
}

数据对象的location属性中的url中肯定有s3-accelerate。(在 console.log 中)

{
  Bucket: "newvideouploada2f16b1e1d6a4671947657067c79824b121029-dev"
  ETag: "\"d0b40e4afca23137bee89b54dd2ebcf3-8\""
  Key: "Raw Run __ Race Against the Storm.mp4"
  Location: "https://newvideouploada2f16b1e1d6a4671947657067c79824b121029-dev.s3-accelerate.amazonaws.com/Raw+Run+__+Race+Aga
}

但是,我上传的视频属性的对象 URL 不存在。这是应该的吗?

我是否以错误的方式使用 Transfer Acceleration?我看到了文档,AWS 说使用putBucketAccelerateConfiguration. 但是当我 console.log 有注意到响应。

请让我知道如何在 Javascript awd-sdk 中使用传输加速。

标签: javascriptamazon-web-servicesamazon-s3

解决方案


如果您在某些 AWS 计算(EC2、ECS、EKS、Lambda)上运行此代码,并且存储桶与您的计算位于同一区域,则考虑使用VPC Gateway endpointsfor S3。更多信息在这里。如果计算和存储桶位于不同的区域,请考虑将VPC Endpoints for S3与区域间VPC 对等互连。注意:VPC 网关终端节点是免费的,而 VPC 终端节点不是。

启用后至少需要半小时才能BucketAccelerate生效。您不需要在每次上传文件时都调用它,除非您在完成后还暂停存储桶加速。

当您想使用 AWS 主干网络更快地上传数据时,存储桶加速会有所帮助(可能是用户位于区域“A”而存储桶位于区域“B”,或者您想要上传更大的文件,在这种情况下它会到达最近的边缘位置,然后使用 AWS 主干网络)。您可以使用工具检查各个地区在速度方面的潜在改进。

使用此功能时还会产生额外费用。检查 S3定价页面上的数据传输部分。


推荐阅读