違いを理解しておくと、役立つと思われる内容を記事にしてみました。
公式サイトによると
https://aws.amazon.com/jp/global-accelerator/faqs/
◇CloudFrontは、AWSのコンテンツ配信ネットワーク(CDN)であり、静的なコンテンツや動画、ストリーミングメディアなどの配信に使用されます。CloudFrontは、世界中の複数のエッジロケーションにキャッシュされたコンテンツを配信することにより、最も近いエッジロケーションからの高速で信頼性の高いコンテンツ配信を実現します。
◆Global Acceleratorは、AWSリージョン内で実行されるアプリケーションについて、グローバルに一元管理される静的IPアドレスを提供します。Global Acceleratorは、AWSのグローバルネットワークを利用して、ユーザーから最も近いAWSリージョンに接続することにより、アプリケーションの可用性、信頼性、およびパフォーマンスを最適化します。エンドポイントグループ内には複数のエンドポイントを設定することが可能です。各エンドポイントに対して 0〜255 までのウェイト値 を設定し、各エンドポイントに送信するトラフィックの割合を制御することが可能です。Global Acceleratorは、グローバルな負荷分散を必要とするアプリケーションに最適です。例えば、多数のユーザーからのトラフィックを受け付けるウェブサイト、オンラインゲーム、ストリーミングメディア、VoIPアプリケーションなどが挙げられます。
余談ですが、AWS Global Acceleratorでは、クライアントIPアドレスを保持するオプションがあります。AWS Global AcceleratorがHTTP/HTTPSリクエストの場合、X-Forwarded-Forヘッダーを使用して、クライアントのIPアドレスをバックエンドエンドポイントに渡すことができます。
https://aws.amazon.com/jp/blogs/news/new-client-ip-address-preservation-for-aws-global-accelerator/
設定してみるとわかるのですが、IPアドレスが2つ表示されます。
Global Accelerator は作成したアクセラレータに対して静的な IP アドレスを 2つ提供しますが、合わせて DNS 名も割り当てられます。
この DNS 名を名前解決すると、アクセラレータに割り当てられている 2つの IP アドレスが返却されることも確認できます。
AWS Global Acceleratorを使用する場合、2つのIPアドレスを使い分けることもできます。これには、AWS Global Acceleratorで複数のエンドポイントグループを作成し、それぞれに異なるIPアドレスを関連付ける必要があります。
つまり、CloudFrontはコンテンツの配信を行うサービスであり、
Global Acceleratorは、エンドポイントグループを使い分ける事で、ダイナミックなアプリケーションのロードバランシングを行うサービスです。
レイヤ7の観点から比較すると
- プロトコルのサポート
• CloudFrontは、HTTP/HTTPSプロトコルをサポートしています。
• Global Acceleratorは、TCP/UDPプロトコルをサポートしています。 - オリジンの種類
• CloudFrontは、Amazon S3バケット、HTTP/HTTPSエンドポイント、AWS Elastic Load Balancer、またはカスタムオリジンをサポートしています。
• Global Acceleratorは、AWSリージョン内のElastic IPアドレス、AWS Elastic Load Balancer、またはEC2インスタンスをサポートしています。 - ルーティング方法
• CloudFrontは、エッジロケーションのDNS名前解決によってトラフィックを配信します。
• Global Acceleratorは、静的IPアドレスを使用して、AWSグローバルネットワークを介してトラフィックを配信します。 - キャッシュ
• CloudFrontは、静的コンテンツのキャッシュをサポートしており、エッジロケーションにコンテンツを保存することができます。
• Global Acceleratorは、キャッシュ機能をサポートしていません。
CloudFrontは主にWebコンテンツの配信に適していますが、
Global AcceleratorはTCP/UDPトラフィックを最適化するために設計されています。
レイヤ4の観点から比較すると
- ポート番号
CloudFrontは、HTTP(ポート80)およびHTTPS(ポート443)プロトコルのみをサポートしています。
一方、Global Acceleratorは、TCPおよびUDPの任意のポート番号をサポートしています。
これは、Global Acceleratorがレイヤ4のロードバランサーであることを示しています。 - ロードバランシングアルゴリズム
CloudFrontは、Round Robinアルゴリズムを使用して、複数のエンドポイントにリクエストを分散させます。
一方、Global Acceleratorは、AWS内のエッジロケーションから最も近いエンドポイントにリクエストを送信するように設定された、より高度なロードバランシングアルゴリズムを使用しています。
ヘルスチェックの観点から比較すると
◇CloudFrontのヘルスチェック
• CloudFrontは、カスタムオリジンサーバーに対してヘルスチェックを実行することができます。
• CloudFrontのヘルスチェックは、HTTP GETリクエストを使用して、指定されたパスに対して200 OK応答が返されることを確認します。
• カスタムヘッダーを使用して、ヘルスチェックに特定の条件を追加することもできます。
◆Global Acceleratorのヘルスチェック
• Global Acceleratorは、オリジンエンドポイントに対してヘルスチェックを実行することができます。オリジンエンドポイントとは、EC2インスタンス、ALB、NLB、Elastic IP、またはAWS Transit Gateway、AWS Lambda関数などのバックエンドリソースのことです。ヘルスチェックは、アクティブなエンドポイントの数に応じてスケーリングされます。つまり、オリジンエンドポイントの数が増えるにつれて、Global Acceleratorはより多くのヘルスチェックを並行して実行することができます。
エンドポイントが ALB/NLB の場合、Global AcceleratorはこれらLBのヘルスステータスを利用します。エンドポイントが EC2、EIP の場合、Global AcceleratorはAmazon Route 53でヘルスチェックします。 そのため、EC2/EIP 型 エンドポイントには Route 53 ヘルスチェックサービスからのトラフィックを許可する必要があります。
• Global Acceleratorのヘルスチェックは、TCPコネクションを使用して、指定されたポートに対して正常な応答が返されることを確認します。
• ヘルスチェックには、カスタムポートを使用することもできます。
つまり、CloudFrontのヘルスチェックはHTTPリクエストを使用しているのに対して、
Global AcceleratorのヘルスチェックはTCPコネクションを使用しています。
また、CloudFrontはオリジンサーバーに対してヘルスチェックを実行するのに対して、
Global Acceleratorはオリジンエンドポイントに対してヘルスチェックを実行します。
これにより、Global Acceleratorは、バックエンドオリジンサーバーの正常性を確認するために
より直接的な方法を提供し、より高速かつ効率的なリクエストルーティングを実現します。
更に、この違いがわかると、理解が深まると思います。
Q: Global Accelerator の静的 IP アドレスは EC2 Elastic IP アドレスとどのように違いますか?(公式サイト)
Elastic IPアドレスは、固定されたグローバルIPアドレスを割り当てることができます。
AWSのEC2インスタンス、NATゲートウェイ、VPNゲートウェイ、ELB(Elastic Load Balancing)などのAWSサービスに関連付けることができます。
一方、Global Acceleratorの静的IPアドレスは、グローバルネットワーク上でのトラフィックの最適な経路を決定するために使用されます。この静的IPアドレスは、Global Acceleratorに関連付けられたElastic IPアドレスプールから選択されます。この静的IPアドレスは、グローバルアクセス用に割り当てられるものであり、 単一のAWSリージョンに限定されません。
クライアントはエンドポイントグループに関連付けられたエンドポイントを介してトラフィックをルーティングする必要があります。エンドポイントは、リージョン内のインスタンス、ロードバランサー、NATゲートウェイなどのAWSリソースに関連付けられます。Global AcceleratorのIPアドレスは、エンドポイントグループに関連付けられたエンドポイントを介してトラフィックをルーティングするために使用されます。
エンドポイントグループは、AWS Global Acceleratorの機能の一つで、グローバルな負荷分散を実現するために使用されます。エンドポイントグループには、同じプロトコルとポートを使用する複数のエンドポイント(AWSリージョン内または異なるAWSリージョン内にあるAWS Elastic Load Balancing、Amazon EC2インスタンス、またはAmazon S3バケットなど)が含まれています。
グローバルアクセラレーターは、エンドポイントグループによってトラフィックをルーティングします。トラフィックは、グローバルアクセラレーターによってエンドポイントグループにルーティングされ、エンドポイントグループによって負荷分散されます。つまり、グローバルアクセラレーターは、エンドポイントグループに接続されたすべてのエンドポイントにトラフィックを自動的に配分し、ユーザーに最も近い場所に最も速くレスポンスを提供することができます。