Безсерверный s3.upload получил ошибку InvalidAccessKeyId только в реальном AWS, но putObject - PullRequest
0 голосов
/ 02 апреля 2020

Я использую 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;
    }
  );

Любая помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...