【发布时间】:2018-09-26 16:10:34
【问题描述】:
在使用无服务器框架时,我一直在尝试为我的 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 访问等),我也很乐意这样做。
建议?
【问题讨论】:
-
您需要删除您的存储桶,然后更新模板以具有 S3 资源部分,然后在 IAM 角色中引用它。或者,您可以在 IAM 角色部分的模板中硬编码 S3 存储桶的 ARN
标签: amazon-web-services amazon-s3 aws-lambda serverless-framework