gpt4 book ai didi

amazon-web-services - 使用Serverless时如何解决 “Error validating stack policy" "Unsupported action"?

转载 作者:行者123 更新时间:2023-12-03 07:25:24 25 4
gpt4 key购买 nike

我正在尝试编写一个无服务器脚本来创建具有 S3 权限的 AWS lambda 函数。

但是,我收到在堆栈更新后验证要应用的堆栈策略时出错:语句 {} 中不支持的操作“lambda:InvokeFunction”

这是迄今为止我的 serverless.yml 的片段:

    service: {{lambda_function_name}}
# You can pin your service to only deploy with a specific Serverless version
# frameworkVersion: "=X.X.X"

provider:
name: aws
runtime: nodejs8.10
role: {{&roleArn}}
stage: {{stage}}
region: {{region}}
vpc:
securityGroupIds:
- {{securityGroupId1}}
subnetIds:
- {{subnetId1}}
- {{subnetId2}}
stackPolicy:
- Effect: Allow
Principal:
Service: "s3.amazonaws.com"
Action: "lambda:InvokeFunction"
Condition:
ArnLike:
AWS:SourceArn:
- "arn:aws:s3:::{{bucket}}"

package:
include:
- app.js
- node_modules/**
- src/**
- bin/**
- tests/**

请注意,大括号内的值是环境变量。

一切正常,直到我尝试添加权限。这里出了什么问题?

最佳答案

我的解决方案是创建一个资源。

https://serverless.com/framework/docs/providers/aws/events/s3/

针对我的反对票,我想我应该给出进一步的解释。

通过无服务器,您可以使用纯 Cloudformation。我创建了一个自定义资源来向我的 S3 存储桶添加所需的权限。

# resource to add S3 lambdainvoke permissions
resources:
Resources:
# Cloudformation key, can be called anything.
LambdaPermission:
Type: "AWS::Lambda::Permission"
Properties:
FunctionName:
"Fn::GetAtt": # grabs function arn
- AppLambdaFunction
- Arn
Principal: "s3.amazonaws.com"
Action: "lambda:InvokeFunction"
SourceAccount:
Ref: AWS::AccountId
SourceArn: "arn:aws:s3:::bucket-name"

我希望这可以帮助任何遇到与我相同问题的人。

至于添加触发器,只能通过 Cloudformation 在尚不存在的存储桶上完成。

我的解决方法是在部署中简单地使用 AWS CLI 在现有 S3 存储桶上添加触发器。

有一个名为 serverless-plugin-existing-s3 的无服务器插件,旨在允许向现有 S3 存储桶添加触发器,但我发现了该插件的错误。这就是为什么我将坚持使用 CLI 来添加触发器。

https://github.com/matt-filion/serverless-external-s3-event

关于amazon-web-services - 使用Serverless时如何解决 “Error validating stack policy" "Unsupported action"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51275679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com