Пользовательская переменная для ENV всегда выдает ошибку при развертывании, бессерверная платформа

#aws-lambda #serverless-framework #aws-serverless

#aws-lambda #бессерверный фреймворк #aws-бессерверная

Вопрос:

Я пытаюсь использовать сервис S3 в своем проекте.

Я сохраняю пользовательскую переменную и использую в своем свойстве provider:

 service: snapnext

custom:
  imagesBucketName: snapnext-images

provider:
  name: aws
  runtime: nodejs6.10
  iamRoleStatements: # IAM permissions granted to all functions
    - Effect: Allow
      Action:
        - S3:GetObject
      Resource:
        - Fn::Join:
            - ''
            - - 'arn:aws:s3:::'
              - '${self:custom.imagesBucketName}/*'
  environment:
    IMAGES_BUCKET_NAME: ${self:custom.imagesBucketName}

functions:
  downloadImage: # Define a new Function
    handler: functions/downloadImage.handler
    events:
      - http:
          path: images
          method: post

resources:
  Resources:
    ImagesBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:custom.imagesBucketName}
        AccessControl: PublicRead

plugins:
  - serverless-offline
  

Когда я пытаюсь выполнить развертывание, я всегда получаю сообщение об ошибке, подобное этому
введите описание изображения здесь

Есть идеи, почему это происходит? И как лучше выполнить отладку в бессерверном фреймворке, особенно для .yml файла?

Комментарии:

1. Вы создали snapnext-images корзину до того, как попытались развернуть свое бессерверное приложение? Например, через веб-консоль или аналогичным образом?

Ответ №1:

Вы настроили serverless для создания корзины с именем snapnext-images , и когда он пытается это сделать, он не может, потому что… она уже существует.

При условии, что имя корзины доступно (имена корзин доступны всем), либо:

  • Убедитесь, что корзина не существует перед первым развертыванием, чтобы бессерверная платформа могла выполнять свою работу; или
  • Не определяйте корзину для создания и используйте существующую корзину; или
  • Выберите другое имя, если хотите создать новую корзину и сохранить существующую.

Это не имеет ничего общего с пользовательскими переменными.

Комментарии:

1. привет, Алекс, спасибо за ответ. Я уже пытаюсь удалить корзину в s3 services amp; cloud formation. после этого я запускаю команду serverless remove в своем терминале. При повторной попытке развертывания я получаю то же сообщение об ошибке

2. @EndySantoso корзина определенно существует. Если эта корзина ваша, убедитесь, что она удалена, если она не ваша, вам придется выбрать другое имя — корзины для разных регионов и учетных записей.

Ответ №2:

Вы пытаетесь создать ресурс s3 при развертывании своего стека. Вы получите эту ошибку только в том случае, если имя корзины уже существует. Имена корзин должны быть уникальными для разных регионов и учетных записей. Вам нужно быть осторожным при создании ресурсов корзины s3 при формировании облака.

  • Перед развертыванием убедитесь, что она не существует, многократное удаление stack не приводит к удалению корзины S3, созданной со стеком, если в ней есть объекты / файлы. Вам необходимо написать пользовательскую лямбду, запускаемую при событии удаления корзины, чтобы удалить все содержимое перед удалением корзины.