[英]Invoke AWS Lambda from a node.js app running on local system not S3
[英]AWS SDK S3 node.js connect to local MinIO server
我有一個用 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"
MinIO 服務器本身工作正常,我可以在本地登錄,創建存儲桶等。但是,當我嘗試使用 AWS SDK 為 node.js 將文件上傳到本地 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"
}),
});
后來我嘗試上傳 object:
await this.#s3Client.send(new PutObjectCommand({
Bucket: config.getAwsStorageWebflowBucketName(), // from env "test" value
Key: 'example.json',
Body: body, // a buffer
}));
我收到錯誤:
ERROR EndpointError: Custom endpoint `test.127.0.0.1://9001/` was not a valid URI
但是我可以從我的瀏覽器訪問地址http://test.localhost:9001/ 。 當我嘗試將值'http://localhost:9001/'
作為端點直接傳遞給S3Client
配置時,出現錯誤:
ERROR Error: getaddrinfo ENOTFOUND test.localhost
看起來端口值被忽略了我的 SDK。如何解決這個問題?
<是的,我知道有單獨的 MinIO SDK - 我想使用 AWS 提供的一個,配置中endpoint
參數的存在意味着它應該是可能的>
您需要做的就是將s3ForcePathStyle
配置選項設置為true
。 或者它可以有名稱forcePathStyle
。 在我的代碼中,我是這樣做的:
const awsConfig: S3.Types.ClientConfiguration = {
s3ForcePathStyle: true
};
我知道有一個類似的答案,但它確實解決了我的問題。
我還提供的其他選項:
sslEnabled: false
endpoint: http://localhost:port/
accessKeyId: dummy
secretAccessKey: dummydummy
S3 API 的偵聽器端點是端口 9000,9001 用於儀表板,使用 Minio 時也刪除區域,因為我認為 Minio 不需要它。 這樣,sdk 將不會為端點提供前綴“test”。
http://localhost:9001 不是正確的 URL
嘗試以下 & 它應該工作
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",
});
您可以從 minio 控制台設置 minio 區域。
Go 到Administrator -> Settings -> Region
您是否嘗試過選項“s3ForcePathStyle”? 我必須使用此配置才能使其在本地環境中運行
options.s3ForcePathStyle = true
請參閱https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3ForcePathStyle-property
所以在你的代碼中
...(globalConfig.isReleaseVersion() && {
endpoint: config.getAwsStorageEndpoint(), // from env "http://localhost:9001",
s3ForcePathStyle: true,
}),
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.