如何允许Lambda函数递归调用

时间:2019-01-27 19:55:18

标签: amazon-web-services aws-lambda amazon-iam aws-sam

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

在我的SAM模板中,我对其进行了设置,以便APIGateway可以调用我的函数。

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

但是现在我需要该应用程序以递归方式调用其自己的函数。我以为我可以像这样将新的ConfigLambdaPermission附加到我现有的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函数自行调用?

1 个答案:

答案 0 :(得分:1)

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

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