AWS Lambdaはアイドル時間に対して課金するのが大好きだ:Vercelは課金を回避する方法を見つけたと主張

Table of Contents

AWS Lambdaはアイドル時間に対して課金するのが大好きだ:Vercelは課金を回避する方法を見つけたと主張

Vercel は、LLM やデータベースなどの低速な外部サービスを待機している間に料金がかさむアイドル状態のインスタンスを再利用することで、AWS Lambda のコストを最大 95% 削減したと主張しています。

AWS LambdaはAmazonのサーバーレスコンピューティングプラットフォームで、短時間の集中処理には便利ですが、長時間実行やレイテンシが発生しやすいタスクには高額な費用がかかります。各リクエストは独自の環境で実行され、アイドル時も含め、実行時間全体に対して課金されます。小規模な環境ではアイドル時の消費量は無視できるかもしれませんが、数十億回もの呼び出しになると、すぐに膨大な量になります。

クラウド大手のAWSによると、AWS Lambdaの設計は「同時リクエストごとに、Lambdaが実行環境の個別のインスタンスをプロビジョニングする」というものです。料金は関数リクエストの数、各リクエストの実行時間、そして関数に割り当てられたメモリ量に基づいて決定されます。メモリ量は128MBから10,240MBの範囲です。関数の実行時間は15分を超えません。Lambdaの設定を最適化するために、関数の実行時間とコストを測定するオープンソースツールがあります。

このアプローチは、Lambdaインスタンス上ですべての処理を実行する関数には有効ですが、リモートサービスの完了を待つ時間が長くなると無駄になります。VercelのソフトウェアエンジニアであるTom Lienard氏は、同社がどのようにしてこの解決策を見つけたのか(どうやら偶然のようですが)を投稿しています。Vercelは、ReactベースのフレームワークであるNext.jsの本拠地であり、ReactチームもReact Server Components(RSC)の最適な実装として推奨しています。

この技術では、ブラウザへのUIデータのストリーミングが必要です。Vercelが2020年にこの取り組みを開始した当時、AWS Lambda(Vercelはホスティングプラットフォーム上で関数を実装するために広く使用しています)はストリーミングをサポートしていませんでした。そのため、チームはTCPベースのプロトコルを実装し、VercelとAWS Lambda関数の間にトンネルを作成することに取り組みました。ストリーミングされるデータはこのトンネルを経由して戻り、Vercel Function Routerがこれをストリームに変換してクライアントに返します。

そこで「ある考えが浮かんだんです」とリエナード氏は語る。トンネルが存在するので、「Lambdaに処理させる追加のHTTPリクエストを送信できたらどうだろう?」と。これはLambdaの設計では通常不可能なことだ。

2 番目の同時リクエストが既存の Lambda インスタンスに送信される様子を示す図

2 番目の同時リクエストが既存の Lambda インスタンスに送信される様子を示す図

これは、システムが各AWS Lambdaインスタンスの現在のCPUとメモリの使用状況、そして15分間の存続期間を追跡する必要があり、さらにインスタンス上で実行されるRustベースのコアにメトリクス追跡機能を追加して、必要に応じてリクエストを拒否できるようにする必要があるため、実装は容易ではありませんでした。Lienard氏の投稿にはより詳細な情報が記載されていますが、この成果は、Vercelが「Fluid Compute」と呼ぶ、新しいリソースをスケーリングする前に既存のリソースを使用し、実際のコンピューティング使用量に基づいて課金するシステムの基盤となりました。Lienard氏は、「コンピューティングコストを最大95%削減できる」と主張しています。

また、VercelはAWSよりも関数利用料が高いことにも留意してください。執筆時点では、AWS Lambda(Armアーキテクチャ)はリクエスト100万件あたり0.20ドルに加え、インスタンス利用料として1GB/時間あたり0.048ドルが課金されます。Fluid Compute導入前のVercelは、リクエスト100万件あたり0.60ドル、インスタンス利用料として1GB/時間あたり0.18ドルが課金されていました。 

AI呼び出しの戻りが遅い関数によってVercelの請求書ショックが発生

AI呼び出しの戻りが遅い関数によってVercelの請求書ショックが発生

今週、Vercelの顧客がXで「数週間前、クライアント側リクエスト約20件をサーバー側(1ページ)に移動しました。すると、今月のVercelの請求額が月額300ドルから3,550ドルに跳ね上がりました。そのうち99%は『サーバーレス関数の実行時間』によるものです」と苦情を訴えました。彼によると、その関数とは「DBへのGETリクエストと、claude/anthropicリクエストの送信」であり、まさに前述のアイドル時間の問題が発生するタイプの関数です。

良いニュースは?「Fluid Computingを導入したところ、すでに大きな効果を実感しています」と彼は報告した。VercelがAWSへの支払いに依然として多額のマークアップを上乗せしていることは間違いない。それでも、AWS Lambdaの最適化に向けた取り組みによって、コストは確実に軽減されている。®

Discover More