首页 > 解决方案 > AWS S3 在同一个 EC2 上运行

问题描述

我有一项服务在运行 AWS-S3 的同一实例上运行,在这种情况下,将文件推送到 S3 存储桶时我不必提供凭据。

这是我的代码,但它向我显示了这个错误:

message: 'Access Denied',
code: 'AccessDenied',
region: null,
time: 2019-12-13T22:30:56.325Z,
requestId: '3F6AA6FAC6787B36',
extendedRequestId:'yQ4y6uthaTDBr6SuoXbI0g0cLWY40SWleATXrBijKrAbhcmsWTYAL+wCBlZpPM/6ytRc8qbIJP4=',
cfId: undefined,
statusCode: 403,
retryable: false,
retryDelay: 44.582589819600926

这是代码:

public async writeFileToS3(datasetFile: any): Promise<boolean> {
        try {
            this.s3Bucket = new S3({ region: 'us-east-1' });
            const readFile = this.util.promisify(this.fileWriter.readFile);
            const unlinkFile = this.util.promisify(this.fileWriter.unlink);
            const s3BucketName = this.appConfig.get<string>(
                'infra.fileWriter.bucket'
            );
            const data = await readFile(datasetFile.path);
            const params = {
                Bucket: s3BucketName,
                Key: datasetFile.originalname,
                Body: data,
                ACL: 'public-read'
            };

            return await new Promise<boolean>((resolve, reject) => {
                this.s3Bucket.upload(params, function(err: any) {
                    unlinkFile(datasetFile.path);
                    if (err) {
                        console.log('await call: ' + err);
                        reject(err);
                    } else {
                        resolve(true);
                    }
                });
            });
        } catch (err) {
            console.log(err);
            throw new OperationError('Error writing file to S3');
        }

注意:AWS 配置得很好,因为我有另一个使用 Python 与 S3 交互的服务,它工作正常,但是这个服务使用 aws-sdk 进行 Javascript。

标签: node.jstypescriptamazon-web-servicesamazon-s3

解决方案


问题已解决,这是因为提供了regionACL. 只需删除它们即可解决问题。


推荐阅读