How to call one lambda from another in AWS SAM

1.7k Views Asked by At

I'm writing application with multiple functions inside SAM application. I can invoke lambda function that is already deployed to AWS with code similar to AWS Lambda call Lambda but it doens't work with local functions. I tried things from https://github.com/awslabs/aws-sam-cli/issues/510 but nothing seem to work yet.

This is closest I got yet (you need sam local start-lambda --host 172.17.0.1 where host is in docker network)

var AWS = require("aws-sdk");

exports.lambdaHandler = async (event, context) => {
  let lambda = new AWS.Lambda({});
  if (process.env.AWS_SAM_LOCAL) {
    var ep = new AWS.Endpoint("http://172.17.0.1:3001");
    lambda = new AWS.Lambda({ endpoint: ep });
  }
  const body = await new Promise(r => {
    lambda.invokeAsync(
      {
        FunctionName: "myFunction",
        InvokeArgs: JSON.stringify({ arguments: "for other function" })
      },
      function(err, data) {
        if (err) console.log(err, err.stack);
        else console.log(data);
        r(data);
      }
    );
  });
  response = {
    statusCode: 200,
    body: JSON.stringify(body)
  };
  return response;
};

and at least I see some activity, but I get error in invokeAsync

PathNotFoundLocally: PathNotFoundException\n    at Object.extractError (/var/task/node_modules/aws-sdk/lib/protocol/json.js:51:27)\n

and this error in start-lambda console

2019-12-20 16:07:02 172.17.0.7 - - [20/Dec/2019 16:07:02] "POST /2014-11-13/functions/myFunction/invoke-async/ HTTP/1.1" 404 -

UPDATE:

I was able to fix ssl error that I had in first version of this question, and it looks like it works in sync mode with lambda.invoke

1

There are 1 best solutions below

0
On

It looks like this is not currently supported until https://github.com/awslabs/aws-sam-cli/pull/749 is merged