在使用无服务器框架时,我很难为我的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>
建议?
答案 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变量的引用。
享受!