2016-12-19 11 views
2

私はプロジェクトに取り組んでいます。ここでは、ブラウザから最も近いS3領域を選択する必要があります。フランクフルト地域では、すべてのS3地域のトークンを渡すことができるAPIは1つしかありません。私はレイテンシーベースのルート(Route53)をもう使用できません。なぜなら、いつも同じEC2インスタンスに終わるからです。クライアント側スクリプトから最も近いAWS領域を見つけよう

私は、次のオプションを考えています

  1. Pingの適用可能なすべての領域(DynamoDBのエンドポイントへのpingはかなり速いです)と最速の応答を選択します。ヒックアップを避けるために、エンドポイントを3回pingすることができました。問題は、一時的なヒックアップが遠くにあるかもしれないS3ポイントを選択することです。

  2. 該当するすべての地域で独自の地域で応答するt1.microサーバーをインストールします。最速のEC2インスタンスにアクセスするために、待ち時間ベースのルートが使用されます。これはうまくいくはずです(これまではうまくいきました)が、私は24/7 EC2のインスタンスを必要とします。この目標だけではあまりにも高価です。

  3. オプション2と同じですが、専用のEC2インスタンスではなく、独自の領域を返すmocked APIゲートウェイを使用します。問題は、APIゲートウェイがまだすべての地域(サンパウロ)で利用可能ではないということです。

  4. 単一のt1.microインスタンスを使用し、各領域に弾性IPを追加します。 NGINXはIPアドレスをリッスンし、各アドレスの別の領域を返すように設定できます。 Route53は、各IPアドレスに解決されるレイテンシベースのルートを持つように設定する必要があります。そうすれば、私は1つのインスタンスだけを使うことができますが、必要な結果を得るためにいくつかの弾力的なIPを使うことができます。

  5. 残念ながら、私はDNSをブラウザ内からIPアドレスに解決できません。さもなければ、架空のIPアドレスにルーティングする複数の待ち時間に基づくルートを作成することができました。単にホスト名を解決すれば私にIPアドレスが与えられ、それが表す地域を教えてくれるでしょう。

AWSが最も高速な領域を決定するためにクライアントによって使用されるエンドポイントを提供するなら、それはうまくいくでしょう。誰もがスケールで動作し、あまりにも多くの費用がかからない別のスマートなソリューションを持っていますか?

+0

EC2でこれを行う設定を使用するために私に支払うことができます。 :)しかし、これらは興味深いアイデアですが、API Gatewayを使用する際のもう1つの問題(CloudFrontに関連した私のオリジナルの試みのもう1つの問題)は、複数のリージョンを同じホスト名に対応するように構成できないことです。 API Gatewayは、グローバルなCloudFrontの後ろに位置しています。次の[Lambda @ Edge](https://aws.amazon.com/blogs/aws/coming-soon-lambda-at-the-edge/)サービス*が解決策を提供するかもしれません。直感は、ラムダコンポーネントがAWS地域のAZの中で動くかもしれないと推測している。 –

答えて

0

いくつかの他のオプション:

  • 使用単一のAmazon S3地域が、使用アマゾンCloudFrontの - それはあなたのユーザー
  • 使用に近いコンテンツをキャッシュしますルート53ルーティングにレイテンシベース場所によって異なるDNS名を解決します。別のCNAMEレコードに解決しましたが、すべてフランクフルトに向けられていますが、リクエストを受け取ると、そこに到達するために使用されたドメイン名で最も近い地域を特定することができます(混乱、ええ!)
  • ユーザのの地理的位置を決定するためにMaxMindを使用します。
+0

CloudFrontは静的コンテンツにしか使用できないため、私にとってはオプションではありません。 CNAMEベースのレイテンシルーティングでは、Webサーバーは解決された名前の代わりにホストヘッダー内の元の名前を取得するため、これは機能しません。私はむしろ外部サービスに頼っていません。 –

+0

しかし、Route 53に複数のレイテンシベースルーティングエントリを設定することができます。異なるエンドポイント(同じリージョン内のすべて)に送信するように設定でき、エンドポイントに基づいて異なる応答を送信できます。 –

+0

私はすでに試してみましたが、うまくいきません。私は複数のレイテンシベースのルートを作成しました。各ルートは、そのレイテンシベースのルートのリージョンコードを返す独自のCloudFrontディストリビューションにマップします。残念ながら、これは動作しません。すべてのディストリビューションは同じFQDNを使用する必要があり、これは許可されていません。 FQDNは、1つのCloudFrontディストリビューションでのみ使用できます(残念ながら)。 –

0

このソリューションは、私がセットアップさまざまなDynamoDBのエンドポイントレイテンシーベースルーティングを使用する別のソリューションを持っている非HTTPSサイト

のために動作します動作します。すべてのDynamoDBのエンドポイントは、次の応答

healthy: dynamodb.<region>.amazonaws.com 

で応答ウェブサイトはexample.comと私は、私たち-東からEU-中央-1を最寄りの地域を見つけることができるようにしたい、AP上でホストされていると-southeast-1およびSA-東-1、そして私は4つのレイテンシーベースのルートを作成します。

region.example.com CNAME dynamodb.us-east-1.amazonaws.com 
region.example.com CNAME dynamodb.eu-central-1.amazonaws.com 
region.example.com CNAME dynamodb.ap-southeast-1.amazonaws.com 
region.example.com CNAME dynamodb.sa-east-1.amazonaws.com 

クライアントはhttp://region.example.comにHTTP GETリクエストを呼び出すと、それは、最も近い領域との健全なレスポンスを取り戻します。この行から領域を取得するのはかなり簡単です。

最も洗練されたソリューションではありませんが、追加コストなしで動作し、セットアップが少ししか必要ありません。

さらに重大な欠点は、DynamoDBがAmazon AWS証明書で応答するため、このメソッドをhttpsで使用できないことです。 HTTPS読み込みページからHTTPリクエストを発行することはできません(混在したコンテンツ)。

関連する問題