我在我的 serverless.yml
中写入资源,如下:
resources:
Resources:
RestApi :
Type : AWS::ApiGateway::RestApi
Properties :
Body : ${file(./swagger.yaml)}
LoginApiToInvokeLambda:
Type: AWS::Lambda::Permission
Properties:
FunctionName: login
Action: lambda:InvokeFunction
Principal: apigateway.amazonaws.com
当我部署SLS时,发生以下错误:
发生错误:loginapitoinvokelambda-找不到函数:arn:aws:aws:ap-northeast-1:xxxxxxxxxxxxxxxx:function:api-dev-login(api-dev-login)P>
在最初的部署中,我认为在创建Lambda功能之前设置了权限。因此,我在serverless.yml中评论了 LoginApiToInvokeLambda
。我再次sls deploy
,它成功了。但是Apigateway无权调用Lambda。之后,我恢复了注释的部分,并且sls deploy
。最后,我能够将lambda Invoke的许可给予Apigateway。
有没有办法同时完成此操作?
您可以在resources
节中使用DependsOn
云的功能。
resources:
Resources:
# ...
LoginApiToInvokeLambda:
Type: AWS::Lambda::Permission
DependsOn: LoginLambdaFunction
Properties:
FunctionName: login
Action: lambda:InvokeFunction
Principal: apigateway.amazonaws.com
我假设您的lambda函数密钥是login
,它将转换为LoginLambdaFunction
。如果不是,请检查有关资源如何命名的无服务器文档。
在简短的无服务器中,将您的配置转换为云形式模板,并且资源部分允许您自定义生成的内容,这就是为什么您可以使用DependsOn
解决问题。