ALB(Application Load Balancer)とは?
ALB(Application Load Balancer) は、HTTP/HTTPSレイヤーでのロードバランサーの機能を提供してくれるサービスです。よくあるユースケースとしては複数台のAmazon EC2で冗長化されたインスタンスや、オートスケーリングが設定されたAmazon EC2をバックエンドとしてリクエストを均一にルーティングする機能を提供してくれます。また、コンテナベースのWebアプリケーションをAWS Fargateで立ち上げている場合にもALBが選定されるケースが多いでしょう。
ALBを使用する大きな目的の1つは負荷分散です。これにより突発的なアクセスが発生した際にもシステムやパフォーマンスを落とすこと無くサービスを運用することが可能になります。そのようなアクセスの際は、まさにそのサービスの儲けどころとなっているケースがほとんどでしょう。
例えば、ソーシャルで紹介した商品がバズり、大量のECサイトへのアクセスがあった時にそのサイトが落ちてしまっていては、大きな機会損失が発生します。メディアサイトにおいても大量のアクセスを効率的に捌けないようでは、直接的に売上に関係するPVを稼ぐことが出来ません。
このようなケースにおいてALBによる負荷分散は大きなメリットがあるといえるでしょう。
ALBの特徴
- レイヤー7での負荷分散: ALBはOSIモデルの第7層(アプリケーション層)で動作します。これは、HTTPヘッダーやパス、ホストベースのルーティングなど、細かいリクエスト情報に基づいてトラフィックを振り分けることが可能です。
- 自動スケーリングと高可用性: ALBはバックエンドのターゲット(EC2インスタンス、コンテナなど)の状態を監視し、ターゲットが過負荷になると新しいインスタンスを追加したり、障害発生時には自動でリクエストを他の正常なインスタンスに振り分けます。
- WebSocketサポート: ALBはWebSocketやHTTP/2をサポートしており、リアルタイム通信が必要なアプリケーションにも対応できます。
- セッション維持: ALBは「スティッキーセッション」と呼ばれる機能で、特定のユーザーを同じインスタンスに振り分け続けることができます。これにより、セッションを維持したまま安定した通信を可能にします。
Amazon API Gatewayとは?
Amazon API GatewayはAPIの作成、公開、保守やモニタリングなどAPIを管理する機能を提供してくれるサービスです。Amazon API Gatewayはサーバーレスな構成の中でAWS Lambdaと採用されることが多いです。特にAPIの構築やデプロイ、管理を容易にするためにSwaggerのようなツールと連携できたり、APIとしての認証認可を柔軟にカスタマイズするための機能、モニタリングやレート制限やキャッシュなどの機能がその特徴となっています。
バックエンドにAWS Lambdaを使用している場合、トラフィック集中時にはLambdaファンクションは自動で並列スケーリングされます。その際の各Lambdaファンクションへの負荷分散はAmazon API Gatewayが自動で行うため、ALBのようにユーザ側はこれを意図的に設定する必要はありません。負荷分散のためのサービスと言うよりもAPIの構築やデプロイ、モニタリングを楽にするサービスと捉えるのが良いでしょう
Amazon API Gatewayの特徴
- API管理機能: APIリクエストの受付から認証、リクエスト変換、レスポンスのキャッシュまで、APIに関わるあらゆるプロセスを一元管理できます。
- 認証と認可のサポート: IAMポリシー、Cognito、カスタム認証などを使って、リクエストの認証・認可を管理します。これにより、セキュリティ要件が厳しいAPIに適しています。
- リクエストとレスポンスのカスタマイズ: リクエストやレスポンスをカスタム形式に変換できます。例えば、クライアントからのJSONリクエストをLambdaが受け取りやすい形式に変換したり、バックエンドからのレスポンスを再フォーマットすることが可能です。
- Swaggerインポート: Swaggerの定義をインポートしてRest APIの構築が可能です。
- レート制限とキャッシング: Amazon API Gatewayは、特定のユーザーやIPアドレスに対してレート制限を設定することができ、大量のリクエストを効率的にさばくことができます。また、キャッシュ機能により、APIレスポンスを一時的に保存し、同じリクエストに対して高速なレスポンスを提供することが可能です。
- ステージごとのAPIデプロイ: Amazon API GatewayはAPIのバージョニングや複数ステージの管理が可能で、デプロイやテストの管理が容易です。
- WebSocketサポート: 接続数やWebSocketサーバ管理不要のサーバレスなWebSocketの機能を提供してくれます。
ALBとAmazon API Gatewayの主な違い
特徴 | ALB(Application Load Balancer) | Amazon API Gateway |
---|---|---|
用途 | Webアプリケーションの負荷分散 | API管理およびリクエスト処理 |
レイヤー | アプリケーション層(L7) | APIレベルの管理とトラフィック制御 |
トラフィックタイプ | HTTP/HTTPS | HTTP/HTTPS、WebSocket、REST |
スケーリング | 自動スケーリング | 自動スケーリング、スロットリングによる制限 |
認証 | IAM、ALBのセキュリティ設定 | IAM、Cognito、カスタム認証 |
キャッシング | なし | レスポンスキャッシング |
料金体系 | 使用した時間とデータ量に基づく | APIリクエスト数に基づく |
どちらを選ぶべきか?
ALBが適している場合
- 複数のEC2インスタンス及びコンテナベースのWebアプリケーション: ALBは負荷分散機能が優れています。Amazon EC2やAWS Fargateなどに乗っかったWebアプリケーションのロードバランサーとしてALBを採用します。これにより、アプリケーション全体のスケーラビリティを確保しながら、HTTP/HTTPSトラフィックを効率的に分散できます。
Amazon API Gatewayが適している場合
- サーバーレスアーキテクチャ: AWS Lambdaと組み合わせてAPIを構築する場合はAmazon API Gatewayを選定するのが良いでしょう。
- セキュアなAPIの公開: 複数の外部クライアントにセキュアにAPIを公開したい場合には、Amazon API Gatewayの認証認可の仕組みを利用できます。またスロットリングやクォータを設定することでアクセスの上限数のコントロールやアクセス数に基づくAPI課金の仕組みなどを実装することも可能です。
まとめ
Amazon EC2とAWS FargateベースのアプリケーションではALBが、AWS LambdaベースのアプリケーションではAmazon API Gatewayが選定されるケースが多いでしょう。サービスとしてALBはインフラレイヤーでの負荷分散を得意として、Amazon API GatewayはアプリケーションとしてのAPI管理、構築、デプロイを得意としており、それぞれ想定しているレイヤーが異なるサービスとも言えます。