CloudFront Functionsの新機能でエッジロケーション情報を取得して、オリジン切り替えを試してみた

CloudFront Functionsの新機能でエッジロケーション情報を取得して、オリジン切り替えを試してみた

2025年11月20日のアップデートにより、CloudFront Functionsで空港コードの取得が可能になりました。今回、滞在先のダラス(DFW)から現地の物理回線を使用してアクセスし、実際にDFWコードが取得できるか、またそれに基づいてオリジンが動的に切り替わるかをログレベルで検証しました。
2025.12.01

2025年11月20日、Amazon CloudFront で、3つのCloudFront Functions機能が追加されるアップデートがありました。

https://aws.amazon.com/jp/about-aws/whats-new/2025/11/amazon-cloudfront-3-functions-capabilities/

今回のアップデートにより、CloudFront Functions(CFF)内でエッジロケーションの空港コードRegional Edge Cache(REC)の情報が取得可能になり、さらに**オリジンを動的に選択(変更)**できるようになりました。

本機能の検証にあたり、今回ちょうど米国ダラス・フォートワース国際空港(DFW)周辺に滞在する機会がありました。そこで、VPNやプロキシによる擬似的なアクセスではなく、現地の物理ネットワークを利用して、実際に現在地の空港コードが DFW として正しく取得できるか、ログと実機挙動で裏付けを取りました。

現在地

Cloudflare-speedtest.-2jpg

新機能の概要と検証シナリオ

今回検証する主な機能は以下の通りです。

  1. エッジロケーション情報の取得 (cf.edgeLocation): 空港コード(IATA)、REC、サーバーIPの取得。
  2. オリジンの動的変更 (cf.selectRequestOriginById): リクエストごとに接続先オリジンを変更。

検証シナリオ

**「テキサス州ダラスからのアクセスはダラス専用のS3バケットへ、それ以外はデフォルトのS3バケットへルーティングする」**構成を構築し、アクセス元によってコンテンツが切り替わるかを確認します。

  • 検証場所: 米国テキサス州 フラワーマウンド(DFW空港 近郊)
  • ネットワーク: 現地ISP(Spectrum)経由の物理回線

CloudFormationによる検証環境の構築

検証の再現性を担保するため、CloudFormation(IaC)で環境を定義しました。
新機能を利用するには、CloudFront Functionsのランタイムとして cloudfront-js-2.0 を指定する必要があります。

テンプレート(抜粋)

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  # 1. CloudFront Function (Runtime 2.0)
  RoutingFunction:
    Type: AWS::CloudFront::Function
    Properties:
      Name: !Sub '${AWS::StackName}-routing'
      AutoPublish: true
      FunctionConfig:
        Comment: 'Route based on Edge Location'
        Runtime: cloudfront-js-2.0
      FunctionCode: |
        import cf from 'cloudfront';

        function handler(event) {
            var request = event.request;
            var edge = cf.edgeLocation;

            // エッジロケーション情報をヘッダーに付与(検証用)
            request.headers['x-edge-code'] = { value: edge.name };
            request.headers['x-edge-rec'] = { value: edge.region };
            request.headers['x-server-ip'] = { value: edge.serverIp };

            // ダラス(DFW)のエッジ経由の場合、専用オリジンへルーティング
            if (edge.name === 'DFW') {
                cf.selectRequestOriginById('dallas-origin');
            } else {
                cf.selectRequestOriginById('default-origin');
            }

            return request;
        }

  # 2. CloudFront Distribution
  MyDistribution:
    Type: AWS::CloudFront::Distribution
    Properties:
      DistributionConfig:
        Enabled: true
        # 2つのオリジンを定義
        Origins:
          - Id: default-origin
            DomainName: !GetAtt DefaultBucket.DomainName
            S3OriginConfig:
              OriginAccessIdentity: ''
          - Id: dallas-origin
            DomainName: !GetAtt DallasBucket.DomainName
            S3OriginConfig:
              OriginAccessIdentity: ''
        DefaultCacheBehavior:
          TargetOriginId: default-origin # デフォルト設定
          FunctionAssociations:
            - EventType: viewer-request
              FunctionARN: !GetAtt RoutingFunction.FunctionARN

上記テンプレートをデプロイし、2つのS3バケットにそれぞれ異なる index.html を配置しました。

  • DallasBucket: <h1>Hello from Dallas Origin (DFW)</h1>
  • DefaultBucket: <h1>Hello from Default Origin</h1>

動作検証

実際にクライアントからリクエストを送信し、レスポンスとログを確認します。

1. テキサス州(ダラス近郊)からの実アクセス

滞在先のネットワークから curl を実行し、接続されたエッジロケーションと返却されたコンテンツを確認しました。

$ curl -v https://d1xxxxxxxx.cloudfront.net/index.html

実行結果(レスポンスヘッダーとBody):

< HTTP/2 200
< date: Sun, 30 Nov 2025 23:00:00 GMT
< x-edge-code: DFW
< x-edge-rec: us-east-1
< x-server-ip: 18.160.xxx.xxx
...
<h1>Hello from Dallas Origin (DFW)</h1>

検証の結果、カスタムヘッダー x-edge-codeDFW が返却されました。
また、HTMLの内容もダラス用バケットのものが表示されており、物理的な位置情報に基づいて正しく dallas-origin が選択されたことを確認しました。

2. 日本(東京)からのアクセス

比較のため、AWS CloudShell(東京リージョン)を利用して日本からのアクセスを行いました。

[cloudshell-user@ip-10-0-xx-xx ~]$ curl -v https://d1xxxxxxxx.cloudfront.net/index.html

実行結果:

< HTTP/2 200
< x-edge-code: NRT
< x-edge-rec: ap-northeast-1
...
<h1>Hello from Default Origin</h1>

こちらは成田(NRT)のエッジロケーションが選択され、デフォルトのオリジンへルーティングされました。

まとめ

今回の検証により、以下の事実が確認できました。

  1. エッジロケーション情報の正確性: DFW近郊からの物理アクセスに対し、CloudFront Functionsは正確に空港コード DFW を返却しました。
  2. 動的ルーティングの動作: 取得したコードに基づき、cf.selectRequestOriginById によって意図通りにオリジンが切り替わりました。

これにより、従来の国単位(GeoLocation)よりも遥かに細かい、都市レベルやネットワークトポロジーに基づいたトラフィック制御が可能になることが実証されました。

日本国内においても、例えば東京(NRT/HND)と大阪(KIX)でオリジンを振り分けるような構成が可能か、帰国後に追って検証してみたいと思います。

この記事をシェアする

FacebookHatena blogX

関連記事