【问题标题】:how to prevent aws-sdk from setting bucket as subdomain for an ip address as endpoint如何防止 aws-sdk 将存储桶设置为 IP 地址的子域作为端点
【发布时间】:2020-11-23 13:51:07
【问题描述】:

我从一家公司获得了对象存储服务,他们使用 aws s3 结构。所以您可以使用为 aws s3 设计的库来连接到那里的存储(如 boto3 用于 python 和 aws-sdk 用于 javascript 的库)。我使用 aws -sdk。

我需要使用一个 IP 地址来访问存储,所以我需要将端点设置为他们的 IP 地址,它工作正常。问题是这家公司的文件存储系统与aws有点不同。虽然 aws 使用存储桶名称作为子域,但该公司在文件路径中使用存储桶名称。

aws:bucket.amazon.com
他们的:/public/bucket/...

使用 boto3 时它很好,但是当我使用 aws-sdk 并在参数中设置存储桶时,aws-sdk 将存储桶设置为 IP 地址的子域,它不再工作了。

因为它在使用 boto3 时可以正常工作,所以我认为它也必须与 aws-sdk 一起使用。所以我正在寻找一种方法来防止 aws-sdk 将存储桶设置为子域并以不同的方式使用它。

    const AWS = require("aws-sdk");
    const ep = new AWS.Endpoint("http://<ip address>");
    global.s3 = new AWS.S3({
      apiVersion: "2006-03-01",
      endpoint: ep,
    }); 
   

    const params = {
          Bucket: `${process.env.AWS_BUCKET}`,
          Prefix: `${_path}`,
        };

    const result = await s3.listObjects(params).promise();

上面代码的结果是这个错误: Inaccessible host: &lt;bucket&gt;.&lt;ip address&gt;. This service may not be available in the us-east-1' region.'

whick 是正确的,因为该地址不存在。但是我该如何解决这个问题。

当我获取存储桶列表并且未设置存储桶时,它可以正常工作。

【问题讨论】:

    标签: javascript node.js amazon-s3 aws-sdk


    【解决方案1】:

    经过三天的寻找答案,终于找到了解决方案。 aws s3 有两种处理桶的方式。

    1. :在子域中使用它来连接它

    2. :在对象的路径中使用它

    在我的情况下,我应该使用第二种方法,方法是配置 aws-sdk 并将 s3ForcePathStyle 设置为 true。像这样:AWS.config.s3ForcePathStyle = true;

    问题解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多