← 返回首页
serverless-examples/aws-node-recursive-function at master · localstack/serverless-examples · GitHub
Skip to content

Navigation Menu

Toggle navigation
Sign in
Appearance settings
Search or jump to...

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Resetting focus

Latest commit

 

History

History
 
 
 master
Top

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
View all files

README.md

Recursive Lambda function Invocation

This is an example of a function that will recursively call itself.

Warning It's possible to run into infinite loops with recursive calls.

Test your functions locally before deploying to production.

Use cases

Running a function recursively will allow you to pass state information to the next function call.

Setup

1. Deploy the function with sls deploy

The sls deploy command will give you back the function ARN (Amazon Resource Name) needed for the function to recursively call itself.

The message should look something like:

Service Information service: recursive-invocation-example stage: dev region: us-east-1 api keys: None endpoints: None functions: recursive-invocation-example-dev-recursiveExample: arn:aws:lambda:us-east-1:488110005556:function:recursive-invocation-example-dev-recursiveExample

The ARN in this example is arn:aws:lambda:us-east-1:488110005556:function:recursive-invocation-example-dev-recursiveExample. If you need to retrieve this data again run the serverless info command.

2. Take your newly created function's ARN and replace the custom: functionARN value yourFunctionARN value in serverless.yml with your ARN.

Before:

# in serverless.yml custom: functionARN: yourFunctionARN

After:

# in serverless.yml custom: functionARN: arn:aws:lambda:us-east-1:488110005556:function:recursive-invocation-example-dev-recursiveExample

3. Uncomment the IAM statement in serverless.yml

# in serverless.yml provider: name: aws runtime: nodejs8.10 iamRoleStatements: - Effect: "Allow" Action: - "lambda:InvokeFunction" Resource: ${self:custom.functionARN}

The custom: functionARN value is referenced as a serverless variable in the IAM statement the variable syntax ${self:custom.functionARN}

For more information on serverless variables. Read the variable docs.

4. Redeploy the function to enable the new IAM role.

Run sls deploy again to redeploy the service and apply the new IAM role needed for the function to call itself.

Invoking

Important Make sure to set a limit on the number of invocations and test locally first to avoid infinite recursive loops in AWS.

Invoke the function:

sls invoke -f recursiveExample -p event.json

See the logs of the recursive calls:

sls logs -f recursiveExample

The logs output should look something like:

START RequestId: 43a9d5b46c-11e6-b6bc-718f7ec807df Version: $LATEST 2026 22:39:37.769 (-08:00) 43a9d5b46c-11e6-b6bc-718f7ec807df received { numberOfCalls: 5 } 2026 22:39:37.792 (-08:00) 43a9d5b46c-11e6-b6bc-718f7ec807df recursive call END RequestId: 43a9d5b46c-11e6-b6bc-718f7ec807df REPORT RequestId: 43a9d5b46c-11e6-b6bc-718f7ec807df Duration: 270.23 ms Billed Duration: 300 ms Memory Size: 1024 MB Max Memory Used: 32 MB START RequestId: 446bedb46c-11e6-88fd-1bd64622e38d Version: $LATEST 2026 22:39:37.966 (-08:00) 446bedb46c-11e6-88fd-1bd64622e38d received { numberOfCalls: 4 } 2026 22:39:37.966 (-08:00) 446bedb46c-11e6-88fd-1bd64622e38d recursive call END RequestId: 446bedb46c-11e6-88fd-1bd64622e38d REPORT RequestId: 446bedb46c-11e6-88fd-1bd64622e38d Duration: 119.04 ms Billed Duration: 200 ms Memory Size: 1024 MB Max Memory Used: 32 MB START RequestId: 4479f6b46c-11e6-b27d58a248a566 Version: $LATEST 2026 22:39:38.122 (-08:00) 4479f6b46c-11e6-b27d58a248a566 received { numberOfCalls: 3 } 2026 22:39:38.122 (-08:00) 4479f6b46c-11e6-b27d58a248a566 recursive call END RequestId: 4479f6b46c-11e6-b27d58a248a566 REPORT RequestId: 4479f6b46c-11e6-b27d58a248a566 Duration: 40.55 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 32 MB START RequestId: 44914fb46c-11e6-ae2b-65715f0c0d90 Version: $LATEST 2026 22:39:38.196 (-08:00) 44914fb46c-11e6-ae2b-65715f0c0d90 received { numberOfCalls: 2 } 2026 22:39:38.196 (-08:00) 44914fb46c-11e6-ae2b-65715f0c0d90 recursive call END RequestId: 44914fb46c-11e6-ae2b-65715f0c0d90 REPORT RequestId: 44914fb46c-11e6-ae2b-65715f0c0d90 Duration: 32.38 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 32 MB START RequestId: 449c72f5-b46c-11e6-a441cb6f0603cc Version: $LATEST 2026 22:39:38.268 (-08:00) 449c72f5-b46c-11e6-a441cb6f0603cc received { numberOfCalls: 1 } 2026 22:39:38.268 (-08:00) 449c72f5-b46c-11e6-a441cb6f0603cc recursive call END RequestId: 449c72f5-b46c-11e6-a441cb6f0603cc REPORT RequestId: 449c72f5-b46c-11e6-a441cb6f0603cc Duration: 49.82 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 32 MB START RequestId: 44a8f64b-b46c-11e6-b0535b4cab8224 Version: $LATEST 2026 22:39:38.350 (-08:00) 44a8f64b-b46c-11e6-b0535b4cab8224 received { numberOfCalls: 0 } 2026 22:39:38.350 (-08:00) 44a8f64b-b46c-11e6-b0535b4cab8224 recursive call finished END RequestId: 44a8f64b-b46c-11e6-b0535b4cab8224 REPORT RequestId: 44a8f64b-b46c-11e6-b0535b4cab8224 Duration: 0.56 ms Billed Duration: 100 ms Memory Size: 1024 MB Max Memory Used: 32 MB

Footer

© 2026 GitHub, Inc.