別の AWS リージョンでのリードレプリカの作成 - Amazon Relational Database Service

別の AWS リージョンでのリードレプリカの作成

Amazon RDS では、MariaDB、MySQL、Oracle、PostgreSQL のいずれかのリードレプリカをソース DB インスタンスとは異なる AWS リージョンに作成できます。クロスリージョンリードレプリカの作成は、Amazon RDS の SQL Server ではサポートされていません。


                クロスリージョンリードレプリカの設定

別の AWS リージョンにリードレプリカを作成して、以下を実行します。

  • 災害対策機能が向上します。

  • ユーザーに近い AWS リージョンへの読み取り操作をスケールします。

  • ある AWS リージョンのデータセンターから別の AWS リージョンのデータセンターへの移行が簡単になります。

ソースインスタンスとは異なる AWS リージョンでリードレプリカを作成する作業は、同じ AWS リージョンでレプリカを作成する作業と似ています。AWS マネジメントコンソール を使用するか、create-db-instance-read-replica コマンドを実行するか、CreateDBInstanceReadReplica API オペレーションを呼び出すことができます。

注記

ソース DB インスタンスとは異なる AWS リージョンに暗号化されたリードレプリカを作成するには、ソース DB インスタンスを暗号化する必要があります。

クロスリージョンリードレプリカの作成

異なる AWS リージョンでソース MariaDB、MySQL、Oracle、または PostgreSQL DB インスタンスからリードレプリカを作成する手順を以下に示します。

AWS マネジメントコンソール を使用して、複数の AWS リージョンにわたるリードレプリカを作成できます。

複数の AWS リージョンにわたるリードレプリカをコンソールで作成するには

  1. AWS マネジメントコンソール にサインインして、Amazon RDS で https://console.aws.amazon.com/rds/ コンソールを開きます。

  2. ナビゲーションペインで、[データベース] を選択します。

  3. リードレプリカのソースとして使用する MariaDB、MySQL、Oracle、PostgreSQL のいずれかの DB インスタンスを選択します。

  4. [アクション] で [リードレプリカの作成] を選択します。

  5. [DB インスタンス識別子] に、リードレプリカの名前を入力します。

  6. [Destination Region (送信先リージョン)] を選択します。

  7. 使用するインスタンス仕様を選択します。リードレプリカでも同じ DB インスタンスクラスとストレージタイプを使用することをお勧めします。

  8. 別の AWS リージョンで暗号化されたリードレプリカを作成するには

    1. [Enable encryption (暗号化の有効化)] を選択します。

    2. [Master key (マスターキー)] で、送信先 AWS リージョンのカスタマーマスターキー (CMK) の AWS Key Management Service (AWS KMS) キー識別子を選択します。

    注記

    暗号化されたリードレプリカを作成するには、ソース DB インスタンスを暗号化する必要があります。DB インスタンスの暗号化については、「Amazon RDS リソースの暗号化」を参照してください。

  9. ストレージの自動スケーリングなど、他のオプションを選択します。

  10. [Create read replica] を選択します。

異なる AWS リージョンでソースの MySQL、MariaDB、Oracle、または PostgreSQL DB インスタンスからリードレプリカを作成するには、create-db-instance-read-replica コマンドを使用できます。この場合、リードレプリカ (作成先のリージョン) が必要な AWS リージョンの create-db-instance-read-replica を使用し、ソース DB インスタンスの Amazon リソースネーム (ARN) を指定します。ARN は、Amazon Web Services で作成したリソースを一意に識別します。

たとえば、ソース DB インスタンスが 米国東部(バージニア北部) リージョンにある場合、ARN は次の例のようになります。

arn:aws:rds:us-east-1:123456789012:db:mydbinstance

ARN の詳細については、「Amazon RDS の Amazon リソースネーム (ARN) の使用」を参照してください。

ソース DB インスタンスから異なる AWS リージョンにリードレプリカを作成するには、作成先の AWS リージョンで AWS CLIcreate-db-instance-read-replica コマンドを使用します。別の AWS リージョンでリードレプリカを作成するには、次のパラメータが必要です。

  • --region – リードレプリカが作成される作成先の AWS リージョン。

  • --source-db-instance-identifier – ソース DB インスタンスの DB インスタンス識別子です。この識別子は、コピー元 AWS リージョンの ARN 形式である必要があります。source-db-instance-identifier で指定した AWS リージョンは、--region として指定した AWS リージョンと一致している必要があります。

  • --db-instance-identifier – 作成先の AWS リージョンのリードレプリカの識別子

例 クロスリージョンリードレプリカの

次のコードは、米国西部 (オレゴン) リージョン内のソース DB インスタンスから 米国東部(バージニア北部) リージョン内にリードレプリカを作成します。

Linux、macOS、Unix の場合:

aws rds create-db-instance-read-replica \ --db-instance-identifier myreadreplica \ --region us-west-2 \ --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:mydbinstance

Windows の場合:

aws rds create-db-instance-read-replica ^ --db-instance-identifier myreadreplica ^ --region us-west-2 ^ --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:mydbinstance

別の AWS リージョンで暗号化されたリードレプリカを作成するには、次のパラメータも必要です。

  • --source-region – ソース DB インスタンスの AWS リージョン。

    --source-region を指定しない場合、--pre-signed-url の値を指定する必要があります。署名付きの URL は、ソースの AWS リージョンで呼び出される CreateDBInstanceReadReplica オペレーションに対する、署名バージョン 4 で署名されたリクエストを含む URL です。署名付き URL の詳細については、「 CreateDBInstanceReadReplica」を参照してください。

  • --kms-key-id – 作成先の AWS リージョンのリードレプリカの暗号化に使用する、カスタマーマスターキー (CMK) の AWS KMS キー識別子

例 暗号化されたクロスリージョンリードレプリカの

次のコードは、米国西部 (オレゴン) リージョン内のソース DB インスタンスから 米国東部(バージニア北部) リージョン内に暗号化されたリードレプリカを作成します。

Linux、macOS、Unix の場合:

aws rds create-db-instance-read-replica \ --db-instance-identifier myreadreplica \ --region us-west-2 \ --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:mydbinstance \ --source-region us-east-1 \ --kms-key-id my-us-west-2-key

Windows の場合:

aws rds create-db-instance-read-replica ^ --db-instance-identifier myreadreplica ^ --region us-west-2 ^ --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:mydbinstance ^ --source-region us-east-1 ^ --kms-key-id my-us-west-2-key

異なる AWS リージョンでソースの MySQL、MariaDB、Oracle、または PostgreSQL DB インスタンスからリードレプリカを作成するには、Amazon RDS API 関数 CreateDBInstanceReadReplica を呼び出すことができます。この場合、リードレプリカが必要な AWS リージョン (作成先のリージョン) の CreateDBInstanceReadReplica を呼び出し、ソース DB インスタンスの Amazon リソースネーム (ARN) を指定します。ARN は、Amazon Web Services で作成したリソースを一意に識別します。

ソース DB インスタンスから異なる AWS リージョンに暗号化されたリードレプリカを作成するには、目的の AWS リージョンで Amazon RDS API の CreateDBInstanceReadReplica オペレーションを使用できます。暗号化されたリードレプリカを別の AWS リージョンに作成するには、PreSignedURL の値を指定する必要があります。PreSignedURL には、リードレプリカの作成先 AWS リージョンで呼び出す CreateDBInstanceReadReplica オペレーションのリクエストが含まれている必要があります。PreSignedUrl の詳細については、「CreateDBInstanceReadReplica」を参照してください。

たとえば、ソース DB インスタンスが 米国東部(バージニア北部) リージョンにある場合、ARN は以下のような内容です。

arn:aws:rds:us-east-1:123456789012:db:mydbinstance

ARN の詳細については、「Amazon RDS の Amazon リソースネーム (ARN) の使用」を参照してください。

https://us-west-2.rds.amazonaws.com/ ?Action=CreateDBInstanceReadReplica &KmsKeyId=my-us-east-1-key &PreSignedUrl=https%253A%252F%252Frds.us-west-2.amazonaws.com%252F %253FAction%253DCreateDBInstanceReadReplica %2526DestinationRegion%253Dus-east-1 %2526KmsKeyId%253Dmy-us-east-1-key %2526SourceDBInstanceIdentifier%253Darn%25253Aaws%25253Ards%25253Aus-west-2%123456789012%25253Adb%25253Amydbinstance %2526SignatureMethod%253DHmacSHA256 %2526SignatureVersion%253D4%2526SourceDBInstanceIdentifier%253Darn%25253Aaws%25253Ards%25253Aus-west-2%25253A123456789012%25253Ainstance%25253Amydbinstance %2526Version%253D2014-10-31 %2526X-Amz-Algorithm%253DAWS4-HMAC-SHA256 %2526X-Amz-Credential%253DAKIADQKE4SARGYLE%252F20161117%252Fus-west-2%252Frds%252Faws4_request %2526X-Amz-Date%253D20161117T215409Z %2526X-Amz-Expires%253D3600 %2526X-Amz-SignedHeaders%253Dcontent-type%253Bhost%253Buser-agent%253Bx-amz-content-sha256%253Bx-amz-date %2526X-Amz-Signature%253D255a0f17b4e717d3b67fad163c3ec26573b882c03a65523522cf890a67fca613 &DBInstanceIdentifier=myreadreplica &SourceDBInstanceIdentifier=arn:aws:rds:us-east-1:123456789012:db:mydbinstance &Version=2012-01-15 &SignatureVersion=2 &SignatureMethod=HmacSHA256 &Timestamp=2012-01-20T22%3A06%3A23.624Z &AWSAccessKeyId=<AWS Access Key ID> &Signature=<Signature>

Amazon RDS でのクロスリージョンレプリケーションのしくみ

Amazon RDS は、次のプロセスを使用してクロスリージョンリードレプリカを作成します。関係する AWS リージョンとデータベースのデータ量によっては、このプロセスは完了までに数時間かかることがあります。クロスリージョンリードレプリカを作成する際、この情報を使用してプロセスの進行状況を確認できます。

  1. Amazon RDS は、ソース DB インスタンスをレプリケーションソースとして設定し始め、ステータスを modifying に設定します。

  2. Amazon RDS は、転送先 AWS リージョンで指定されたリードレプリカをセットアップし始め、ステータスを creating に設定します。

  3. Amazon RDS は、ソース AWS リージョンでソース DB インスタンスの自動 DB スナップショットを作成します。DB スナップショット名の形式は、rds:<InstanceID>-<timestamp> です。ここで、<InstanceID> はソースインスタンスの識別子で、<timestamp> はコピーの開始日時です。たとえば、rds:mysourceinstance-2013-11-14-09-24 はインスタンス mysourceinstance から 2013-11-14-09-24 に作成されたことを表します。自動 DB スナップショットの作成中、ソース DB インスタンスのステータスが modifying のままになり、リードレプリカのステータスが creating のままになります。DB スナップショットのステータスは creating です。コンソールの DB スナップショットページの進行状況列には、DB スナップショット作成の進行状況が報告されます。DB スナップショットが完成すると、DB スナップショットとソース DB インスタンスの両方のステータスが available に設定されます。

  4. Amazon RDS は、初期データ転送用のクロスリージョンスナップショットコピーを開始します。スナップショットコピーは、転送先 AWS リージョンの自動スナップショットとして、creating のステータスで一覧表示されます。名前はソース DB スナップショットと同じです。DB スナップショットの進行状況列には、コピーの進行状況が示されます。コピーが完了すると、DB スナップショットコピーのステータスが available に設定されます。

  5. 次に、Amazon RDS はリードレプリカで初期データロード用のコピーされた DB スナップショットを使用します。このフェーズの間、リードレプリカは転送先の DB インスタンスの一覧に、creating のステータスで表示されます。ロードが完了すると、リードレプリカのステータスが available に設定され、DB スナップショットコピーが削除されます。

  6. リードレプリカが available ステータスに達すると、Amazon RDS は、リードレプリカ作成操作が開始されてからソースインスタンスに加えられた変更のレプリケーションから始めます。このフェーズでは、リードレプリカのレプリケーション遅延時間が 0 より大きくなります。

    レプリケーションのラグタイムについては、「リードレプリケーションのモニタリング」を参照してください。

クロスリージョンレプリケーションに関する考慮事項

AWS リージョン内でレプリケーションを実行する際の考慮事項はすべて、クロスリージョンレプリケーションに適用されます。AWS リージョン間のレプリケーションには、他にも次の考慮事項が適用されます。

  • 以下の Amazon RDS DB インスタンスを使用している場合、AWS リージョン間でしかレプリケーションできません。

    • MariaDB(すべてのバージョン)

    • MySQL(バージョン 5.6 以降)

    • Oracle Enterprise Edition (EE) エンジンのバージョン 12.1.0.2.v10 以降の 12.1 バージョン、および 12.2、18c、および 19c のすべてのバージョン

      Active Data Guard のライセンスが必要です。Oracle クロスリージョンリードレプリカの制限の詳細については、「Oracle のレプリカ要件」を参照してください。

    • PostgreSQL (すべてのバージョン)。

  • ソース DB インスタンスでは、複数の AWS リージョンにクロスリージョンリードレプリカを作成できます。

  • 別の Amazon RDS DB インスタンスのリードレプリカでないソース Amazon RDS DB インスタンスからのみ、クロスリージョン Amazon RDS リードレプリカを作成できます。

  • AWS GovCloud (米国東部) と AWS GovCloud (US-West) のリージョンの間ではレプリケーションできますが、AWS GovCloud (US) との間ではレプリケーションできません。

  • リードレプリカがソースインスタンスとは異なる AWS リージョンにある場合は、高いレベルのラグタイムが発生することが予想されます。リージョンのデータセンター間のネットワークチャネルの方が長くなったために、このようなラグタイムが発生します。

  • クロスリージョンリードレプリカでは、--db-subnet-group-name パラメータを指定する create read replica コマンドのいずれかで、同じ VPC の DB サブネットグループを指定する必要があります。

  • クロスリージョンリードレプリカは、次の場所で作成できます。

    • 別の AWS リージョンの VPC にあるソース DB インスタンスからの VPC

    • VPC 内にないソース DB インスタンスからの VPC

    • これは、VPC 内にあるソース DB インスタンスから VPC 内にありません

  • VPC のアクセスコントロールリスト (ACL) のエントリ数に制限があるため、5 つを超えるクロスリージョンリードレプリカのインスタンスについては保証されません。

  • リードレプリカは、指定された DB エンジンのデフォルトの DB パラメータグループを使用します。

  • リードレプリカは、デフォルトのセキュリティグループを使用します。

  • MariaDB、MySQL、Oracle DB の各インスタンスの場合、クロスリージョンリードレプリカのソースが削除されると、リードレプリカが昇格します。

  • PostgreSQL DB インスタンスの場合、クロスリージョンリードレプリカのソースが削除されると、リードレプリカのレプリケーションのステータスは terminated に設定されます。リードレプリカは昇格しません。

クロスリージョンリードレプリカのリクエスト

ソースリージョンと通信してクロスリージョンリードレプリカの作成をリクエストするには、リクエスタ (IAM ロールまたは IAM ユーザー) がソース DB インスタンスとソースリージョンへのアクセス権を持っている必要があります。

リクエスタの IAM ポリシーの特定の条件により、リクエストが失敗する可能性があります。次の例では、ソース DB インスタンスが 米国東部 (オハイオ) にあり、リードレプリカが 米国東部(バージニア北部) に作成されていることを前提としています。これらの例は、リクエストが失敗する原因となるリクエスタの IAM ポリシー内の条件を示しています。

  • リクエスタのポリシーには、aws:RequestedRegion の条件があります。

    ... "Effect": "Allow", "Action": "rds:CreateDBInstanceReadReplica", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "us-east-1" } }

    ポリシーがソースリージョンへのアクセスを許可していないため、リクエストは失敗します。リクエストを正常に実行するには、ソースリージョンとコピー先リージョンの両方を指定します。

    ... "Effect": "Allow", "Action": "rds:CreateDBInstanceReadReplica", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": [ "us-east-1", "us-east-2" ] } }
  • リクエスタのポリシーでは、ソース DB インスタンスへのアクセスが許可されていません。

    ... "Effect": "Allow", "Action": "rds:CreateDBInstanceReadReplica", "Resource": "arn:aws:rds:us-east-1:123456789012:db:myreadreplica" ...

    リクエストを正常に実行するには、ソースインスタンスとレプリカの両方を指定します。

    ... "Effect": "Allow", "Action": "rds:CreateDBInstanceReadReplica", "Resource": [ "arn:aws:rds:us-east-1:123456789012:db:myreadreplica", "arn:aws:rds:us-east-2:123456789012:db:mydbinstance" ] ...
  • リクエスターのポリシーが aws:ViaAWSService を拒否します。

    ... "Effect": "Allow", "Action": "rds:CreateDBInstanceReadReplica", "Resource": "*", "Condition": { "Bool": {"aws:ViaAWSService": "false"} }

    ソースリージョンとの通信は、リクエスタに代わって RDS によって行われます。リクエストを正常に実行するには、AWS のサービスからの呼び出しを拒否しないでください。

  • リクエスターのポリシーには、aws:SourceVpc または aws:SourceVpce の条件があります。

    RDS がリモートリージョンへの呼び出しを行うとき、指定された VPC または VPC エンドポイントからの呼び出しではないため、これらのリクエストは失敗する可能性があります。

リクエストが失敗する原因となる前述の条件のいずれかを使用する必要がある場合は、ポリシーに aws:CalledVia とともに 2 番目のステートメントを含めて、リクエストを成功させることができます。例えば、次のように aws:CalledViaaws:SourceVpce を使用できます。

... "Effect": "Allow", "Action": "rds:CreateDBInstanceReadReplica", "Resource": "*", "Condition": { "Condition" : { "ForAnyValue:StringEquals" : { "aws:SourceVpce": "vpce-1a2b3c4d" } } }, { "Effect": "Allow", "Action": [ "rds:CreateDBInstanceReadReplica" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": [ "rds.amazonaws.com" ] } } }

詳細については、IAM ユーザーガイド の 「IAM のポリシーとアクセス許可」を参照してください。

リードレプリカの承認

クロスリージョン DB のリードレプリカ作成リクエストが success を返した後、RDS はバックグラウンドでレプリカの作成を開始します。RDS がソース DB インスタンスにアクセスするための承認が作成されます。この承認は、ソース DB インスタンスをリードレプリカにリンクし、RDS が指定されたリードレプリカにのみコピーできるようにします。

承認は、サービスにリンクされた IAM ロールの rds:CrossRegionCommunication アクセス許可を使用して RDS によって検証されます。レプリカが承認されると、RDS はソースリージョンと通信し、レプリカの作成を完了します。

RDS は、CreateDBInstanceReadReplica リクエストによって以前に承認されていない DB インスタンスにアクセスできません。リードレプリカの作成が完了すると、承認は取り消されます。

RDS は、サービスリンクされたロールを使用して、ソースリージョンでの承認を確認します。レプリケーション作成プロセス中にサービスリンクされたロールを削除すると、作成は失敗します。

詳細については、IAM ユーザーガイドの「サービスにリンクされたロールの使用」を参照してください。

AWS Security Token Service 認証情報の使用

グローバル AWS Security Token Service (AWS STS) エンドポイントからのセッショントークンは、デフォルトで有効になっている AWS リージョン (商用リージョン) でのみ有効です。AWS STS の assumeRole API 操作からの認証情報を使用する場合、ソースリージョンがオプトインリージョンである場合は、そのリージョンのエンドポイントを使用します。それ以外の場合、このリクエストは失敗します。これは、認証情報が両方のリージョンで有効である必要があるために発生します。これは、そのリージョンの AWS STS エンドポイントが使用されている場合にのみオプトインリージョンに当てはまります。

グローバルエンドポイントを使用するには、オペレーションで両方のリージョンで有効になっていることを確認します。AWS STS アカウント設定でグローバルエンドポイントを Valid in all AWS Regions に設定します。

署名付き URL パラメータの認証情報にも同じルールが適用されます。

詳細については、IAM ユーザーガイドの「AWS リージョンでの AWS STS の管理」を参照してください。

クロスリージョンレプリケーションのコスト

クロスリージョンレプリケーションから転送されたデータには、Amazon RDS のデータ転送料金が発生します。以下のクロスリージョンレプリケーションアクションでは、ソース AWS リージョンから転送されるデータに対して料金が発生します。

  • リードレプリカを作成すると、Amazon RDS によりソースインスタンスのスナップショットが取得され、リードレプリカ AWS リージョンにスナップショットが転送されます。

  • ソースデータベースのデータに変更が加えられるたびに、Amazon RDS によりソース AWS リージョンからリードレプリカ AWS リージョンにデータが転送されます。

データ転送料金の詳細については、「Amazon RDS の料金」を参照してください。

MySQL および MariaDB インスタンスの場合、作成するクロスリージョンリードレプリカの数を減らすことで、データ転送コストを削減できます。例えば、1 つの AWS リージョンにソース DB インスタンスがあり、別の AWS リージョンに 3 つのリードレプリカが必要であるとします。この場合、ソース DB インスタンスからリードレプリカを 1 つのみ作成します。他の 2 つのレプリカは、ソース DB インスタンスからではなく、最初のリードレプリカから作成します。

例として、ある AWS リージョンに source-instance-1 がある場合は、次のようにできます。

  • ソースとして read-replica-1 を指定して、新しい AWS リージョンに source-instance-1 を作成します。

  • read-replica-2 から read-replica-1 を作成します。

  • read-replica-3 から read-replica-1 を作成します。

この例では、source-instance-1 から read-replica-1 に転送されるデータ対してのみ課金されます。read-replica-1 から他の 2 つのレプリカに転送されたデータには課金されません。すべて同じ AWS リージョンにあるためです。3 つのレプリカをすべて source-instance-1 から直接作成した場合、3 つのレプリカすべてへのデータ転送に課金されます。