Localstack lambda throwing "handler not set" error

37 Views Asked by At

I'm trying to upgrade localstack to the latest v3 version, however, I'm running into lambda invocation errors with any localstack image > 2.0.

time="2024-03-01T15:08:27Z" level=warning msg="Cannot list external agents" func=go.amzn.com/lambda/agents.ListExternalAgentPaths file="/home/runner/work/lambda-runtime-init/lambda-runtime-init/lambda/agents/agent.go:24" error="open /opt/extensions: no such file or directory"
teams-localstack                                                              | 2024-03-01T15:08:27.057  INFO --- [   asgi_gw_2] localstack.request.aws     : AWS dynamodb.ListTables => 200
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  | Traceback (most recent call last):
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  |   File "/var/app/awslambdaric/__main__.py", line 15, in main
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  |     handler = args[1]
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  |               ~~~~^^^
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  | IndexError: list index out of range
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  | 
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  | During handling of the above exception, another exception occurred:
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  | 
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  | Traceback (most recent call last):
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  |   File "<frozen runpy>", line 198, in _run_module_as_main
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  |   File "<frozen runpy>", line 88, in _run_code
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  |   File "/var/app/awslambdaric/__main__.py", line 25, in <module>
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  |     main(sys.argv)
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  |   File "/var/app/awslambdaric/__main__.py", line 17, in main
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  |     raise ValueError("Handler not set")
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  | ValueError: Handler not set
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  | time="2024-03-01T15:08:27Z" level=warning msg="First fatal error stored in appctx: Runtime.ExitError" func=go.amzn.com/lambda/appctx.StoreFirstFatalError file="/home/runner/work/lambda-runtime-init/lambda-runtime-init/lambda/appctx/appctxutil.go:157"
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  | time="2024-03-01T15:08:27Z" level=warning msg="Process runtime-1 exited: exit status 1" func="go.amzn.com/lambda/rapid.(*rapidContext).setupEventsWatcher.func1" file="/home/runner/work/lambda-runtime-init/lambda-runtime-init/lambda/rapid/start.go:236"
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  | time="2024-03-01T15:08:27Z" level=error msg="Init failed" func=go.amzn.com/lambda/rapid.handleInitError file="/home/runner/work/lambda-runtime-init/lambda-runtime-init/lambda/rapid/exit.go:109" InvokeID= error="Runtime exited with error: exit status 1"
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67  | time="2024-03-01T15:08:27Z" level=error msg="Runtime init failed to initialize: InitDoneFailed. Exiting." func=main.main file="/home/runner/work/lambda-runtime-init/lambda-runtime-init/cmd/localstack/main.go:238"
teams-localstack-lambda-teams-custom-events-7c7b33a738a1a44641260166299bda67 exited with code 0
  1. I have 5 lambdas reusing the same image.
  2. If I list the lambda functions I can see the handlers for all these.
  3. This works correctly in localstack version 1.4

My docker compose file

version: "3"

services:
  teams-postgres:
    environment:
      POSTGRES_PASSWORD: sealion
      POSTGRES_USER: sealion
      POSTGRES_DB: teams
      POSTGRES_PORT: 5432
    ports:
      - "5432:5432"
    healthcheck:
      interval: 5s
      retries: 5
    image: postgres:13
    networks:
      - sealion-network

  teams-lambda:
    image: teams-lambda:latest
    build:
      dockerfile: Dockerfile.lambda
      context: .
    container_name: teams-lambda
    networks:
      - sealion-network
    privileged: true

  teams-localstack:
    container_name: teams-localstack
    environment:
      - services=s3,sns,sqs,lambda,stepfunctions,dynamodb
      # - HOSTNAME_EXTERNAL=teams-localstack
      - LAMBDA_REMOTE_DOCKER=true
      - LOCALSTACK_HOST=localstack
      - LAMBDA_REMOVE_CONTAINERS=false
      - PROVIDER_OVERRIDE_LAMBDA=v2
      # - LAMBDA_EXECUTOR=docker
      # - HOST_TMP_FOLDER=/tmp/localstack
      - DOCKER_HOST=unix:///var/run/docker.sock
      - AWS_DEFAULT_REGION=us-west-2
      - USE_LOCALSTACK=true
      # - DEBUG=true
      - LAMBDA_FORWARD_URL=http://teams-lambda:8080
    env_file:
      - .env
    healthcheck:
      interval: 5s
      start_period: 10s
      test: [ CMD, bash, -c, awslocal dynamodb list-tables ]
      timeout: 10s
    image: localstack/localstack-pro:3.0.0
    networks: [ sealion-network ]
    ports:
      - "127.0.0.1:53:53"
      - "127.0.0.1:5053:53/udp"
      - "127.0.0.1:443:443"
      - "127.0.0.1:4510-4530:4510-4530"
      - "127.0.0.1:4566:4566"
      - "127.0.0.1:4571:4571"
    volumes:
      - "${TMPDIR:-/tmp}/localstack:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
      - ./localstack/init.py:/etc/localstack/init/ready.d/init.py # Ready hook
    privileged: true

volumes:
  postgres_data_container:
  dynamodata: {}

networks: { sealion-network: null }

Dockerfile

FROM xyz as deps
RUN apt install gcc g++ git

COPY . ${LAMBDA_TASK_ROOT}

ADD poetry.lock pyproject.toml poetry.toml ./
RUN poetry install --no-dev --no-interaction --no-ansi -vvv --no-root


FROM xyz:python-3.11

COPY --from=deps /var/app/.venv /var/app/.venv

COPY . .

What's going wrong here?

1

There are 1 best solutions below

0
Shan Eapen Koshy On

The issue was that I was using the --handler argument instead of --image-config to set the start-up command.