re:Invent 2023: AWS Global Acceleratorによるウェブアプリケーションの高速化と活用事例
はじめに
海外の様々な講演を日本語記事に書き起こすことで、隠れた良質な情報をもっと身近なものに。そんなコンセプトで進める本企画で今回取り上げるプレゼンテーションはこちら!
📖 AWS re:Invent 2023 - Improve web application performance using AWS Global Accelerator (NET327)
この動画では、AWS Global Accelerator (AGA)の機能と利点について詳しく解説します。インターネットの信頼性の低さや予測不可能なレイテンシーの問題に対し、AGAがどのように高可用性、セキュリティ、パフォーマンスを提供するかを学べます。TheTradeDeskの実例を通じ、1日1兆の広告機会を処理するシステムでAGAがどう活用されているかという興味深い話も聞けます。さらに、IPv6サポートやクロスアカウントサポートなど、最新の機能についても紹介されています。
※ 動画から自動生成した記事になります。誤字脱字や誤った内容が記載される可能性がありますので、正確な情報は動画本編をご覧ください。本編
AWS Global Acceleratorの概要と本セッションの目的
こんにちは、セッションへようこそ。自己紹介と共同発表者の紹介の前に、皆さんについて、そして今日のセッションに参加された理由について少しお話しします。多くの方は、エンドユーザーにWebアプリケーションを信頼性高く、安全に、そして世界中に分散したユーザーに一貫して高速な体験を提供することに責任を持つエンジニアや開発者でしょう。
直面する課題の一部は、インターネット自体が信頼性に欠けることから来ています。接続が中断されたり、レイテンシーやパフォーマンスが予測不可能になることがあります。特にネットワーク層、つまりユーザーがアプリケーションにルーティングされる方法において、エンドユーザーに高可用性を提供するようにアプリケーションをデプロイすることは難しい場合があります。また、アプリケーションの前面のネットワーク層にセキュリティ保護を展開することも複雑になる可能性があります。
私はSean Meckleyと申します。AWS Global Acceleratorのゼネラルマネージャーを務めており、エンドユーザーのためにインターネット全体で高可用性、安全性、そして高性能な方法でアプリケーションをより簡単にデプロイできるようにするネットワークサービスを提供する役割を担っています。一緒に来ているのはSathyaです。
こんにちは、お越しいただきありがとうございます。私はSathyaです。フルネームはSathyajith Bhatですが、誰もそう呼びません。複雑すぎるんです。ですので、Sathyaと呼んでください。私はTheTradeDeskでStaff Software Engineerとして働いており、サイトの信頼性に焦点を当てています。また、AWS Container Heroでもあります。
今日のセッションでは、AWS Global Accelerator(略してAGA)を検討すべきユースケースやアプリケーション、デプロイメントのタイプについて説明します。AGAがエンドユーザーから見たアプリケーションの可用性を向上させる方法についても話します。AGAに固有のセキュリティ機能と、それらがセキュリティ態勢をどのように改善するかについて議論します。AGAがエンドユーザーへのインターネット全体のパフォーマンスを向上させる方法についても説明します。その後、SathyaがAGAがTheTradeDeskのアプリケーションをどのように支えているかについて話します。私は過去12ヶ月間のAGAの新リリースについて説明し、質疑応答の時間を設けます。
AWS Global Acceleratorの主要ユースケースと機能
ユースケースについて話しましょう。AGAはどのようなアプリケーションやシナリオで最も役立つでしょうか?パフォーマンスの観点から言えば、エンドユーザーが世界中に広く分散しており、アプリケーションへの接続に関して高いパフォーマンスと低レイテンシーを期待している場合、つまり絶対的なミリ秒単位の速さとそのレイテンシーの一貫性の両方を求めている場合、AGAが役立ちます。可用性の観点からは、複数のAvailability Zoneや複数のAWS Regionにアプリケーションをデプロイすることを検討し、エンドユーザーを簡単かつ予測可能な方法で健全なアプリケーションの場所にルーティングしたい場合、自動化された健全性チェックとフェイルオーバーを含めて、AGAが有益です。
セキュリティについては、アプリケーションのパブリックな露出面、つまりパブリックインターネットに公開されるパブリックIPアドレスとエンドポイントの数を最小限に抑えたいという考慮事項があるかもしれません。できるだけ多くをVirtual Private Cloud (VPC)内に隠し、最小限のパブリックな露出面だけを公開したいと考えるでしょう。この点でもAGAは役立ちます。最後に、カスタマーエクスペリエンスの観点から、エンドユーザーにより近い場所でアプリケーションを実行するために複数のリージョンでの運用を検討しつつ、同時にアプリケーションのための簡単なネットワークフロントドアも欲しい場合、AGAはそこでも役立ちます。
より詳細に入る前に、AGAとは何か、そしてどのように機能するかについて簡単に説明しましょう。AGAは、エンドユーザー(つまりクライアント)とAWS Regionの間に存在するネットワークサービスです。具体的には、AGAはPoints of Presence(PoP)と呼ばれる場所に存在します。現在、約110のPoPがあり、定期的に増やしています。次のスライドで場所の地図をお見せします。
AGAは、エッジロケーション(つまりPoP)を通じてクライアントのトラフィックをクライアントのごく近くで取り込み、そのトラフィックをAWS独自のネットワークバックボーンを介して、アプリケーションが実行されているAWS RegionまたはRegionsに送信します。AGAは、AWS Region内のさまざまなタイプのエンドポイントにトラフィックをルーティングできます。これには、Application Load Balancer、Network Load Balancer、動的に割り当てられたIPアドレスを持つEC2インスタンス、およびElastic IPアドレスが含まれます。AGAはOSIモデルのレイヤー3と4で動作し、TCPとUDPの両方のトラフィックをサポートしています。
TCPは多くのタイプのAPIワークロードに使用され、UDPはゲーミング、テレフォニー、その他のアプリケーションに利用されます。AGAはパブリックインターネット経由でエンドユーザーの近くでトラフィックを取り込み、その後、AWSのグローバルバックボーンネットワークを経由してAWS Regionにトラフィックをルーティングすることで、インターネット経由の通信の多くをバイパスします。
この地図は、AWSのバックボーンと、私たちのPoints of Presence(PoP)の両方を示しています。AGAは現在、50カ国の93の異なるメトロエリアに110のPoPを持っています。最近、ベトナム、ナイジェリア、ペルーに新しいAGA用のPoPを追加しました。これは、AWSのリージョン数よりもはるかに多くの場所と国をカバーしています。そのため、どのリージョンやリージョンセットでアプリケーションを実行していても、AGAをトラフィックのラインに置くことで、世界中のクライアントにより近い場所でクライアントのトラフィックを取り込むことができます。
地図上の線は、すべてのエッジロケーションとリージョンを接続するAWSのバックボーンを示しています。AWSが運用するバックボーンは、各ロケーション間に複数の冗長リンクを持ち、AWSトラフィック専用の容量を提供しています。これは、今年初めの東南アジアでの実例が示すように、お客様にとって重要です。その地域のインターネットトランジットの大部分を担う第三者のインターネットプロバイダーで光ファイバーケーブルが切断され、2日以上にわたってサービスが中断しました。これにより、多くの東南アジア諸国のエンドユーザーは、AWSシンガポールリージョンで実行されているアプリケーションを含む、インターネットの大部分にアクセスできなくなりました。
AWSシンガポールリージョンでゲームサーバーを運用していた特定のゲーミングプロバイダーは、緊急でAGAに移行しました。数分以内に、エンドユーザーの接続が復旧しました。これが可能だったのは、AGAがエンドユーザーの近くにあるAGAのPoPでクライアントトラフィックを取り込み、AWSバックボーン経由でルーティングすることで、ケーブル切断を完全に回避したからです。
AGAによるアプリケーション可用性の向上
AGAがお客様のアプリケーションの可用性をどのように向上させるかについて説明しましょう。AGAの可用性については、2つの側面から考えています。1つ目は、AGAサービス自体のアーキテクチャです。AGAはクライアントのトラフィックのすべてのパケットと連携しているため、AGA自体が高可用性サービスであることを確保する必要があります。2つ目は、パブリックインターネット上のAGAの前面と、AGAの背後で発生する可能性のある障害への対処です。これには、AWSリージョン内のお客様自身のアプリケーションやインフラストラクチャに影響を与える可能性のある障害も含まれます。
AGAの独自のアーキテクチャに関しては、AGAサービス自体に冗長性を組み込むという概念から始めます。現在110あるPoint of Presenceのそれぞれは、2つの冗長な物理インフラストラクチャセットで構成されています。これはルーターからサーバーラックまで多岐にわたります。これらの2つの冗長なインフラストラクチャセットをそれぞれネットワークゾーンと呼んでいます。各ネットワークゾーンは、AGAで作成するリソースであるアクセラレーターに対して取得する1つのユニークなIPアドレスに対応しています。
AGA(AWS Global Accelerator)でリソースを作成すると、アプリケーションの前面に「アクセラレーター」と呼ばれるものが配置されます。このアクセラレーターには2つの静的IPアドレスがあり、それぞれが異なるネットワークゾーンに対応しています。クライアント側では、あるエッジロケーションの1つのネットワークゾーンに障害が発生した場合、もう一方のIPアドレスに再試行することができ、完全に別のハードウェアセットにアクセスすることができます。
次に、各ネットワークゾーン内で、インフラストラクチャ(物理サーバー)をさらに「セル」と呼ばれるものに分離しています。 これはセルラーアーキテクチャと呼ばれ、多くのAWSサービスで見られる一般的なパターンです。各ネットワークゾーンには4つのセルがあり、各セル内に複数の物理サーバーが稼働しています。そして、各顧客はネットワークゾーンごとに1つのセルに割り当てられます。
最後に、シャッフルシャーディングという技術を使用して、顧客をネットワークゾーンに割り当てています。この設計概念は、他のいくつかのAWSサービスにも存在します。シャッフルシャーディングは、 顧客が2つのネットワークゾーンのうち最大1つでのみ他の顧客と共存するように、顧客をセルに割り当てます。これは、ノイジーネイバー型の問題に対処するのに役立ちます。顧客を他の顧客から分離し、影響が1つのネットワークゾーンに限定されるようにします。
次に、Points of Presence(PoP)が外部とどのように通信するかについて説明しましょう。AWS Global Acceleratorでアクセラレーターを作成すると、2つの静的IPアドレスが割り当てられます。これらのIPアドレスは1つのサーバーや1つのPoPに対応するのではなく、AWS Global Acceleratorが稼働しているすべてのPoPに対応しています。これはエニーキャストルーティングと呼ばれる技術によって実現されています。これらのIPアドレスはすべてのAWS Global Accelerator PoPから通知され、クライアントトラフィックは自然にそのエンドユーザーに物理的に最も近いPoPに流れます。
この例では、1.3.5.7というIPアドレスがアクセラレーターの2つのIPアドレスの1つだとします。このIPアドレスはすべてのPoPから通知されます。ここでは図に2つのPoPを示しています。エンドユーザーの位置に基づいて、そのユーザーに最も近いPoPに自然にルーティングされます。ただし、特定のクライアントにとってPoPに到達できない理由はさまざまです。クライアントのビューアーネットワークとそのPoP間の接続に問題がある可能性や、PoPそのものがバックボーン経由で到達不能になる可能性もあります。Amazon CTOのWerner Vogelsが言うように、「すべてのものは常に故障し、その事実を踏まえてアプリケーションを計画し構築する必要がある」のです。
AWS Global Acceleratorは、PoP(Point of Presence)に接続性の問題が発生した場合、そのPoPからそのIPアドレスのアナウンスを停止します。 Anycastを通じて、これはエンドユーザーが影響を受けたPoPにルーティングされなくなり、代わりに自動的に次に近い健全なトラフィックを処理しているPoPにリルーティングされることを意味します。その結果、クライアントの接続は中断されることなく維持されます。
次に、AWS Global Acceleratorがお客様自身のアプリケーションインフラストラクチャ内の障害にどのように対処できるかについて説明しましょう。インターネット上でも、お客様自身のアプリケーション内でもさまざまなことが起こり得ます。不適切なデプロイメントや、地域アーキテクチャ内の不健全なインフラストラクチャが原因かもしれません。AWS Global Acceleratorは、その背後に登録されたすべてのエンドポイントの自動ヘルスチェックを活用します。単一のリージョン内、アベイラビリティーゾーン間、さらには複数のリージョンにわたって、複数のエンドポイントを登録できます。AWS Global Acceleratorは、特定のエンドユーザーをルーティングするのに最適な場所を自動的に判断します。
アプリケーションを複数のリージョンで実行している場合、AWS Global Acceleratorはエンドユーザーの位置を理解し、そのユーザーに対してアプリケーションを実行している最も近いAWSリージョンにルーティングします。AWS Global Acceleratorのヘルスチェックによって特定の場所が不健全であると判断された場合、 その場所へのトラフィックのルーティングを自動的に停止し、代わりにそれらのエンドユーザーを次に近い健全な場所にリルーティングします。
AGAのセキュリティ機能とDDoS緩和能力
AWS内の別のサービスであるAmazon Route 53(DNSサービス)が同様のことを行うことに注意することが重要です。DNS層でトラフィックを障害の周りにリルーティングできる他のサービスも存在します。これらは非常に有用で、多くのお客様が使用しており、多くのAWSサービスもこれらを利用しています。しかし、DNS基盤のフェイルオーバーには、AWS Global Acceleratorが対処する1つの主要な欠点があります。DNS基盤のフェイルオーバーは、クライアントからのDNSクエリに応答して、クライアントに接続する別のIPアドレスを提供することに依存しています。
DNSの回答をキャッシュすべき期間については、いくつかの標準がありますが、DNSシステムが適切に動作していれば、クライアントは新しいクエリを行い、新しいIPアドレスを取得し、最終的に新しい健全なエンドポイントに接続します。しかし、最良のケースでも、それには数分かかり、多くのユースケースでは、新しいIPアドレスを取得するためにDNSに適切にクエリを行わないデバイスの長いテールが存在します。これらのデバイスは、不健全なエンドポイントのIPアドレスを数分、数時間、あるいは数日間保持し続ける可能性があります。
AWS Global Accelerator (AGA) の利点の1つは、フェイルオーバーが静的IPアドレスの背後で行われることです。クライアントは実際には何もする必要がありません。代わりに、クライアントは健全なエンドポイントに到達するために何も行動を起こす必要なく、リルーティングされます。AGAはトラフィックの経路上にあるため、このリルーティングを実現することができるのです。
では、AWS Global Acceleratorがアプリケーションにどのようなセキュリティ機能や能力を提供するかについて見ていきましょう。 このスライドでは、同じアプリケーションを2回表示しています。上部では、AGAを介さずに、クライアントがパブリックインターネット経由でリージョンで実行されているアプリケーションに直接接続しています。下部は同じアプリケーションですが、トラフィックにAGAが介在しています。
AWSリージョンからパブリックインターネットにアプリケーションを公開する場合、そのリージョンからパブリックIPを公開することになります。これらはロードバランサー、Elastic IPアドレス、あるいはEC2インスタンスのパブリックIPアドレスかもしれません。考慮すべき点として、パブリックインターネットに公開される複数の、おそらく動的なパブリックIPアドレスのセットがあります。AWSのネットワークセキュリティサービスであるAWS Shieldは、リージョン内のアプリケーションにセキュリティ機能とDDoS緩和を提供できます。ただし、カスタマイズされたDDoS緩和のためにAWS Shield Advancedを使用する場合、これらのパブリックIPアドレスをすべてShield Advancedに登録する必要があります。
最後に、DDoS攻撃が発生した場合、悪意のあるトラフィックはブロックされる前にリージョンに到達してしまいます。AGAを介在させることで、世界中に分散された別の場所が追加されます。私たちには110のエッジロケーションがあり、そこでAWS Shieldと協力してDDoS緩和を実行し、他の緩和策も実施できます。AGAは実際に、攻撃トラフィックの多くをリージョンに近づく前に停止できます。事実、攻撃者にできるだけ近い場所で対処するため、DDoS攻撃を吸収し緩和する非常に効果的な方法となります。
その他の利点として、リージョン内のエンドポイントIPアドレスをすべてプライベートIPアドレスにできることが挙げられます。リージョナルアプリケーションで公開されたパブリックIPアドレスは全く必要ありません。パブリックIPアドレスはAGAによって公開される2つの静的IPアドレスで処理されます。これにより、クライアント自身のファイアウォールでアプリケーションをアクセス許可リストに追加する必要がある場合も容易になります。リージョナルエンドポイントからの動的なIPアドレスのセットではなく、予測可能なIPアドレスのセットをアクセス許可リストに追加できるのです。
AGA サービスに組み込まれている追加のセキュリティ機能には、既知のエンドポイントの容量に基づくレート制限があります。これは、エッジロケーションまたは Points of Presence (PoP) で行われます。AGA には、TCP ベースと UDP ベースの両方の一般的な DDoS 攻撃ベクトルに対する常時稼働の緩和策が備わっています。リージョン内で隠蔽できるプライベート IP アドレスは、固定の IP アドレスセットの背後にあります。これにより、クライアントがアプリケーションにアクセスする前にファイアウォールを実装する必要がある場合、アプリケーションをより簡単に許可リストに追加できます。
AGAによるパフォーマンス改善とTCP最適化
次に、AGA がエンドユーザーから見たアプリケーションのパフォーマンスをインターネット経由でどのように改善できるかについて説明しましょう。 エンドユーザーが経験するパフォーマンスについて話す際、実際には2つの測定方法や考え方があります。1つは、クライアントとアプリケーション間の往復時間の絶対値で、通常はミリ秒単位で測定されます。これをレイテンシーと呼びます。2つ目は、そのレイテンシーの変動性です。例えば、1つの接続から次の接続へ、往復時間が50ミリ秒から250ミリ秒に変化するなどです。これをジッターと呼びます。この変動性、つまりジッターは、
実際には絶対的なレイテンシーの数値よりも多くのクライアントの体験を妨げる可能性があります。リバッファリングやその他の問題を引き起こし、クライアントが気づく可能性があります。パブリックインターネットと比較して、AWS Global Accelerator (AGA) はこれらの両方の側面を改善できます。これは主に、エンドユーザーにより近い場所、Points of Presence (PoP) に位置し、AWS バックボーンを活用することによるものです。しかし、AGA が行っていることは実際にはそれ以上にあります。
このグラフは、2週間にわたる最初のバイトレイテンシーの時系列を示しています。基本的に、最初の接続ビットを確立するまでのレイテンシーです。ここでの例は、米国のクライアントから AWS の EU-West-1 リージョン(ダブリン)のアプリケーションエンドポイントへの接続です。 赤線(パブリックインターネット接続)の変動性が、青線(AGA)の変動性やジッターよりもはるかに大きいことがわかります。また、レイテンシーも AGA によって改善されています。
PoP で実行し、AWS バックボーン上でトラフィックを処理することに加えて、AGA は TCP termination と呼ばれる技術を通じて TCP トラフィックのパフォーマンスを向上させることができます。クライアントとアプリケーションエンドポイント間で TCP 経由の接続を作成する場合、それは最初の3つのパケットで構成されます。これを3ウェイハンドシェイクと呼びます。この3ウェイハンドシェイクが完了し、これらのパケットが受信されると、接続が確立され、その TCP 接続上で実際に意味のあるデータを送信することが可能になります。
パブリックインターネット上では、その接続において、各パケットはクライアントとリージョンの間の距離をパブリックインターネット経由で移動する必要があります。これは明らかに、3ウェイハンドシェイクの距離とレイテンシーを増加させます。AGAはエンドユーザーにより近いPoP(Points of Presence)を運用しています。AGAが実際に行っているのは、3ウェイハンドシェイクを並行して実行される2つの3ウェイハンドシェイクに分割することです。最初の3ウェイハンドシェイクはクライアントとAGA PoP自体の間で行われます。PoPがクライアントにより近いため、この3ウェイハンドシェイクはより小さな物理的距離を移動し、そのためかなり高速になる可能性があります。
2つ目の並行3ウェイハンドシェイクは、AGA PoPとリージョナルエンドポイントの間で行われます。これは一般的により長い距離を移動しますが、AWSバックボーン上で行われるため、輻輳から保護され、冗長リンクを通過します。そのため、パブリックインターネット経由の通信よりも信頼性が高く、一般的にレイテンシーも低くなります。これらのハンドシェイクを並行して実行した結果、TCP接続時間が最大60%短縮され、クライアントがアプリケーションを実行しているリージョンから遠く離れている場合、数十ミリ秒、あるいは数百ミリ秒の短縮になる可能性があります。
TheTradeDeskにおけるAGAの活用事例
AGAがTCPスループットを向上させるために行っているその他の工夫として、TCPバッファやジャンボフレームなどのオプションのTCP拡張機能の使用があります。これにより、1つのTCPパケットに最大6倍のデータを詰め込むことができます。結果として、クライアントとアプリケーションを実行しているリージョンの間の物理的距離に応じて、スループットが40%から60%向上します。
では、AGAがTheTradeDesk社のアプリケーションをどのように強化しているかについて、Sathyajith Bhatに話を譲りたいと思います。
ありがとうございます、Sean。Seanが、AGAがどのように、そしてなぜ機能するかについて素晴らしいデモンストレーションと説明をしてくれました。では、私たちが実際にどのように使用しているかについてお話しましょう。まず、TheTradeDesk社とは何でしょうか?TheTradeDesk社は、広告購入者向けの客観的で独立したプラットフォームを提供しています。私たちのプラットフォームには、キャンペーンの設定、実行、そしてこれらの広告キャンペーンの測定のためのツールが、シンプルで使いやすいユーザーインターフェース内にすべて揃っています。
TheTradeDeskプラットフォームを使用すると、ブランドや広告代理店はキャンペーンを設定し、そのキャンペーンに基づいてターゲットにしたい広告の種類を設定できます。これらのパラメータに基づいて、私たちのプラットフォームは広告を受け取るたびに入札を行います。TheTradeDeskプラットフォームは1日に約1兆の広告機会を見ています。これは1秒あたり約1300万のリクエストであり、かなりの数字です。このような規模で扱う場合、ジッターなどによるわずかな波紋が大きな影響を及ぼす可能性があります。さらに複雑なのは、100ミリ秒のSLAがあることです。つまり、広告入札リクエストの受信から選択、フィルタリング、応答の送信までの全プロセスを100ミリ秒の往復SLA内で完了しなければなりません。
では、Global Acceleratorはどのように私たちを助けてくれるのでしょうか?TheTradeDeskプラットフォーム内では、多くの動く部分があります。計算能力を増やすために、インスタンスを追加したり、計算サイズを増やしたり、キャッシングを改善したり、カーネルの調整を行ったりできます。しかし、インターネット上のネットワーク外のトラフィックは制御できません。これは流動的で、悪いルートのために100ミリ秒の遅延を逃す原因となる可能性があります。
こう考えてみてください:ある場所から別の場所へ移動する場合、各ハブや信号で停止する地方ルートを通るか、目的地への加速された経路を提供する高速道路を利用するかのどちらかです。これはAWS Global Acceleratorが私たちのために行っていることに似ています。インターネットからのトラフィックをAWSのグローバルバックボーンに引き込み、目的地へのルートをスムーズにします。Global Acceleratorはまた、エニーキャストを使用しています。つまり、同じIPセットが世界の異なる部分で広告されます。最も近い接続ポイントがリクエストを受け取り、PoP障害が発生した場合は次に近いPoPを使用することを保証します。
Global Acceleratorが私たちの日々のネットワークトラフィックの変動におけるピークと谷をどのように処理するかについて話しましょう。一日を通して大きなトラフィックの変動が見られます。通常、UTC-0の時点で、入札者が日々の支出額を満たすためのリクエストを受け取り始めると、トラフィックが大幅に増加します。キャンペーンは、ブランド、広告代理店、またはアカウントマネージャーによっていつでも設定でき、これらのキャンペーンの変更がトラフィックスパイクを引き起こす可能性があります。これらの変動を通じて、Global Acceleratorは設定の調整、パフォーマンスの調整、サポートリクエストを必要とせずに、すべてをシームレスに処理します。
エンドツーエンドの観点から見ると、これはユーザーにスムーズな体験を提供します。では、Global Acceleratorを使用するさまざまな方法を見てみましょう。TheTradeDeskプラットフォームには多くのシステムがありますが、私たちの2つのコアシステムに焦点を当てたいと思います:入札者とデータサーバーです。まず、ターゲティングデータの取り込みを処理するデータサーバーから始めましょう。最近、私たちはデータサーバーを最新のLinux LTSにアップグレードし始めました。1秒あたり1300万のクエリを処理する際に重要なダウンタイムを最小限に抑えながら、これらのインスタンスをアップグレードする必要がありました。
私たちは、Global Acceleratorが複数のエンドポイントをサポートしていることを発見し、これによって段階的なアップグレード戦略を実装することができました。既存のエンドポイントを古いスタックに向けて設定し、トラフィックの100%を処理させ、同時に新しいエンドポイントをアップグレードされたOSスタックで導入しました。Global Acceleratorのエンドポイントの重みを徐々に変更することで、古いスタックから新しいスタックへとトラフィックを段階的に移行することができました。
DNSは非常に分かりやすい名前を提供してくれるので好きなのですが、DNSの問題はTTL(Time to Live)にあります。すべてのDNSレコードにはTTLがあります。優れたクライアントであればDNSのTTLを尊重し、さらに優秀なクライアントであればTTLよりも速く対応します。しかし、一部のクライアントはTTLを尊重しません。実際には、DNSを尊重せず、数週間も接続を保持し続けるクライアントを見たことがあります。数分や数日ではなく、数週間です。ベンダーに連絡して「まだ存在しない接続にしがみついていますが、システムを再起動していただけますか?」と言わなければならないケースもありました。
エンドポイントとトラフィックを一方から他方へ移動させるブルー・グリーンアプローチを使用することで、迅速なフィードバックを得ることができました。何か悪影響があった場合でも、すぐにロールバックすることができ、エンドポイントのレート変更はほぼ瞬時に行われます。おそらく、メトリクスの反映は実際の応答よりも遅れると思います。
TheTradeDeskのビッディングシステムとAGAの統合
ビッディングシステムについて話しましょう。ビッダーは、ビッドの選択方法を処理するコードの一部です。これらはEC2インスタンス上でコンテナとして実行され、Auto Scaling groupによって管理されています。AWS Global AcceleratorにはAuto Scaling groupとのネイティブな統合サポートがないため、イベント駆動型のアプローチを使用しています。インスタンスが起動または終了すると、イベントが発生します。これらのイベントはEventBridgeによってキャプチャされ、私たちはそれらをリッスンしています。
私たちは、これらのイベントでトリガーされるLambda関数を作成しました。このLambdaは、EC2インスタンスがどのGlobal Acceleratorにエンドポイントとして追加されるべきかを判断します。EC2インスタンスが起動、設定変更、データキャッシュのために、トラフィックを受け入れる準備が整うまでに数分かかります。しかし、Global Acceleratorはヘルスチェックをサポートしているため、これについて心配する必要はありません。ヘルスチェックが失敗している間は、トラフィックはエンドポイントにルーティングされません。ヘルスチェックが合格し始めると、エンドポイントに追加され、トラフィックの処理を開始します。
次に、最近完了した新しい取り組みについて説明しましょう。以前は、Global Acceleratorをエッジロードバランサーに近い形で使用していました。必ずしもAWSのリージョンではありませんが、アジア太平洋リージョン、ヨーロッパリージョンなど、リージョン固有のエンドポイントを作成していました。そして、アカウントマネージャーがクライアントに確認し、どのリージョンにいるかを尋ね、適切なエンドポイントを提供していました。
私たちはこのアプローチを見直しました。リージョン固有のエンドポイントを持つ代わりに、Global Acceleratorを本来の使用方法で活用し、統一されたGlobal Acceleratorエンドポイントに移行しました。 今では、統一されたエンドポイントを提供しています。これにより、トラフィックはGlobal Acceleratorに到達し、最も近いエンドポイントグループへのルーティングを自動的に行います。通信エラーやその他の問題で、トラフィックが別のリージョンにリルーティングされる心配はありません。このアプローチは、全員にとって管理が簡単になり、運用の複雑さも軽減されます。
各AWS Global Accelerator内には、異なるエンドポイントがあります。リージョン全体でゆっくりとしたブルー/グリーンデプロイメントを行いたい場合は、この統一されたアプローチとエンドポイント固有のアプローチを組み合わせて、アプリケーションの配信にも活用できます。
これまでの探求について話しましょう。AWS Global Acceleratorには、トラフィックダイヤルと呼ばれる非常に便利な機能があります。これにより、そのエンドポイントグループにどれだけのトラフィックを配信するかをコントロールできます。ただし、これは実際にそのグループに向けられているトラフィックのことだということを覚えておいてください。この図では、ap-southeast-1とap-northeast-1が示されています。これらは2つの異なるエンドポイントグループです。southeast-1では100%のトラフィックがエンドポイントに向かっており、2つ目のグループではそれぞれのエンドポイントに50%ずつトラフィックが向かっています。これらのトラフィックダイヤルを使用して、southeast-1や他のリージョンにどれだけのトラフィックを送りたいかをコントロールできるのです。
トラフィックの量が設定したトラフィックダイヤルを超えた場合はどうなるのか、と疑問に思うかもしれません。その場合、AWS Global Acceleratorは他のエンドポイントグループにトラフィックを再ルーティングします。「それでは Global Accelerator の目的が損なわれてしまうのではないか?」と思うかもしれません。しかし、実際には Global Accelerator の背後にあるとき、レイテンシーはまだ十分に管理可能であることがわかっています。多くの場合、入札に応じないとお金を失うことになります。そのため、トラフィックを完全に落とすのではなく、他のリージョンに再ルーティングするだけです。少し遅い応答になるということでしょうか?確かにそうですが、それでもSLAの範囲内なので心配する必要はありません。私たちはまだこれを実験中です。まだ検討の余地がある問題ですが、次はこれを試すのを楽しみにしています。
AGAの最新機能と拡張性
では、AWS Global Acceleratorの新機能について話すSeanに引き継ぎます。ありがとう、Sathya。ありがとう、Sean。AGAが過去約12ヶ月間で顧客にリリースしたものを見てみましょう。いくつかの新機能を紹介します。まず、すべてのエンドポイントタイプに対するフルIPv6サポートです。IPv6は過去数年間でAWS全体でサポートが拡大してきました。AGAは、デュアルスタックエンドポイント(IPv4とIPv6の両方をサポートするエンドポイント)をサポートするデュアルスタックアクセラレーターと呼ばれるものをサポートに追加しました。
IPv6でサポートできるエンドポイントは、Application Load Balancer(ALB)、Network Load Balancer(NLB)、EC2インスタンスです。この機能により、2つのIPv4アドレスに加えて2つの静的IPv6アドレスが得られます。それぞれがAGA内の2つのネットワークゾーンの1つに対応しています。アクセラレーターをデュアルスタックにアップグレードするのにその場でできます。新しいものを作成する必要はありません。コンソールやAPIでトグルをオンにするだけです。
クライアントIPアドレスの保持は重要な機能で、AGAは数年前からApplication Load Balancerに対してサポートしていました。今年、Network Load Balancerに対してもサポートを追加しました。簡単に言えば、クライアントIPアドレスの保持とは何でしょうか?AGAからアプリケーションエンドポイントにトラフィックを送る方法は2つあります。1つはネットワークアドレス変換(NAT)モードで、アプリケーションエンドポイントはリクエスト元のIPアドレスをGlobal Accelerator自体のIPアドレスとして認識します。もう1つはクライアントIPアドレスの保持で、エンドポイントは実際のエンドユーザークライアントのIPアドレスを認識します。
これは、クライアントの身元を認識する必要があるアプリケーションにとって非常に関連性の高い機能です。許可リスト、ジオフェンシング、ログ記録、その他のコンプライアンス要件に潜在的に役立ちます。これにより、クライアントの実際のIPアドレスを観察し記録する必要がある多くのユースケースが可能になります。 インターネット向けおよび内部のNLB、さらにIPv4のみとデュアルスタックまたはIPv6対応のNLBの両方をサポートしています。
次に、AGAはクロスアカウントサポートをリリースしました。 この機能により、AWSで複数のAWSアカウントにまたがってアーキテクチャを分割できます。単一のアクセラレーターを固定のエントリーポイントとして使用し、複数のAWSアカウントのエンドポイントにアクセスすることが可能になります。クロスアカウントサポートはクロスアカウントアタッチメントを使用して実装され、異なるAWSアカウント間でリソースを管理する柔軟性を提供します。
これは、ネットワークチームが1つの隔離されたアカウントでGlobal Acceleratorリソースを管理し、アプリケーションチームが自身のAWSアカウントでリソースを管理できるという、顧客の間で一般的な戦略をサポートします。
まとめと追加リソース
まとめると、AWS Global Acceleratorは、インターネット経由でアプリケーションにアクセスするエンドユーザーに対して、より高い可用性、信頼性、セキュリティ、およびパフォーマンスを提供するように設計されたサービスです。AWS Global Accelerator内のすべてのコンポーネントは、サービス自体の可用性と回復力を高め、パブリックインターネット上の障害を回避して適応するという目的で設計されています。AWS Global Acceleratorは、ケーブルの切断、輻輳、その他一般的にインターネット天候と分類される問題などのインターネットの問題から保護します。これらすべての結果として、エンドユーザーに一貫性があり、安定した、高性能な体験を提供します。
プレゼンテーション後にこのスライドを再度表示します。 これらは、入門用リソースへのQRコードで、入門例のCloudFormationテンプレートやドキュメントへのリンクが含まれています。
※ こちらの記事は Amazon Bedrock を様々なタスクで利用することで全て自動で作成しています。
※ どこかの機会で記事作成の試行錯誤についても記事化する予定ですが、直近技術的な部分でご興味がある場合はTwitterの方にDMください。
Discussion