如何让 Lambda 函数递归调用自身

How to allow Lambda function to call itself recursively

我有一个在 Lambda 上运行的应用程序,可以通过 APIGateway 访问。

在我的 SAM 模板中,我已将其设置为 APIGateway 可以调用我的函数。

  ConfigLambdaPermission:
    Type: "AWS::Lambda::Permission"
    DependsOn:
    - MyFunction
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref MyFunction
      Principal: apigateway.amazonaws.com

但现在我需要应用递归调用它自己的函数。我想我可以像这样将一个新的 ConfigLambdaPermission 附加到我现有的。

  ConfigLambdaPermission:
    Type: "AWS::Lambda::Permission"
    DependsOn:
    - MyFunction
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref MyFunction
      Principal: apigateway.amazonaws.com
  ConfigLambdaPermission:
    Type: "AWS::Lambda::Permission"
    DependsOn:
    - MyFunction
    Properties:
      Action: lambda:InvokeFunction
      FunctionName: !Ref MyFunction
      Principal: lambda.amazonaws.com

但是,当该函数尝试调用自身时,会抛出以下错误:

2019-01-27 14:27:56 - Aws::Lambda::Errors::AccessDeniedException -
User: arn:aws:sts::666666666666:assumed-role/my-app-MyFunction-166U166U166U1/my-app-MyFunction-1DJIJCDO1DJIJ 
is not authorized to perform: lambda:InvokeFunction on resource:
arn:aws:lambda:us-west-2:666666666666:function:my-app-MyFunction-1DJIJCDO1DJIJ:

我不确定我是否错误地添加了权限,或者我是否需要执行其他一些步骤来通知 AWS 权限已更改。

知道如何正确地允许此 lambda 函数调用自身吗?

本例中的Principal将成为Lambda本身运行的IAM角色,如下(替换aws-account-id角色名称 视情况而定):

Principal: arn:aws:iam::aws-account-id:role/role-name