通过一个部署授予Lambda Invoke许可



我在我的 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解决问题。

相关内容

  • 没有找到相关文章

最新更新