Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AWS Lambda Java function invoked multiple times

I've got an AWS Lambda function I've written in Java (well, it's actually written in Clojure) and it appears to get invoked 3 times every time I run it.

My function runs successfully and well within the timeout (which is set to the max of 5 minutes). It returns a string which I can see output when I test the function in the console.

I've seen some stuff online about having to call some Context success / done function but can't see that in the Java SDK (seems to be for Node only?).

Am I missing something?

This does not occur when I click test in the console (it only runs once) but does happen when triggered via a CloudWatch Trigger or running via the AWS SDK.

Thanks,

Donovan

Update: apologies, this does not happen when running via the trigger, only via the SDK and CLI, so perhaps there is some timeout in the call I am making.

like image 485
dmcgillen Avatar asked Jan 05 '23 08:01

dmcgillen


1 Answers

For future reference for anyone else, the issue was the SDK and CLI hitting the read timeout of one minute and then retrying the request. I manually set this to 5 minutes to match my AWS Lambda timeout.

This can be done in the CLI by adding --cli-read-timeout int where int is your desired timeout (or simply --cli-read-timeout 0 which disables the timeout altogether).

In the Java SDK it can be done by calling setSocketTimeout(int socketTimeout) on the ClientConfiguration object

In Clojure using Amazonica, add :client-config {:socket-timeout xxx} to your credentials map.

like image 97
dmcgillen Avatar answered Jan 13 '23 09:01

dmcgillen