Я использую serverless
и nodejs
.
Когда я запускаю как serverless-offline
локально с моими учетными данными AWS, тогда все отлично работает как s3.upload
, так и s3.putObject
.
Но очень странно, после развертывания использует sls deploy --stage dev
, работал только s3.putObject
. s3.upload
получил ошибку InvalidAccessKeyId
. И не может прочитать изображение, если использует s3.putObject
.
serverless.yml
файл, подобный этому:
iamRoleStatements:
- Effect: Allow
Action:
- s3:*
Resource: "arn:aws:s3:::my-bk-${opt:stage, self:provider.stage}/*"
Код загрузки использует NodeJS, например:
const params = {
Body: fileInfo.buffer,
Bucket: this.bucketName,
Key: urlKey,
ACL: this.acl,
ContentType: fileInfo.mimetype,
};
return await this.s3
.putObject(params) // but .upload not worked in real Aws.
.promise()
.then(
data => {
const publicUrlFull = this.s3.getSignedUrl("getObject", { Key: urlKey, Bucket: this.bucketName });
const publicUrl = publicUrlFull.split("?")[0];
return { urlKey, publicUrl };
},
error => {
throw error;
}
);
Любая помощь!