我在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:lambda:ap-northeast-1:xxxxxxxxxxxx:function:api-dev-login(服务:AWSLambda;状态代码:404;错误代码:ResourceNotFoundException >
在初始部署中,我认为在创建lambda函数之前已设置权限。因此,我在serverless.yml中注释了LoginApiToInvokeLambda
。我再次sls deploy
成功了。但是ApiGateway没有调用lambda的权限。之后,我恢复了注释掉的部分和sls deploy
。最终,我能够授予ApiGateway Lambda调用权限。
有没有办法同时做到这一点?
答案 0 :(得分:1)
您可以在resources
部分中使用DependsOn
functionality of CloudFormation。
resources:
Resources:
# ...
LoginApiToInvokeLambda:
Type: AWS::Lambda::Permission
DependsOn: LoginLambdaFunction
Properties:
FunctionName: login
Action: lambda:InvokeFunction
Principal: apigateway.amazonaws.com
我假设您的lambda功能键为login
,它被转换为LoginLambdaFunction
。如果没有,请查看how the resources get named上的无服务器文档。
简而言之,无服务器将您的配置转换为CloudFormation模板,资源部分允许您自定义生成的内容,这就是为什么您可以使用DependsOn
解决问题的原因。