AWS re:Invent 2018では新しい機能とサービスが多数発表された。機能間で共有されるコードとデータを一元管理するLambda Layersや、Lambda Runtime APIなどである。Lambda Runtime APIは、AWS Lambdaを、JavaScript、Java、C#などの公式にサポートされているランタイムのリスト以外のあらゆるプログラミング言語に拡張するものである。
Lambda Layersが登場する前は、共有コードを使うすべての関数で共有コードをパッケージ化してデプロイする必要があった。代わりに、Lambda Layersを使うと、開発者は共通のコンポーネントをzipファイルで配置し、リソースをLambda Layerとしてアップロードできる。
レイヤは我々が想像する通りに機能する。たとえば、レイヤは更新を管理するためにバージョン管理され、各バージョンは不変である。関数を設定するときは、最大5つのレイヤを参照できる。そのうちの1つはランタイムである。レイヤが呼び出される順序は、各レイヤが前のレイヤの機能を上書きできるため、考慮すべき事項である。Amazon Web Servicesの技術エバンジェリストのDanilo Pocciaは次のように説明している。
最初のレイヤはランタイムになり、2番目のレイヤは必要なライブラリの特定のバージョンを追加します。
Lambda Layersを使用すると、開発者は依存関係とカスタムビジネスロジック間の懸案事項の分離させ、関数コードに集中でき、依存関係を再利用できる可能性があるためデプロイを素早くできる。
AWSチームは、NumPyやSciPy(Python用の一般的な科学ライブラリ)などのサンプルレイヤを提供し、開発者が、データ処理および機械学習アプリケーションに対する作業を加速できるようにしている。サードパーティは、アプリケーションの監視、セキュリティ、管理のためにLambda Layerを提供している。
AWS Lambda Layersは、さらに重要な発表となる基盤を提供する。LambdaコードがJavaScript以外のランタイムを活用できるのである。Runtime APIレイヤにより、代替プログラミング言語のソースコードとLambda環境、あるいはNodeSourceのN|Solid Node.js Lambda Runtime環境などの他のJavaScript環境との間の通信ができるようになる。
ランタイムブートストラップ間の通信では、HTTPベースのインタフェースを使用して、新しい呼び出しのイベントペイロードを取得し、関数から応答を返す。
最初の発表で、C++、Ruby、Rustランタイム環境が利用可能になった。AWSは、Erlang(Alert Logic)、Elixir(Alert Logic)、Cobol(Blu Age)、Node.js(NodeSource N | Solid)、PHP(Stackery)を含む他のランタイム環境についてパートナーと協力している。将来追加される言語はLambda Runtime APIを使用することになる。
Lambda Runtimeの最初の発表でコミュニティのサポートがアクティブとなった。Googleのスタッフ開発者であるKelsey Hightowerが、Lambda RuntimeについてTwitterで自身の経験を次のように説明している。
私にとって最初のカスタムLambdaランタイムを構築したとき、AWSがホームランを打ったと確信しました。Lambda Runtime APIはゲームチェンジャーです。Lambda Runtime APIとLambda Layersの組み合わせを考えると、コンテナのサポートを追加してもLambdaに新たなメリットがあるようには思えません。Lambda Runtime APIは、サーバーレスワークロードのためのコンテナよりも優れた大きなメリットを提供しているのです。処理を完了させるための明確に定義された定評のあるランタイムAPIです。
AWS Lambda LayersおよびRuntimeは、AWSコンソールまたはAWS CLIを介して使われる場合がある。AWSのサーバーレスアプリケーションモデル(SAM)とSAM CLIも、これらの新しいLambda機能を使ってアプリケーションをテスト、デプロイ、管理するために使える可能性がある。