Closed
Description
Is there an existing issue for this?
- I have searched the existing issues
Current Behavior
If the Lambda returns an error, the message is put into DLQ straightaway after first try although the configurations says "try 3 times".
Expected Behavior
If the Lambda returns an error, the message should be put into DLQ after what RedrivePolicy.maxReceiveCount
says which is 3 in this case. For instance, try processing the message 3 times, if still no success, put it into DLQ.
How are you starting LocalStack?
With a docker-compose file
Steps To Reproduce
version: "3.8"
services:
localstack:
image: "localstack/localstack"
container_name: "localstack"
ports:
- "4566-4599:4566-4599"
environment:
- DEBUG=1
- DEFAULT_REGION=eu-west-1
- SERVICES=lambda,events,sqs
- DATA_DIR=/tmp/localstack/data
- DOCKER_HOST=unix:///var/run/docker.sock
- LAMBDA_EXECUTOR=docker
volumes:
- "./tmp/localstack:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
Environment
- OS: MacOS BigSur
- LocalStack: `1dc090777b0c`
Anything else?
This will try only once and put the message into DLQ after failure although the retry policy instructs for 3 retries. This is the issue.
aws --profile localstack --endpoint-url http://localhost:4566 lambda create-function \
--function-name api-lambda \
--handler lambda/main \
--runtime go1.x \
--role api-role \
--zip-file fileb://lambda.zip
aws --profile localstack --endpoint-url http://localhost:4566 sqs create-queue \
--queue-name api-dead-letter-queue
aws --profile localstack --endpoint-url http://localhost:4566 sqs create-queue \
--queue-name api-queue \
--attributes '{"RedrivePolicy":"{\"deadLetterTargetArn\":\"arn:aws:sqs:eu-west-1:000000000000:api-dead-letter-queue\",\"maxReceiveCount\":\"3\"}"}'
aws --profile localstack --endpoint-url http://localhost:4566 lambda create-event-source-mapping \
--function-name api-lambda \
--event-source-arn arn:aws:sqs:eu-west-1:000000000000:api-queue
Use this command to test.
aws --profile localstack --endpoint-url http://localhost:4566 sqs send-message \
--queue-url http://localhost:4566/000000000000/api-queue \
--message-body '{"hello":"world"}'
FYI - This will try indefinitely (30 sec in between) until it succeeds because there is no retry policy set which is perfectly normal and expected behaviour.
aws --profile localstack --endpoint-url http://localhost:4566 lambda create-function \
--function-name api-lambda \
--handler lambda/main \
--runtime go1.x \
--role api-role \
--zip-file fileb://lambda.zip
aws --profile localstack --endpoint-url http://localhost:4566 sqs create-queue \
--queue-name api-dead-letter-queue
aws --profile localstack --endpoint-url http://localhost:4566 sqs create-queue \
--queue-name api-queue
aws --profile localstack --endpoint-url http://localhost:4566 lambda create-event-source-mapping \
--function-name api-lambda \
--event-source-arn arn:aws:sqs:eu-west-1:000000000000:api-queue