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

Trying to give my lambda putObject access to an existing S3 bucket via serverless

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

我有一个 lamba 函数,它最终将 JSON 配置文件写入 S3 存储桶,我想通过 Web 为应用程序提供该存储桶。我最初单独设置了一个 S3 存储桶(不在 serverless.yml 中),并且我的 lamba 成功地在正确的 S3 存储桶中创建了文件,但是当我将它部署到 AWS 时我得到了一个 'internal server error'。我认为这是因为在部署时设置的权限未授予它对存储桶的写入权限。

我对如何做到这一点有点不解。例如,我已阅读 ,并尝试用以下内容补充我的 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 是我设置并希望我部署的 lambda 具有写入权限的手动创建的 S3 存储桶。但是,这会导致部署错误:

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

如果有办法将所有 S3 设置放入 serverless.yml(即指定存储桶,指定其中的文件应可通过网络访问等),我很乐意这样做太棒了。

建议?

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

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

尽情享受吧!