When we have multiple lambda functions which are dependent on one another then we may need the execution output of another lambda function in the current lambda function inorder to process it.
In such cases, we need to call/invoke the dependent lambda function from the current lambda function.
Let’s say we have two lambda functions
- process PDF contents -
process_pdf_invoice
- update PDF contents in the database -
save_invoice_info
We will be using nodejs to implement this scenario.
Function - process_pdf_invoice
- Let’s write the code for
process_pdf_invoice
lambda function.
process_pdf_invoice.js
exports.handler = function(event, context) {
// Let's return some dummy data
const invoice = {
"DueDate": "2013-02-15",
"Balance": 1990.19,
"DocNumber": "SAMP001",
"Status": "Payable",
"Line": [
{
"Description": "Sample Expense",
"Amount": 500,
"DetailType": "ExpenseDetail",
"Customer": "ABC123 (Sample Customer)",
"Ref": "DEF234 (Sample Construction)",
"Account": "EFG345 (Fuel)",
"LineStatus": "Billable"
}
],
"TotalAmt": 1990.19
}
return invoice
}
Function - save_invoice_info
- Let’s write the code for lambda function
save_invoice_info
- To invoke the lambda function we need AWS SDK (i.e aws-sdk).
- By default it will be available in AWS lambda if not we need to install it as a layer.
save_invoice_info.js
const AWS = require('aws-sdk');
const lambda = new AWS.Lambda();
async function getInvoiceInfo(){
// params to send to lambda
const params = {
FunctionName: 'process_pdf_invoice',
InvocationType: 'RequestResponse',
LogType: 'None',
Payload: '{}',
};
const response = await lambda.invoke(params).promise();
if(response.StatusCode !== 200){
throw new Error('Failed to get response from lambda function')
}
return JSON.parse(response.Payload);
}
exports.handler = async function(event, context) {
// invoke and get info from `process_pdf_invoice`
const invoice = await getInvoiceInfo();
console.log('invoice', invoice);
// now write the code to save data into database
return {'status': 'saved'}
}
- The code
lambda.invoke(params).promise()
will invoke lambda function and returns the response. - If the invokation is success then it will return
200
otherwise it will return5XX
code. response.Payload
will give the response returned by the lambda function.
References
- https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html
- https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html#invoke-property
Thank you for reading the Agiliq blog. This article was written by Anjaneyulu Batta on May 29, 2022 in AWS , AWS Lambda , Nodejs .
You can subscribe ⚛ to our blog.
We love building amazing apps for web and mobile for our clients. If you are looking for development help, contact us today ✉.
Would you like to download 10+ free Django and Python books? Get them here