【问题标题】:Give Lambda Invoke permission to ApiGateway with one deployment通过一次部署向 ApiGateway 授予 Lambda Invoke 权限
【发布时间】:2019-07-30 19:01:34
【问题描述】:

我在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 deploy 时,出现以下错误:

发生错误: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调用的权限了。

有没有办法同时做到这一点?

【问题讨论】:

  • @John Rotenstein 谢谢!

标签: amazon-web-services aws-api-gateway serverless-framework serverless


【解决方案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 解决问题的原因。

【讨论】:

  • 如您所说,我能够通过使用 DependsOn 来解决问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2022-08-24
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 2019-12-03
  • 2021-10-16
相关资源
最近更新 更多