web-dev-qa-db-ja.com

HerokuジオロケーションDNSとAmazonRoute 53

Euとusの2つのリージョンでHerokuで実行されているアプリケーションがあります。たとえば、myapp-eu.herokuapp.comとmyapp-us.herokuapp.comとします。

ユーザーがwww.myapp.comのサイトにアクセスしたときに、ユーザーが最も近い地域を指すように地理位置情報DNSを設定したいと思います。

これまで私が行ったことは、Amazon Route53を使用して2つのCNAMEレコードを設定することです。

  • www.myapp.com CNAME myapp-eu.herokuapp.com(地理がeuの場合)
  • www.myapp.com CNAME myapp-us.herokuapp.com(地理が私たちの場合)

ただし、Herokuは、2つの異なるアプリで使用される同じCNAMEを受け入れません。

Herokuで動作する地理DNSのセットアップに成功した人はいますか?

ありがとう!

2
passkey1510

私はHAProxyを使用してソリューションを投稿するつもりでした。これは、以前にここで回答として提供したと思います(ただし、検索しても見つかりませんでした)。

Herokuのグローバルアプリ名前空間の制限を考えると、それ(または同様のもの、varnishまたはnginxを使用することもできます)が唯一の実行可能なアプローチになります。DNSサービスはあなたが望むことを実行できないためです-ホストヘッダーの書き換えはDNSでは実行できません構成のみ。リクエストは、飛行中のヘッダーを書き換えることができる何らかのシステムを通過する必要があります。

ただし、必要なプロキシは2つではなく、1つだけです。理由は次のとおりです。

ホスト名がmyapp.example.comの場合は、そのホスト名を単純に予期するようにUSHerokuデプロイメントを構成します。

次に、カスタムホスト名を期待するようにEU展開を構成しないでください。バニティ以外のホスト名myapp-eu.herokuapp.comを使用します。

Route 53は、HerokuエンドポイントをUSクエリの回答として返し、プロキシエンドポイントをEUリクエストの場合に返すように設定されます。プロキシはHostヘッダーをmyapp-eu.herokuapp.comに書き換えて、リクエストをHeroku EUエンドポイントに送信しますが、USリクエストはHeroku USエンドポイントに直接送信され、クライアントがすでに使用しているホスト名を想定します。

プロキシを回避し、代わりにCloudFrontをプロキシとして使用することもできます。 CloudFrontのグローバル構成の制限により、このソリューションは2つの宛先(この場合はUSとEU)でのみ機能することに注意してください(特定の受信ホスト名に対して1つのCloudFrontディストリビューションのみを構成できます)...ただし、このソリューションでは1必要なのはそれだけです。一方の宛先(US)は直接接続を使用し、書き換えを必要としませんが、もう一方の宛先(EU)はCloudFrontを介してプロキシし、書き換えを取得します。

CloudFrontディストリビューションを作成します。 myapp.example.comの要求を予期するように構成します。バニティ以外のHerokuEUエンドポイントホスト名であるmyapp-eu.herokuapp.comをカスタムオリジンサーバーとして使用するように構成し、しない元のリクエストからホストヘッダーをホワイトリストに登録するように構成します。必要な他のヘッダーをホワイトリストに登録します。必要に応じて、キャッシュを無効にします。 CloudFrontは、Host:ヘッダーをmyapp.example.comから構成済みのオリジンサーバーのホスト名(EUエンドポイント)に書き換えます。

次に、前と同じように、USエンドポイントに移動する必要がある場所からのリクエストに対してUS HerokuエンドポイントCNAMEを返すようにルート53を設定しますが、EUエンドポイントに移動する必要がある場所からのリクエストに対してはCloudFront dxxxxxxxx.cloudfront.netCNAMEを返します。

いずれにせよ、プロキシまたはCloudFrontを経由するエンドポイントに送信するトラフィックのトランスポートに対して料金を支払うことになります。そのため、トラフィック量が少なくなると予想されるエンドポイントにそれを使用することをお勧めします。上記の例では、EUとUSを転置することをお勧めします。これは、USがより多くのトラフィックを受信すると任意に想定しているため、直接ルーティングされます。

これらのソリューションのいずれも、要求に大幅なラウンドトリップ時間を追加するべきではありません。プロキシルートを使用すると、t2.microやt2.nanoのような非常に小さなマシンでは、最小限の処理であるため、予想されるより多くのトラフィックを処理できることがわかります。

0