AWS SDK S3 node.js 连接到本地 MinIO 服务器

Fur*_*man 5 amazon-s3 node.js minio

我有用 Node.js 编写的应用程序服务器,它将文件上传到 AWS S3 存储。为此,我使用https://www.npmjs.com/package/aws-sdk,当我连接并上传到我的 AWS 生产存储时,它工作正常。但是在开发过程中,我想将文件上传到本地 MinIO 服务器(从 docker 镜像创建https://hub.docker.com/r/minio/minio/):

docker run -p 9000:9000 -p 9001:9001 \
  quay.io/minio/minio server /minio --console-address ":9001"
Run Code Online (Sandbox Code Playgroud)

MinIO 服务器本身工作正常,我可以在本地登录、创建存储桶等。但是,当我尝试使用适用于 Node.js 的 AWS SDK 将文件上传到本地 MinIO 存储时,我无法执行此操作:

import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';

#s3Client = new S3Client({
    credentials: {
        accessKeyId: config.getAwsStorageAccessKeyId(), // from env variables
        secretAccessKey: config.getAwsStorageSecretAccessKey(),
    },
    ...(globalConfig.isReleaseVersion() && {
        endpoint: config.getAwsStorageEndpoint(), // from env "http://localhost:9001"
    }),
});
Run Code Online (Sandbox Code Playgroud)

后来我尝试上传对象:

await this.#s3Client.send(new PutObjectCommand({
    Bucket: config.getAwsStorageWebflowBucketName(), // from env "test" value
    Key: 'example.json',
    Body: body, // a buffer
}));
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ERROR EndpointError: Custom endpoint `test.127.0.0.1://9001/` was not a valid URI
Run Code Online (Sandbox Code Playgroud)

但是我可以从浏览器访问地址http://test.localhost:9001/ 。当我尝试将值'http://localhost:9001/'作为端点直接传递给S3Client配置时,出现错误:

ERROR Error: getaddrinfo ENOTFOUND test.localhost
Run Code Online (Sandbox Code Playgroud)

看来我的 SDK 忽略了端口值。如何解决这个问题?

<是的,我知道有单独的 MinIO SDK - 我想使用 AWS 提供的一个,endpoint配置中参数的存在意味着它应该是可能的>

小智 0

http://localhost:9001 不是正确的 URL

  • 9001是访问minio控制台的地方
  • 9000 是提供 S3 API 的端口

运行minio时控制台输出

尝试以下操作,它应该可以工作

const s3Client = new S3Client({
  region: "region_set_in_minio",
  credentials: {
    accessKeyId: "minio_access_key",
    secretAccessKey: "minio_secret_access_key",
  },
  endpoint: "http://127.0.0.1:9000",
});
Run Code Online (Sandbox Code Playgroud)

您可以从 minio 控制台设置 minio 区域。

Administrator -> Settings -> Region

更改minio区域