ENV的自定义变量在部署无服务器框架时始终出错

时间:2019-03-05 16:12:33

标签: aws-lambda serverless-framework aws-serverless

我正在尝试在项目中使用S3服务。

我保存自定义变量并在我的提供者属性中使用:

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

当我尝试部署时,总是收到这样的错误消息 enter image description here

知道为什么会这样吗? 以及如何以更好的方式在无服务器框架中进行调试,尤其是对.yml文件进行调试?

2 个答案:

答案 0 :(得分:1)

您已将无服务器配置为创建名称为snapnext-images的存储桶,当它尝试执行此操作时,它不会,因为...它已经存在。

提供的存储桶名称可用(存储桶名称与所有人共享),

  • 确保在首次部署之前存储桶不存在,以便无服务器可以完成其工作;或
  • 请勿定义要创建的存储桶并使用您现有的存储桶;或
  • 如果要创建新存储桶并保留现有存储桶,请选择其他名称。

这与自定义变量无关。

答案 1 :(得分:0)

您正在尝试在部署堆栈时创建s3资源。仅当存储桶名称已存在时,您将得到此错误。存储桶名称在区域和帐户之间应该是唯一的。 您需要在云形成中创建s3存储桶资源时要小心/专心。

  • 在部署之前确保它不存在 如果存储桶中有对象/文件,那么多次删除堆栈不会删除使用该堆栈创建的S3存储桶。您需要在删除存储桶事件时触发一个自定义lambda,以删除所有内容,然后再删除存储桶。