rspec/rules/S6246/java/rule.adoc

75 lines
2.4 KiB
Plaintext
Raw Normal View History

== Why is this an issue?
2021-06-01 01:19:13 +00:00
Invoking other Lambdas synchronously from a Lambda is a scalability anti-pattern. Lambdas have a maximum execution time before they timeout (15 minutes as of May 2021). Having to wait for another Lambda to finish its execution could lead to a timeout.
2021-05-05 08:56:28 +00:00
2021-05-11 01:20:07 +00:00
2021-06-01 01:19:13 +00:00
A better solution is to generate events that can be consumed asynchronously by other Lambdas.
2021-05-11 01:20:07 +00:00
2021-05-05 08:56:28 +00:00
=== Noncompliant code example
2021-05-13 01:16:52 +00:00
With AWS SDKv1
2022-02-04 17:28:24 +01:00
[source,java]
2021-05-13 01:16:52 +00:00
----
InvokeRequest invokeRequest = new InvokeRequest()
.withFunctionName("myFunction");
AWSLambda awsLambda = AWSLambdaClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(Regions.US_WEST_2).build();
awsLambda.invoke(invokeRequest); // Noncompliant
----
== Resources
2021-05-13 01:16:52 +00:00
* https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html[Best practices for working with AWS Lambda functions]
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Avoid synchronous calls to other lambdas
=== Highlighting
Function invocation
'''
== Comments And Links
(visible only on this page)
=== on 27 May 2021, 14:13:15 Janos Gyerik wrote:
To be precise, I think the title should mention "synchronously": Lambdas should not invoke other lambdas _synchronously_
The description suggests 2 alternatives. I would drop the 2nd suggestion to make the call asynchronous, because I think it's generally not a good idea, due to tight coupling. The first idea is great, I'd mention only that: A better solution is to generate events that can be consumed asynchronously by other Lambdas.
 
=== on 27 May 2021, 14:23:37 Alexandre Gigleux wrote:
+1 with [~janos.gyerik]
I also suggest to rewrite "As the runtime of your function is bounded, waiting for another Lambda to finish executing could cause a timeout." like this:
"Lambdas have a maximum execution time before they timeout (15 minutes as of May 2021). Having to wait for another Lambda to finish its execution could lead to a timeout".
=== on 31 May 2021, 12:04:23 Quentin Jaquier wrote:
We review the suggestions together with [~dorian.burihabwa], it makes sense to us as well.
The remaining concern is that the compliant solution is not relevant anymore and we have a hard time coming up with a new one. [~janos.gyerik] do you have an example or a link to the documentation that could help?
endif::env-github,rspecator-view[]