マルチリージョンロードAmazon APIゲートウェイ
12118 ワード
このポストでは、どのようにAmazon API Gateway HTTP API 多領域設計に適合します.
シリーズの一部としてThe Multi-Region road , 他の部分をチェックアウトできます.
Part 1 - 多領域建築を始める前に考慮すべきことについての反省.
Part 2 - Cloudfrontのフェールオーバー設定.
Amazon API Gateway 私のユースケースには2つの風味があります. 残り HTTP 主な違いは報告されますhere と言及する他の価格はcheaper と60 %faster REST APIより.
私はHTTP APIを選びました、そして、キャッシュ支持がなくなっていると言うのは価値があります.それは、のために存在するだけですREST API .
私はCloudfrontで応答をキャッシュすることができるので、それは問題ではないと思います、そして、私が若干のキャッシュキー操作を必要とするならば、私は常に使うことができますCloudFront functions .
The requirements マルチ領域については、 アプリケーションは、低遅延が必要です. アプリケーションは、地域の障害に立つことができる必要があります. アプリケーションをスケールする必要があります. 上記の規則は全てこのアーキテクチャに適用する必要があります.
このような複雑な構成を実現するには、複数のRoute53 policies , そして、あなたはAWSから読むことができます:
レコードを作成するときは、ルーティングポリシーを選択します. 単純なルーティングポリシー-ドメインの指定された関数を実行する単一のリソース、たとえば例のコンテンツを提供するWebサーバーを使用します.comウェブサイト. フェイルオーバールーティングポリシー-アクティブパッシブフェイルオーバーを設定するときに使用します. ジオロケーションルーティングポリシー-あなたのユーザーの場所に基づいてトラフィックをルーティングするときに使用します. Geo近接ルーティングポリシー-あなたのリソースの場所に基づいてトラフィックをルーティングしたい場合は、必要に応じて、1つの場所のリソースから別のリソースにトラフィックをシフトします. 遅延ルーティングポリシー-複数のAWS領域にリソースを持っているときに使用します. MultiValue Answer Routing方針-あなたがルート53がランダムで選択された最高8つの健康的な記録でDNS質問に応じることを望むとき、使用してください. 重み付きルーティングポリシー-指定した割合で複数のリソースにトラフィックをルーティングするために使用します. レバレッジしたい フェイルオーバールーティングポリシー 遅延ルーティングポリシー 重み付けされたルーティングポリシー(同じ地域でのマルチアカウント設定に対してあまりにも多い)
アクティブパッシブフェイルオーバーを設定する場合に使用します.
デ-> irl -> uk ->
私はコードを繰り返して、テンプレートの入力としてより多くのパラメタを通過しなければなりません.
複数のAWS領域にリソースを持っているときに使用し、より少ない旅行時間で最高の待ち時間を提供する領域にトラフィックをルーティングします.
私は両方のポリシーを動作させるためにAPIレベルでカスタムドメインを使用するよう強制されます.
ご存知のように、同じレコードに複数のルーティングポリシーを持つことはできません.私は、私の記憶が私にいくらかのトリックをするのを避けるようにしました、そして、エラーはそうです:
私がServerlessをする間、概念は同じです、そして、1つの終点の失敗をシミュレーションするために、私はラムダ関数が500エラーステータスを返すであろうことを確認する必要があります、そして、削除しないでください、例えばカスタムドメインからのAPIマッピング.
私は今、マルチアーキテクチャのセットアップにこのアーキテクチャを動かす第2のステップを解決しました.
次に、Dynamodbとマルチ領域シナリオでデータを共有する複雑さを見ていきます.
シリーズの一部としてThe Multi-Region road , 他の部分をチェックアウトできます.
Part 1 - 多領域建築を始める前に考慮すべきことについての反省.
Part 2 - Cloudfrontのフェールオーバー設定.
アマゾンAPIゲートウェイ
Amazon API Gateway 私のユースケースには2つの風味があります.
私はHTTP APIを選びました、そして、キャッシュ支持がなくなっていると言うのは価値があります.それは、のために存在するだけですREST API .
私はCloudfrontで応答をキャッシュすることができるので、それは問題ではないと思います、そして、私が若干のキャッシュキー操作を必要とするならば、私は常に使うことができますCloudFront functions .
マルチ
The requirements マルチ領域については、
このような複雑な構成を実現するには、複数のRoute53 policies , そして、あなたはAWSから読むことができます:
レコードを作成するときは、ルーティングポリシーを選択します.
フェイルオーバールーティングポリシー
アクティブパッシブフェイルオーバーを設定する場合に使用します.
AWSTemplateFormatVersion: 2010-09-09
##########################################################################
# Parameters #
##########################################################################
Parameters:
Route53HostedZoneId:
Type: String
Route53DomainName:
Type: String
ApiPrimaryHostedZoneId:
Type: String
ApiPrimaryDomainName:
Type: String
ApiPrimaryEndpoint:
Type: String
ApiSecondaryHostedZoneId:
Type: String
ApiSecondaryDomainName:
Type: String
Resources:
##########################################################################
# Health Check #
##########################################################################
HealthCheck:
Type: AWS::Route53::HealthCheck
Properties:
HealthCheckConfig:
FullyQualifiedDomainName: !Ref ApiPrimaryEndpoint
Port: 443
RequestInterval: 10
FailureThreshold: 3
ResourcePath: /api
Type: HTTPS
Regions:
- eu-west-1 #Ireland
- ap-southeast-2 #Sydney
- us-west-1 #California
HealthCheckTags:
- Key: Name
Value: !Ref ApiPrimaryEndpoint
##########################################################################
# Route53 #
##########################################################################
FailOverGroup:
Type: AWS::Route53::RecordSetGroup
Properties:
HostedZoneId: !Ref Route53HostedZoneId
RecordSets:
- Name:
!Ref Route53DomainName
Type: A
Failover: PRIMARY
SetIdentifier: Primary
HealthCheckId: !Ref HealthCheck
AliasTarget:
HostedZoneId: !Ref ApiPrimaryHostedZoneId
DNSName: !Ref ApiPrimaryDomainName
EvaluateTargetHealth: True
- Name:
!Ref Route53DomainName
Type: A
Failover: SECONDARY
SetIdentifier: Secondary
AliasTarget:
HostedZoneId: !Ref ApiSecondaryHostedZoneId
DNSName: !Ref ApiSecondaryDomainName
EvaluateTargetHealth: False
この例では、2つの領域を使用しますが、カスケードフェイルオーバを作成したい場合はデ-> irl -> uk ->
私はコードを繰り返して、テンプレートの入力としてより多くのパラメタを通過しなければなりません.
遅延ルーティングポリシー
複数のAWS領域にリソースを持っているときに使用し、より少ない旅行時間で最高の待ち時間を提供する領域にトラフィックをルーティングします.
AWSTemplateFormatVersion: 2010-09-09
##########################################################################
# Parameters #
##########################################################################
Parameters:
Route53HostedZoneId:
Type: String
Route53DomainName:
Type: String
ApiGermanyHostedZoneId:
Type: String
ApiGermanyDomainName:
Type: String
ApiGermanyEndpoint:
Type: String
ApiIrelandHostedZoneId:
Type: String
ApiIrelandDomainName:
Type: String
ApiIrelandEndpoint:
Type: String
Resources:
##########################################################################
# Health Check #
##########################################################################
HealthCheckGermany:
Type: AWS::Route53::HealthCheck
Properties:
HealthCheckConfig:
FullyQualifiedDomainName: !Ref ApiGermanyEndpoint
Port: 443
RequestInterval: 10 #sec
FailureThreshold: 3
ResourcePath: /api
Type: HTTPS
Regions:
- eu-west-1 #Ireland
- ap-southeast-2 #Sydney
- us-west-1 #California
HealthCheckTags:
- Key: Name
Value: !Ref ApiGermanyEndpoint
HealthCheckIreland:
Type: AWS::Route53::HealthCheck
Properties:
HealthCheckConfig:
FullyQualifiedDomainName: !Ref ApiIrelandEndpoint
Port: 443
RequestInterval: 10 #sec
FailureThreshold: 3
ResourcePath: /api
Type: HTTPS
Regions:
- eu-west-1 #Ireland
- ap-southeast-2 #Sydney
- us-west-1 #California
HealthCheckTags:
- Key: Name
Value: !Ref ApiIrelandEndpoint
##########################################################################
# Route53 #
##########################################################################
DNSARecordGroup:
Type: AWS::Route53::RecordSetGroup
Properties:
HostedZoneId: !Ref Route53HostedZoneId
RecordSets:
- Name:
!Ref Route53DomainName
Type: A
Region: eu-central-1
SetIdentifier: Germany
HealthCheckId: !Ref HealthCheckGermany
AliasTarget:
HostedZoneId: !Ref ApiGermanyHostedZoneId
DNSName: !Ref ApiGermanyDomainName
EvaluateTargetHealth: True
- Name:
!Ref Route53DomainName
Type: A
Region: eu-west-1
SetIdentifier: Ireland
HealthCheckId: !Ref HealthCheckIreland
AliasTarget:
HostedZoneId: !Ref ApiIrelandHostedZoneId
DNSName: !Ref ApiIrelandDomainName
EvaluateTargetHealth: True
この例では2つの領域を使用しますが、すべての領域を使いたい場合は、そのコードをRecorseSetGroupに繰り返して、各エンドポイントのヘルスチェックを作成しなければなりません.好奇心
私は両方のポリシーを動作させるためにAPIレベルでカスタムドメインを使用するよう強制されます.
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
##########################################################################
# Parameters #
##########################################################################
Parameters:
StageName:
Description: The name of the stage is the first path segment in the Uniform Resource Identifier (URI) of a call to API Gateway
Type: String
Default: dev
Domain:
Type: String
CertId:
Type: String
Stage:
Type: String
Default: $default
Resources:
##########################################################################
# API Gateway Custom Domain
# ##########################################################################
CustomDomainName:
Type: AWS::ApiGatewayV2::DomainName
Properties:
DomainName: !Ref Domain
DomainNameConfigurations:
- EndpointType: REGIONAL
CertificateArn: !Sub "arn:aws:acm:${AWS::Region}:${AWS::AccountId}:certificate/${CertId}"
CertificateName: gatewayCertificate
ApiMapping:
Type: AWS::ApiGatewayV2::ApiMapping
Properties:
ApiId:
Fn::ImportValue:
!Sub ApiId-${AWS::Region}
DomainName: !Ref CustomDomainName
Stage: !Ref Stage
Outputs:
RegionalHostedZoneId:
Description: The regional hosted zone id of the custom domain
Value: !GetAtt CustomDomainName.RegionalHostedZoneId
Export:
Name: !Sub RegionalHostedZoneId-${AWS::Region}
RegionalDomainName:
Description: The regional domain name of the custom domain
Value: !GetAtt CustomDomainName.RegionalDomainName
Export:
Name: !Sub RegionalDomainName-${AWS::Region}
カスタムドメイン名は、文字のランダムな組み合わせよりもユーザーに提供するより直感的なURLです.たとえば、Route 53は、ルートポリシーのカスタムドメインを使用しますが、Healthはエンドポイントをチェックします.ただし、カスタムドメインのカスタムドメインまたはエンドポイントマッピングを削除することによってフェールオーバーまたは次のベストレイテンシ領域をトリガーするエラーをシミュレートしようとすると、これは誤解を招く可能性があります.結論
ご存知のように、同じレコードに複数のルーティングポリシーを持つことはできません.私は、私の記憶が私にいくらかのトリックをするのを避けるようにしました、そして、エラーはそうです:
(InvalidChangeBatch 400: RRSet with DNS name api.xxxxx.com., type A, SetIdentifier Italy, and Region Name=eu-south-1 cannot be created because a non-latency RRSet with the same name and type already exists.)
ヘルスチェック状態が不健康であるときだけ、Route 53が次の終点への要求をリダイレクトするので、健康チェックは両方のルーティング方針のためのキーです.があるHow health checks work in complex Amazon Route 53 configurations それはいくつかのケースを考慮していますが、インスタンスを使用しています.私がServerlessをする間、概念は同じです、そして、1つの終点の失敗をシミュレーションするために、私はラムダ関数が500エラーステータスを返すであろうことを確認する必要があります、そして、削除しないでください、例えばカスタムドメインからのAPIマッピング.
私は今、マルチアーキテクチャのセットアップにこのアーキテクチャを動かす第2のステップを解決しました.
次に、Dynamodbとマルチ領域シナリオでデータを共有する複雑さを見ていきます.
Reference
この問題について(マルチリージョンロードAmazon APIゲートウェイ), 我々は、より多くの情報をここで見つけました https://dev.to/aws-builders/the-multi-region-road-amazon-api-gateway-59l0テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol