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
- I have 5 lambdas reusing the same image.
- If I list the lambda functions I can see the handlers for all these.
- 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?
The issue was that I was using the
--handlerargument instead of--image-configto set the start-up command.