Amazon Global Aurora PostgreSQL クラスターの使用
Amazon Global Aurora PostgreSQL クラスターは、シングルサイトまたはマルチサイト構成の Keycloak の基盤となるデータベースとして使用できます。現在、これは ROSA 上の Keycloak デプロイメントでのみサポートされています。
Aurora グローバルデータベースは複数の AWS リージョンにまたがり、AWS リージョン全体の停止からの災害復旧を可能にします。Aurora は、プライマリー AWS リージョンから各セカンダリーリージョンへのすべてのデータと更新のレプリケーションを自動的に処理します。
Aurora クラスターのデプロイ
Aurora クラスターは、次の環境変数を設定して ./provision/aws/rds/aurora_create_global_db.sh
を実行することにより、複数の AWS リージョンにデプロイできます。
AURORA_GLOBAL_REGIONS= # A list of AWS regions for the Aurora cluster to span. The first region in the list is where the Primary cluster is hosted.
AURORA_GLOBAL_CLUSTER= # The name of the Global Aurora cluster
AURORA_INSTANCES= # The number of Aurora db instances to create in each region, defaults to 1.
これにより、リージョンごとに Aurora クラスターが作成され、それらがグローバル Aurora クラスター $AURORA_GLOBAL_CLUSTER
に関連付けられます。スクリプトは、すべてのリージョンクラスターとそのインスタンスが利用可能になるまで待機してから戻ります。グローバルクラスターが既に存在する場合、これを示すメッセージが表示され、スクリプトは終了コード 1 で失敗します。
Aurora Global DB クラスターは、複数のリージョンクラスターで構成されており、各リージョンクラスターには専用の Writer および Reader エンドポイントがあります。これを抽象化するために、Keycloak インスタンスがデータベースへの接続に使用する必要がある Route53 CNAME エントリを作成します。Route53 エントリは、$AURORA_GLOBAL_CLUSTER.aurora-global.keycloak-benchmark.com
で Aurora プライマリークラスターのライターエンドポイントを公開します。
前述の Route53 エントリがフェイルオーバー後のプライマリークラスターのライターエンドポイントを反映するようにするために、$AURORA_GLOBAL_REGIONS
のそれぞれに AWS Lambda 関数をデプロイします。この関数は、新しいプライマリークラスターのリージョンでグローバルフェイルオーバーイベントが完了するとトリガーされ、最新のライターエンドポイントを指すように CNAME エントリを更新します。
指定された |
ROSA クラスターと Aurora クラスターの接続
ROSA クラスターと個々の Aurora クラスターの間でピアリング接続を確立する必要があります。
このような接続を構成するには、次の環境変数を設定して ./provision/aws/rds/aurora_create_global_peering_connections.sh
を実行します。
AURORA_GLOBAL_CLUSTER= # The name of the Global Aurora cluster
CLUSTER_NAME= # The name of the ROSA cluster to establish the peering connectin with
Keycloak のデプロイ
さまざまな task ファイルを介して Keycloak をデプロイする場合、正しい DB エンドポイントが構成されるように、次の環境変数を設定する必要があります。
AURORA_GLOBAL_CLUSTER= # The name of the Global Aurora cluster
KC_DATABASE_URL=$AURORA_GLOBAL_CLUSTER.aurora-global.keycloak-benchmark.com
KC_DATABASE=aurora-postgres
クラスターフェイルオーバーのシミュレーション
プライマリーからセカンダリー Aurora クラスターへのフェイルオーバーは、failover-global-cluster コマンドを実行することでトリガーできます。
aws rds failover-global-cluster \
--global-cluster-identifier ${AURORA_GLOBAL_CLUSTER} \
--target-db-cluster-identifier ${AURORA_CLUSTER_IDENTIFIER} \
--allow-data-loss
ここで、AURORA_CLUSTER_IDENTIFIER
は、プライマリーにしたいセカンダリークラスターの ARN です。次のコマンドは、グローバル Aurora クラスターのすべてのメンバーの ARN を出力します。
aws rds describe-global-clusters \
--query "GlobalClusters[?GlobalClusterIdentifier=='${AURORA_GLOBAL_CLUSTER}'].GlobalClusterMembers[*].DBClusterArn"