【速報】もうアンチパターンとは呼ばせない!!VPC Lambdaのコールドスタート改善が正式アナウンスされました!!

471件のシェア(そこそこ話題の記事)

CX事業本部@大阪の岩田です。 re:invent2018にてアナウンスされたVPC Lambdaの改善について、ついにAWSより公式のアナウンスがありました!!

Announcing improved VPC networking for AWS Lambda functions

今後数カ月に渡って全リージョンで徐々にローリングアップデートが掛かっていき、展開が完了したリージョンについては上記AWSのブログが更新されるとのことです。ユーザー側では特に変更操作など必要ありません。

今までのアーキテクチャ

これまでのVPC LambdaはLambdaのサンドボックス環境を作成する際に、必要に応じてENIの作成&アタッチ処理を行なっていました。

※上記AWSのブログより引用

このアーキテクチャは以下のような課題を抱えていました。

  • ENI作成を伴うコールドスタートにおいての非常に大きな遅延が発生する
    • ENI作成を伴うコールドスタートを引いた場合は10~20秒程度の大きな遅延が発生していました
  • Lambda実行環境にアタッチされたENIの数だけサブネット内のIPアドレス消費する
    • Lambda実行環境が消費するIPアドレスを考慮してサブネット内のIPアドレス管理を行う必要がありました
    • AWSアカウント毎のENI上限に達するリスクがありました
    • 新しくENIを作成する際にAPIレートの制限に達するリスクがありました

これからのアーキテクチャ

これからのアーキテクチャでは、Lambda実行環境とVPCの接続にHyperplane ENIが利用されるようになります。複数のLambda実行環境がHyperplane ENIを共有し、さらにHyperplane ENIからENIにNAT処理を行うことでVPCリソースへのアクセスを実現するようです。

※上記AWSのブログより引用

Hyperplane ENIについてはこちらの動画で解説されています。 AWS re:Invent 2017 Keynote - Tuesday Night Live with Peter DeSantis

セッションレポートはこちら

【レポート】re:Invent 2017のTuesday Night LiveはAWSテクノロジーが言語化された瞬間だった #reinvent

このアーキテクチャの変更によって、以下のようなメリットが生まれます。

  • コールドスタート時の遅延削減
    • Lambda関数を作成した際もしくはLambda関数のVPC設定を更新した際にENIの作成が行われ、Lambda実行時には事前作成されたENIを利用するようなアーキテクチャに変更されます。これによりENI作成と接続に必要だった遅延が大きく削減されることになります。
  • ENI・IPアドレスの節約
    • 新アーキテクチャでは複数のLambda実行環境でENIを共有することになるため、サブネット内でのIPアドレスの使用数を抑えることが可能です。
  • スケーリングの改善
    • LambdaのスケーリングがENIの数に直接的に依存しなくなり、多数のLambda関数同時実行がサポートされるようになります。

なお、注意点として以下の事項については新アーキテクチャでも変更はありません。

  • Lambda実行ロールにはENIの作成・削除権限が必要
  • サブネットとセキュリティグループの構成は引き続き利用可能
  • インターネットアクセスにはNATゲートウェイ等のNATデバイスもしくはVPCエンドポイントが必要
  • Lambdaからアクセス可能なVPCリソースの種類

上記AWSのブログではX-RAYによる新・旧アーキテクチャの比較画像が掲載されていました。新アーキテクチャではコールドスタートが1秒未満で完了していることが分かります。

やってみる

バージニアリージョンで試しましたが、まだ新環境への移行が進んでいないのか、それとも運の問題なのか新アーキテクチャでのLambda起動を引き当てられませんでした...

注意!!

煽り気味なタイトルを書いておいて、申し訳無いのですがVPC LambdaやLambda x RDBの構成が抱える懸念点はコールドスタートの遅延だけではありません。このあたりの情報も参照された上で、自身のユースケースに問題ないかを再確認頂ければと思います。

まとめ

VPC Lambdaのコールドスタート改善に関してご紹介しました。 これは非常に嬉しいアナウンスですね!! 実際に触れなかったのでAWSのブログを引用しただけのポストになってしまいましたが、リリース状況を日々チェックしながら、リリースされ次第即触り倒していきます。

DBの選定は特性に応じた適材適所な選定が重要なので、単純に「今後はLambdaの開発も全部RDBで良いやん!!」と考えるのは危険ですが、それでも選択肢の幅が大きく広がったことは間違いありません。 Lambdaを利用したシステム開発において、VPC Lambdaのコールドスタートによる遅延を理由にRDBの採用を見送っていたケースは非常に多いと思いますが、今回のアップデートを機にもう一度検討してみてはいかがでしょうか?