2

I have the lambda function pushed as I can see it in localstack, based on below command/output

 aws lambda get-function --function-name books1 --endpoint-url=http://localhost:4574
{
    "Code": {
        "Location": "http://localhost:4574/2015-03-31/functions/books1/code"
    }, 
    "Configuration": {
        "Version": "$LATEST", 
        "FunctionName": "books1", 
        "CodeSize": 50, 
        "FunctionArn": "arn:aws:lambda:us-east-1:000000000000:function:books1", 
        "Environment": {}, 
        "Handler": "main", 
        "Runtime": "go1.x"
    }
}

When I try to execute it, as shown below, I get an error, and my localstack is running inside a docker container

aws --endpoint-url=http://localhost:4574 lambda invoke --function-name books1 /tmp/output.json

An error occurred (InternalFailure) when calling the Invoke operation (reached max retries: 4): Error executing Lambda function: Unable to find executor for Lambda function "books1". Note that Node.js and .NET Core Lambdas currently require LAMBDA_EXECUTOR=docker Traceback (most recent call last):
  File "/opt/code/localstack/localstack/services/awslambda/lambda_api.py", line 269, in run_lambda
    event, context=context, version=version, asynchronous=asynchronous)
  File "/opt/code/localstack/localstack/services/awslambda/lambda_executors.py", line 466, in execute
    process.run()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "/opt/code/localstack/localstack/services/awslambda/lambda_executors.py", line 462, in do_execute
    result = lambda_function(event, context)
  File "/opt/code/localstack/localstack/services/awslambda/lambda_api.py", line 390, in generic_handler
    'Note that Node.js and .NET Core Lambdas currently require LAMBDA_EXECUTOR=docker') % lambda_name)
Exception: Unable to find executor for Lambda function "books1". Note that Node.js and .NET Core Lambdas currently require LAMBDA_EXECUTOR=docker

This lambda is written in Go and when I manually execute it on real AWS, it works just fine.

curiousengineer
  • 2,196
  • 5
  • 40
  • 59

1 Answers1

7

You should run localstack container with passed LAMBDA_EXECUTOR=docker environment and /var/run/docker.sock:/var/run/docker.sock volume

docker run \
  -itd \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e LAMBDA_EXECUTOR=docker \
  -p 4567-4583:4567-4583 -p 8080:8080 \
  --name localstack \
  localstack/localstack
iokhotnikov
  • 176
  • 1
  • 8