AWS Lambda 関数にプロビジョニングされた同時実行性を使用する必要がありますか?

AWS Lambda 関数にプロビジョニングされた同時実行性を使用する必要がありますか?

Lambda 関数は、アマゾン ウェブ サービス上のサーバーレス デプロイメントの重要な部分です。ただし、これらは魔法ではなく、ハードウェアの物理的な制限により、コールド スタートなどのいくつかの欠点が生じる可能性があります。プロビジョニングされた同時実行は問題の軽減に役立ちます。

「コールドスタート」とは何ですか?

「コールド スタート」は Lambda にとって大きな問題であり、特にレイテンシーに敏感なアプリケーションを考慮した場合に顕著です。この用語は、Lambda 関数の実行環境を最初から立ち上げて実行するために必要な起動時間を指します。

Lambda 関数は、呼び出し後しばらくの間「ウォーム」状態に保たれます。非 VPC 機能は 5 分間ウォームされ、VPC 機能は 15 分間ウォームされます。この期間中に関数が再度呼び出されると、すぐに応答します。これは、一貫した定期的なトラフィックが発生するサービスに最適です。

ただし、コードがしばらく実行されていない場合、またはコードをスケールアップして複数の同時関数を実行する必要がある場合は、コードは最初から開始されます。AWS の分析によると、コールド スタートは実稼働ワークロードのリクエストの 1% 未満で発生しており、これは多くのシナリオで許容可能です。

ただし、使用するランタイムによっては (Java と .NET はどちらも JIT コンパイルに時間がかかります)、コールド スタートにより関数の呼び出しが数秒遅れる可能性があります。これは、遅延に敏感なアプリケーションでは受け入れられない可能性があります。

コールドスタートはもう不要

Lambda のプロビジョニングされた同時実行モードは、この問題の解決に役立ちます。これは Lambda 関数の予約済みインスタンスのように考えることができます。つまり、基本的に一定量の容量を予約しており、Lambda 関数はその期間中ずっとウォーム状態に保たれます。

これには、立ち上げコストがほぼ完全になくなるなど、大きなメリットがあります。実際、初期化コードの最適化についてはまったく心配する必要はありません。これは、一度実行すればその後も実行し続けるためです。これは、バイナリが大きく、ロードに起動時間がかかる可能性がある Java や C#/.NET などの JIT コンパイル言語にとって大きな利点です。

関数がコールドで開始される前の例と比較して、プロビジョニングされた同時実行では、すべての関数が事前に開始され、ウォームに保たれます。呼び出しが必要な場合、Lambda はウォーム関数を使用してそれを実行します。

ただし、それ自体にも欠点があります。Lambda が関数のバージョンを選択する方法が原因で、プロビジョニングされた同時実行性は $LATEST タグでは機能しません。新しいエイリアスを作成し、そのエイリアスに対して同時実行性をプロビジョニングし、バージョンが変更されたときにそれを更新する必要があります。

また、関数を長期間実行しても、プロビジョニングされた同時実行によってアプリケーションがステートフルになるわけではないことを理解することも重要です。Lambda 関数は破棄される可能性があり、破棄されるため、EC2 サーバーのように扱うべきではありません。

プロビジョニングされた同時実行のコストはどれくらいですか?

これに対する答えは、関数が実行される頻度と、並列需要を満たすために複数の実行環境が作成される頻度によって異なります。

プロビジョニングされた同時実行性に関して主に考慮すべき数値は、同時に実行される関数の実行数です。たとえば、1 秒あたり 10 回呼び出され、各呼び出しが 500 ミリ秒続く関数がある場合、その関数は 1 秒あたり平均 5 回同時実行されることになります。

全体として、プロビジョニングされた同時実行のコストは、通常の Lambda 関数よりもそれほど高くありません。AWS の料金計算ツールを使用して、個人的にかかる費用を計算できます。たとえば、500 ミリ秒の呼び出し時間と 256 MB のメモリを備えた Lambda を 1 秒あたり 10 回呼び出すと、実行料金は月額 60 ドルになります。

ただし、同じ機能ですが、プロビジョニングされた実行が 10 回ある場合は、月額 64.50 ドルと少し高くなります。全体として、使用状況にもよりますが、コストはわずか 5 ~ 10% 増加する可能性があります。

ただし、実際には、プロビジョニングされた同時実行の方が、GB 秒あたりの使用量の方が安くなります。つまり、使用率が 100% に非常に近い状態で継続的に実行している場合は、通常の Lambda 料金を使用するよりも同時実行性を予約した方が安くなる可能性があります。これは主に、Lambda が初期化コードに費やす時間を削減する方が全体的にコストが安くなるという事実によるものです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です