AWSの固定IPでアクセスできるスケーラブルな静的サイト構成を考える

2020-09-20AWS

テレビアニメ版SAOにて、IPアドレス 52.68.96.58 が登場したと話題となりました。
このアドレスにブラウザでアクセスするとSAO関連のサイトが表示されます。(2020/09/20現在)

ただし、地上波の人気アニメで取り上げられる影響力は凄まじく、アクセス集中によりしばらくはページがまともに閲覧できない状態でした。

IPアドレスのままサイトを公開する機会はあまりないと思いますが、今回のようなパターンを如何に捌くかという課題は面白そうなので、少し構成を考えてみます。

SAOに登場した固定IPアドレス

52.68.96.58 は、いかにもAWSっぽいアドレスでピンと来た方も多いようです。
実際に http://52.68.96.58 へアクセスするとSAO関連のサイトが公開されており、事前に仕込まれた演出であることが分かります。

52.68.96.58 で公開されているSAOサイトhttp://52.68.96.58 より

Chromeの開発者ツールで覗いてみるとこんな感じ。nginxとVarnishで動いているようです。
52.68.96.58のレスポンス

AWS構成2パターンを試す

今回は以下の2パターンを実際に試してみました。

構成メリットデメリット
NLB + EIP構成がシンプルバックエンドの管理が必要
Global Accelerator + ALB + S3マネージドサービスのみで実現構成がやや複雑

中身はシンプルなHTMLと画像1枚を返すだけの単純な静的サイトです。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Static Website</title>
</head>
<body>
  <p>Welcome to my server!</p>
  <img src="server.png" alt="server">
</body>
</html>

NLB + EIP

NLB + EIP構成

パッと思いつくのが、グローバルIPアドレスを固定できるNLBの活用です。
ターゲットグループにEC2やECSを複数繋げることで負荷分散できます。

Auto Scalingと組み合わせることでかなりの量までは捌けそうですが、EC2やECSのコストが比較的高くついてしまいます。さらに、サーバやコンテナ・ミドルウェアの管理も必要です。

今回のような(恐らく)静的サイトであれば、マネージドサービスで完結させたいですね。

Global Accelerator + ALB + S3

Global Accelerator + ALB構成

次に使えそうなのが、AWS Global Acceleratorです。
固定IPでアクセスできる上、バックエンドにALBを指定することができます。

ALBでは任意の固定レスポンスを返せるため、先ほどのHTMLを直接ALBに入れてしまえば完全マネージド化が実現します。入口のHTML以外はS3から配信してしまいましょう。

Global Acceleratorで割り当てられた固定IPでアクセスするとこんな感じ。
静的IPで公開する静的サイト

AWS Global Accelerator とは

AWSのグローバルネットワークを活用してパフォーマンスを改善できるサービスです。
固定IPアドレスが2つ割り当てられ、ALB・NLB・EIP・EC2をバックエンドとして指定できます。
https://aws.amazon.com/jp/global-accelerator/

IPエニーキャストによりユーザから近いAWSロケーションへトラフィックが吸収され、エンドポイントまではAWS内ネットワークを通るようになります。AWS内はインターネットより低遅延のため、エンドポイントへ直接アクセスするよりもパフォーマンスが向上するという仕組みです。

「グローバル分散かつ固定IPのNLB」と考えれば分かりやすいかと思います。ヘルスチェックや重み付けルーティングも出来るため、DR構成のフロントにも使えそうですね。

どのくらい早くなるか

AWS Global Accelerator Speed Comparison にアクセスすると、実際に各リージョンへの通信結果を比較できます。

AWS Global Accelerator Speed Comparison

私の環境(transix DS-Lite)では、4〜29%ほどの改善が見込めました。東京リージョンでも早くなっているのが興味深いです。

まとめ

固定IPでスケーラブルな静的サイトを公開するには、AWS Global AcceleratorとALBとS3を使うのが良さそう。(でも使う場面は特になさそう)