はじめに
先日、DevelopersIO のバックエンド(Next.js の実行環境)を Lambda Web Functions へ移行しました。
https://dev.classmethod.jp/articles/developersio-lambda-web-functions-multiregion/
Web Functions の MultiRegion エンドポイントを採用し、当初は東京、バージニア、オレゴン、フランクフルトの 4 リージョンで利用を開始しました。その後、オハイオ(us-east-2)を加えた 5 リージョンに切り替えました。この記事ではその結果を紹介します。
5 リージョンへの入れ替え
Lambda Web Functions のエンドポイントは、作成後に MultiRegion から PerRegion への変更も、リージョンの追加・削除もできない仕様です。
https://docs.aws.amazon.com/lambda/latest/dg/web-functions-endpoint-replication.html
そのため今回は、5 リージョンを指定した Web Functions を新しく作り、公開用 CloudFront のオリジンを入れ替えました。
オハイオに届いたリクエスト
日別の件数と比率
オハイオ導入後に Lambda へ到達したリクエストを、日別(JST)に集計しました。
| 日(JST) | 合計 | オハイオ | オハイオの比率 | 東京の比率 |
|---|---|---|---|---|
| 10/21 水 | 441,332 | 30,602 | 6.9% | 27.3% |
| 10/22 木 | 524,262 | 118,048 | 22.5% | 24.8% |
| 10/23 金 | 502,080 | 36,656 | 7.3% | 37.6% |
| 10/24 土 | 422,285 | 35,970 | 8.5% | 21.8% |
| 10/25 日 | 391,098 | 29,824 | 7.6% | 22.4% |
| 10/26 月 | 535,743 | 26,778 | 5.0% | 24.5% |
| 10/27 火 | 424,303 | 29,131 | 6.9% | 30.8% |
| 10/28 水 | 453,619 | 44,460 | 9.8% | 28.8% |
| 10/29 木(16 時台まで) | 337,683 | 35,175 | 10.4% | 27.3% |

オハイオ導入前との比較
オハイオ導入前と導入後で、リージョン別の典型的な 1 日の件数を比べると、バージニアのリクエストがオハイオに移ったことがうかがえます。
| リージョン | オハイオ導入前(件/日) | オハイオ導入後(件/日) |
|---|---|---|
| 東京 | 123,852 | 123,686 |
| オレゴン | 95,112 | 91,856 |
| バージニア | 135,530 | 107,182 |
| オハイオ | 0 | 32,974 |
| フランクフルト | 55,208 | 77,284 |
10/22 のスパイク
10/22 の 02 時台〜09 時台(JST)に、オハイオへリクエストが集まりました。
| 10/22(JST) | オハイオ(件/時) | 東京(件/時) |
|---|---|---|
| 02 時台 | 7,755 | 3,875 |
| 03 時台 | 4,991 | 3,047 |
| 04 時台 | 8,073 | 3,242 |
| 05 時台 | 5,152 | 3,131 |
| 06 時台 | 19,927 | 3,108 |
| 07 時台 | 7,330 | 3,432 |
| 08 時台 | 14,673 | 4,642 |
| 09 時台 | 29,403 | 6,726 |
| 02〜09 時台以外の中央値(p10〜p90) | 1,257(936〜2,292) | 4,463(2,946〜7,843) |

5 リージョンを積み上げたグラフでは、数日おきにスパイクが発生しています。どれも 1 リージョンだけが伸びています。
マルチリージョン展開前はバックエンドが東京にしかなく、スパイクはすべて東京に届いていました。展開後は、他のリージョンがスパイクした間も、東京のリクエスト数は平常の範囲に収まっています。10/23 の山は東京自身のスパイクです。

10/22 のオハイオのスパイク時には、ShapBot を名乗る UA からのアクセスが集中していました。CloudFront のログでは、02 時台〜08 時台(JST)に全リージョンのオリジンへ届いた 158,026 件のうち、70,844 件が ASN 396982(Google Cloud)からのリクエストでした。そのうち 91% は、ShapBot を名乗る UA からのリクエストでした。ShapBot は、Parallel 社の公式ドキュメントに記載されているクローラーの UA 名です。
リージョンごとのアクセス元
10/24〜10/28(UTC)の 5 日間について、リージョンごとに多く見られた UA を推定しました。
| リージョン | 上位の UA(推定構成比) | ブラウザを名乗る UA の合計 |
|---|---|---|
| 東京 | Windows ブラウザ 34%、Mac ブラウザ 13%、Bytespider 8%、Hatena-Favicon 5%、ZennBot 4% | 56% |
| オレゴン | bingbot 69%、Googlebot 3%、ElevenlabsCrawler 2% | 17% |
| バージニア | Slackbot 24%、NVIDIA の PSIRT を名乗るスキャナ 15%、ExaSearchBot 8%、SemrushBot 5%、Googlebot 3%、Amazonbot 3% | 22% |
| オハイオ | crawler を名乗る UA 21%、ClaudeBot 16%、Googlebot 8%、ShapBot 4%、aws-update-hub 3% | 33% |
| フランクフルト | DataForSeoBot 10%、LinkupBot 5%、serpstatbot 4% | 63% |
同じ期間について、クラウドやホスティング事業者の ASN から届いた割合も推定しました。
| リージョン | クラウド・ホスティング事業者の ASN 発 | 主な事業者 |
|---|---|---|
| 東京 | 48% | Amazon、Google |
| オレゴン | 88% | Microsoft |
| バージニア | 81% | Amazon |
| オハイオ | 63% | Google、Amazon |
| フランクフルト | 45% | Hetzner、Google Cloud、OVH |
Lambda に届いたリクエストのうち、ブラウザを名乗る UA は 37% で、人間のアクセスは少数です。残りの約 63% は bot やクローラーの UA です。さらに、クラウドやホスティング事業者の ASN から届いたリクエストは全体の約 67% を占め、東京でも約半数です。ブラウザを名乗る bot も含まれるため、人間のアクセスは実際にはさらに少ない可能性があります。
まとめ
Lambda Web Functions への移行後に追加したオハイオリージョンでは、bot やクローラーからのリクエストを一定数処理していることを確認できました。
Web Functions のサービスクォータ(maxTotalArmVCpus、maxTotalRateLimit)はリージョンごとに管理される仕様です。そのため、リージョンを追加すると、処理先を増やしてスケールアウトする効果と、急激なリクエスト集中による影響範囲を狭める効果が期待できます。
DevelopersIO のワークロードでは、データの大半を Contentful の CDN 経由で外部 API から取得しており、RDS や ELB のようなリージョナルリソースを必要としません。こうした事情もあり、Web Functions のリージョン追加に伴う Lambda 関連費用への影響は軽微(数%)でした。
海外の bot やクローラーからのリクエストが多く発生するサイトで Web Functions を採用する場合、組織の SCP で利用リージョンが限定されているなど、マルチリージョン構成を避ける理由がなければ、利用できる全てのリージョンを活用することをおすすめします。