ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

【図解あり】CloudFrontにDirect Connectを接続するときに考えるべきこと


こんにちは。フォージビジョンの藤川と申します。

4G、5Gと通信環境が改善されてきている昨今、もう3Gのことを忘れている方も多いのではないでしょうか。ほんの15年前ほど前は3Gでも通信の速さにびっくりしていましたが、今となっては遅く感じてしまいます。
日常の生活で通信環境が改善されてくると職場の通信環境も気になってくるのは必然かと思います。AWS では、AWS-オンプレミス環境間をインターネットを経由することなく直接通信することができるDirect Connectというサービスを提供しています。これにより、堅牢なセキュリティを確保し、AWS利用時のパフォーマンスの向上が期待できます。

この度、Direct Connectを勉強する機会があり、Direct Connectの仕様について学び直した点がありましたので、記事にさせていただきたいと思います。

概要

この記事では、Direct Connectに関する以下の点について記載させていただきます。

  • CloudFrontにDirect Connectを接続するときに考えるべきこと

サービスの紹介

「CloudFrontにDirect Connectを接続するときに考えるべきこと」をご説明する前に、Direct ConnectとCloudFrontについて、簡単にご説明したいと思います。

Direct Connectとは?

Direct Connectは、VPCtやAWSのサービスと他のネットワーク(オンプレミス環境など)とを専用線で接続するサービスです。品質や性能の劣化や揺らぎを避けて一貫したスループットが必要である場合に利用すると良いかと思います。

aws.amazon.com

CloudFrontとは?

CloudFrontは、高速コンテンツ配信ネットワーク(CDN)サービスであり、Webコンテンツ配信を高速化します。また、CloudFrontは、世界中に点在し、日本だけでも20のエッジロケーション(2023/6/2時点)が存在しています。 高速化は、Webサーバーの中身をキャッシュするエッジサーバーを利用して行います。通常では、Webサイトの閲覧者はWebサーバーにアクセスしてページを取得しますが、エッジサーバーにキャッシュした内容を返させることによって、オリジナルのWebサーバーの負荷を低減させます。またエッジサーバーはネットワークの末端に置かれているため、Webサイトの閲覧者からアクセスするネットワークの距離が近くなるため、それに応じてレスポンス速度が向上が期待できます。

aws.amazon.com

CloudFrontにDirect Connectを接続する必要はあるのか?

Direct Connectを利用する理由

上記のサービス紹介にて、Direct ConnectとCloudFrontについて簡単なサービス説明をさせていただきましたが、双方共に通信環境の改善につながるサービスであることが分かります。
ただし、CloudFrontを利用することによってWebサイトの閲覧者からアクセスするネットワークの距離が近くなっても、インターネットを経由することには違いありません。ご利用状況によっては、OSバージョンアップ等で帯域が圧迫されてしまった場合には、AWSサービスへの通信にも影響が及んでしまいます。
この解決策として、短い距離であっても、Direct Connectを利用することで、AWSサービスの通信に関しては他のインターネットの影響を受けないようにすることができます。

CloudFrontを利用する理由

Direct Connectを利用した場合、Direct ConnectでAWSサービスに専用線で接続しているため、CloudFrontの「Webサイトの閲覧者からアクセスするネットワークの距離が近くする」意味が薄れてしまいます。 ただし、これ以外にも、CloudFrontを利用する意味は、2つあります。

オリジンサーバーの負荷軽減

CloudFrontのサービス紹介にも記載させていただいていますが、CloudFrontにはキャッシュ機能が備わっており、通常では、Webサイトの閲覧者はWebサーバーにアクセスしてページを取得しますが、エッジサーバーにキャッシュした内容を返させることによって、オリジナルのWebサーバーの負荷を低減させることができます。

Direct Connectを利用しない環境からの通信でも同じドメインを利用することができる

前提として、Direct Connectを利用しない通信については、CloudFrontを利用することとします。この場合、アクセス先としては、

  • Direct Connectを利用する場合: オリジンサーバー
  • Direct Connectを使用しない場合: CloudFront

ということになります。アクセス先が異なりますので、Direct Connectを利用する場合と利用しない場合とでドメインを分ける必要があります。

Direct Connectを利用する場合にもCloudFrontを利用した場合、アクセス先としては、

  • Direct Connectを利用する場合: CloudFront
  • Direct Connectを使用しない場合: CloudFront

ということとなります。アクセス先が同じとなりますので、Direct Connectを利用する場合と利用しない場合とで同じドメインを使用することができます。

CloudFrontにDirect Connectを接続するときに考えるべきこと

CloudFrontにDirect Connectを接続する方法について、AWSサポートセンターより、以下の回答をいただきました。

CloudFront エッジロケーションは、Public IP アドレスを保有しております。
Direct Connect のパブリック仮想インターフェースをご利用いただくことで、オンプレミス拠点からパブリック仮想インターフェースを経由して AWS の Public IP アドレスを持つ AWS リソースへの接続が可能となります。
但し、Amazon のバックボーンネットワーク内にない CloudFront エッジロケーションは、AWS から BGP の経路情報としてオンプレミス拠点に経路情報が広報されないため、これらの CloudFront エッジロケーションにパブリック仮想インターフェースを経由して接続することができません。
そのため、Amazon のバックボーンネットワーク内にない CloudFront エッジロケーションへの接続時にはオンプレミス拠点のインターネット回線経由で接続することをご検討いただき、その他の CloudFront エッジロケーションはパブリック仮想インターフェースを経由しての接続を行うといった構成であれば可能となります。

Amazon のバックボーンネットワークとは?

「Amazon のバックボーンネットワーク = AWS が所有するネットワーク」と捉えていただければと思います。

CloudFrontの種別について

CloudFrontは、世界中に点在しており、AWSバックボーンネットワーク( = AWS が所有するネットワーク)内に存在するもの存在しないものがあります。

CloudFrontはどのように選択されるのか?

Webサイトの閲覧者(Client)からCloudFrontにアクセスする際にどのCloudFrontに接続するかについては、AWS側で接続元からのレイテンシーの観点で最寄りとなるCloudFrontエッジロケーションを選択し、選択されたCloudFrontにアクセスするように自動でルーティングされます。

CloudFrontの選択はユーザー側で制御できないのか?

結論から申しますと、ユーザー側から、特定の CloudFront に接続させるといった制御することはできません。

  • CloudFront エッジロケーションが Amazon のバックボーンネットワークに含まれたものかを判断するための公開情報はなく、お客様にて事前に確認することができません。
  • 利用する CloudFront エッジロケーションは日常的に動的に切り替わるため、事前に確認されたものが運用時に必ず利用される保証もございません。

<補足>

AWSサービスのパブリックIPアドレス公開されています。

docs.aws.amazon.com

CloudFrontがAWSバックボーンネットワーク内に存在する/しない関わらず、CloudFrontのパブリックIPアドレスの場合には、AWSルータ側に向けることでユーザー側で制御できるのではないかという解決案が思い浮かびました。

結論から申しますと、これは対応不可となります。AWSサポートセンターからいただいた回答は、以下の通りです。

パブリック仮想インターフェースは、パブリック仮想インターフェース経由でオンプレミス環境に広報している経路情報 (IP アドレス) 宛の通信のみルーティング可能です。
そのため、オンプレミス環境に広報していない経路情報 (IP アドレス) 宛のトラフィックを送信されますと、パブリック仮想インターフェースの AWS ルーターはトラフィックをルーティングすることができないため、そのトラフィックを破棄いたします。

AWSルータまで到達することができますが、AWSルータがAWSバックボーンネットワーク内に存在しないAWSサービスの通信経路情報をもっていないため、ルーティングすることができず、トラフィックが破棄されるとのことでした。

Direct Connect接続後の経路情報の広報について

Direct Connectを接続すると、AWS バックボーンネットワーク内にあるAWSサービスのパブリック IP が経路情報としてAWS側から広報されます。
広報された情報をもとに、オンプレミスルータがAWS バックボーンネットワーク内にあるAWSサービスにアクセスする場合には、Direct Connectを経由するように制御します。

まとめ

CloudFrontには、経路情報が広報されているもの広報されていないものが存在することとなります。このため、以下のような挙動となります。

  • AWSバックボーンネットワーク内に存在するCloudFrontは、オンプレミスルータに経路情報が広報されているため、Direct Connectを通る
  • AWSバックボーンネットワーク内に存在しないCloudFrontは、オンプレミスルータに経路情報が広報されていないため、インターネットを通る

また、どのCloudFrontにするかはAWS側で制御されていることにより、Direct Connect経由のみにするといったユーザー側からの制御は一切できません。

最後に

端的に言うと通信方式がランダムで選ばれてしまうという形になってしまうので、運用管理が難しいといった印象を受けました。
設計に携わると、利用するサービスの踏み込んだ内容まで知ることができますし、調査の過程で思わぬ落とし穴を遭遇することや、逆に今まで知らなかった利用方法に気づくこともあります。
学んだ知識をしっかりと自分のものとして蓄積し、お客様によりスピーディーにより良いご提案をご提供できるように精進して参りたいと思います。