[新機能] Amazon CloudFrontでより詳細なジオロケーションヘッダが利用できるようになりました

Amazon CloudFrontではこれまでも国コードをカスタムヘッダで取得可能でしたが、さらに国名や都市名、郵便番号やタイムゾーン、緯度経度などの情報を取得できるようになりました。実際にディストリビューションを作成して確認してみます。
2020.07.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。AWSが提供する高速・高パフォーマンスなコンテンツ配信サービス(CDN)であるAmazon CloudFront、これまでもカスタムヘッダによりアクセス元の国コードを取得することが可能でしたが、([新機能] Amazon CloudFrontがジオターゲティングに対応しました | Developers.IO)今回さらに、都市名や郵便番号、タイムゾーンといったより詳細なロケーションに関する情報がカスタムヘッダにより取得できるようになりました。(2020/07/24にポストされたアップデート内容になります。)

新たに取得できるようになったジオロケーションヘッダについてはドキュメントの以下ページに詳細がまとめられています。

本エントリではこの追加されたジオロケーションヘッダをオリジンに転送するようCluodFrontを設定、実際にCloudFrontで付与されたジオロケーションヘッダを確認してみたのでまとめてみます。

追加されたジオロケーションヘッダをオリジンに転送するようにCloudFrontを設定する

まずは追加されたジオロケーションヘッダをオリジンに転送するように、CloudFrontを設定していきます。今回オリジンはEC2インスタンスで、Apache+PHPを稼働させています。

まずは先日リリースされた新機能のオリジンリクエストポリシーで、追加されたジオロケーションヘッダをオリジンリクエスト時に転送するように設定します。 *1

以下のようにOrigin request contentsHeaders項目にてAll viewer headers and whitelisted CloudFront-* headersを選択します。そして今回は以下のCloudFront-*なヘッダを追加しました。1つ目のCloudFront-Viewer-Country以外が、今回のアップデートで追加されたジオロケーションヘッダとなります。Custom-GeolocationHeadersという名前をつけてOrigin request policyを作成します。

  • CloudFront-Viewer-Country
  • CloudFront-Viewer-Country-Name
  • CloudFront-Viewer-Country-Region
  • CloudFront-Viewer-Country-Region-Name
  • CloudFront-Viewer-City
  • CloudFront-Viewer-Postal-Code
  • CloudFront-Viewer-Time-Zone
  • CloudFront-Viewer-Latitude
  • CloudFront-Viewer-Longitude
  • CloudFront-Viewer-Metro-Code

続いてCloudFrontディストリビューションを作成します。Webディストリビューションで以下のように設定しました。設定のポイントとして、レガシーなキャッシュ設定ではなく、先日新しく追加された機能、Cache PolicyとOrigin Request Policyで設定を行います。([アップデート] Amazon CloudFront でキャッシュキーとオリジンリクエストポリシーによる管理が可能となりました | Developers.IO)Cache PolicyはManaged-CachingDisabledを選択、そしてOrigin Request Policyでは先ほど作成したCustom-GeolocationHeadersを選択します。

追加されたジオロケーションヘッダを確認してみる

ディストリビューションが作成できたら、実際にCloudFrontへアクセスし、ヘッダ内容を確認してみます。オリジンであるEC2インスタンス、Apache+PHPの環境でindex.phpとして以下のコードを配置、ヘッダの内容を出力するようにしています。

index.php

<?php

foreach (getallheaders() as $name => $value) {
    echo "<p>";
    echo "$name: $value\n";
    echo "</p>";
}

?>

実際にブラウザからhttps://[CloudFrontドメイン]/にアクセスしてみました。自宅にある環境で準備ができた2種のプロバイダ、1つのモバイル回線(docomo)のテザリング環境で試しています。私は都内在住でこのブログエントリ検証についても東京都内で行いました。CloudFront-Viewer-Country-Region-NameについてはいずれもTokyoで合致しています。CloudFront-Viewer-CityについてはKiyoseShinjukuSetagaya-kuと3つの環境で異なる値となりました。ただ検証を行ったエリアは東京の西のほうであり、おおよその位置は検出できているのではないかと考えます。緯度経度情報であるLatitude、Longtitudeも同様です。

結果その1(プロバイダ1)

結果その2(プロバイダ2)

結果その3(docomoテザリング)

まとめ

Amazon CloudFrontで新たに利用できるようになった詳細なジオロケーションヘッダについて確認してみました。これまの国別情報に加え、都市や郵便番号、タイムゾーン、そして緯度経度などもカスタムヘッダで取得できるようになり、活用の幅がさらに広がりました。

脚注

  1. なお、従来通りの「レガシー」な方法で「すべてのヘッダをオリジンに転送する」設定でも試してみたのですが、こちらは現時点で確認する限り、追加のジオロケーションヘッダはオリジンに転送されませんでした。