
【更新】ユーザー定義リクエストヘッダーは無料ではなくなりました。
アプリケーションへのリクエストの位置情報を取得したい場面はよくあります。主な用途は分析、つまりユーザーがどこからアクセスしているかを把握することです。
必要な情報はたいてい、リクエスト元の_国・都市・緯度・経度_だけです。この用途で長年MaxMindを使ってきました。MaxMindは非常に優れたサービスですが、商用版は年間約1,500ドルかかり、こうした基本的な用途には正直オーバースペックでした。
そんな中、Googleが「User-defined request headers」のベータ版サポートをリリースしました。これを使えば、Google Load-Balancer経由のリクエストの位置情報を_無料で_取得できます。本記事ではその設定方法を紹介します。
話を簡潔にするため、すでにGoogle Cloud上でアプリケーションを稼働させ、Google HTTP/S Load Balancer経由でリクエストをルーティングしている前提で進めます。
まず、ユーザー定義リクエストヘッダーに対応できるよう、バックエンドを更新する必要があります。私のバックエンド名は「app」で、使用したコマンドは次のとおりです。

要するに、Google Load Balancerに対して、各リクエストに「X-Client-Geo-Location」「X-Client-Geo-Region」「X-Client-Geo-LatLong」の3つのヘッダーを付加するよう指示しているわけです。ヘッダー名は自由に付けられますが、「X-User-IP」は使えず、「X-Google」や「X-GFE」で始まる名前もNGです。
バックエンドを更新してから数分すると、各リクエストに新しいヘッダーが付加されているのが確認できるはずです。

これで完了です。すべてのリクエストの位置情報を、無料かつ完全サーバーレスで取得できるようになりました。
ちなみに、リクエストに付加できるのは位置情報だけではありません。クライアントのRTT(往復伝送時間、ミリ秒単位)や、TLSバージョン・暗号・ホスト名なども取得できます。
更新 – 2024年9月:
Googleは、Google Load Balancerによる位置情報取得の価格を改定しました。現在は**100万リクエストあたり0.75ドル**、上限は**月額500ドル**です。最新情報はGoogle公式ドキュメントでご確認ください。
他の記事も読みたい方は、ブログをチェックするか、VadimをTwitterでフォローしてください。