AWS Lambda officially supports several programming languages. In addition to the officially supported list of AWS lambda languages, AWS also provides a Runtime API which allows you to use additional programming languages to author your functions. This means that you may use PHP, for example, by compiling it to a Linux environment compatible with the Lambda environment.
AWS started out with Node.js back in 2104 and has steadily added to its offerings over the years, as shown in the timeline below:
In terms of choosing the language for your project, the following factors are important considerations:
The AWS Lambda cold start issue has been examined in a previous post. In essence, it is those languages that have low initialization demands that excel here. This means that C# and Java are slow, with AWS Lambda having to implement a virtual machine (VM). C# and Java have been observed suffering cold start times of over 100x that of the non-statically typed languages. By contrast, Go’s compiler bundles only the code required, while Python and Node.js have intrinsically lightweight runtimes.
Latency matters when you have customer-facing tools. But what about the up and running performance of the various languages? Based on 2018 tests, there is actually remarkable consistency amongst the languages tested, with C# and .Net pushing ahead of the rest slightly, and Ruby dropping behind.
Remember that benchmark testing of AWS Lambda supported languages does not reflect all user cases , and the differences in performances that testers have registered can be subtle. Consider Yun Zhi Lin’s advice that AWS has matured so much that architects and engineers can be confident in choosing from all of the available runtimes when considering how to build their AWS Lambda functions.
Most users are invested in attempting to make the code run faster, and, therefore, cheaper. This means that languages that require a VM such as C# and Java are less attractive. While those languages that reference a WF, may add to your time, and therefore the cost. However, with the code’s deployment structure affecting the number of Lambda invocations, it may be that you want to consider some creative hacks, rather than reconsider your language choice.