尝试让我的lambda putObject通过无服务器访问现有S3存储桶

时间:2018-09-26 16:10:35

标签: amazon-web-services amazon-s3 aws-lambda serverless-framework

在使用无服务器框架时,我很难为我的lambda分配权限到S3存储桶。

我有一个lamba函数,该函数最终将JSON配置文件写入S3存储桶,并希望通过Web向应用程序提供该服务。最初,我分别设置了一个S3存储桶(不在serverless.yml中),我的lamba在正确的S3存储桶中成功创建了文件,但是当我将其部署到AWS时出现“内部服务器错误”。我认为这是因为在部署上设置的权限未授予它对存储桶的写访问权。

我有点不知道该怎么做。我已经阅读了this thread,并尝试用以下方法补充我的serverless.yml

provider:
  name: aws
  runtime: nodejs8.10
  stage: dev
  region: eu-west-1
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:PutObject"
      Resource:
        Fn::Join:
          - ""
          - - "arn:aws:s3:::"
            - Ref: arn:aws:s3:::com.joostschuur.quizdata

在这种情况下,arn:aws:s3:::com.joostschuur.quizdata是我设置的手动创建的S3存储桶,并且希望我部署的lambda具有写访问权限。但是,这会导致部署错误:

  

CloudFormation模板无效:模板格式错误:   未解决的资源依赖关系   [arn:aws:s3 ::: com.joostschuur.quizdata]位于   模板

如果有一种方法可以将所有S3安装程序放入serverless.yml中(即指定存储桶,指定其中的文件应可通过Web访问,等等),我也很乐意这样做。 / p>

建议?

1 个答案:

答案 0 :(得分:1)

在iamRoleStatements规范中,有错误,应该是:

 iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:PutObject"
      Resource: arn:aws:s3:::com.joostschuur.quizdata

 iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:PutObject"
      Resource:
        Fn::Join:
          - ":"
          - - "arn:aws:s3::"
            - "com.joostschuur.quizdata"

此错误:

The CloudFormation template is invalid: Template format error: Unresolved resource dependencies [arn:aws:s3:::com.joostschuur.quizdata] in the Resources block of the template

涉及到:

    - Ref: arn:aws:s3:::com.joostschuur.quizdata

因为这不是对参数o变量的引用。

享受!