Amazon RDS インスタンスをアベイラビリティーゾーンの外に移動する方法を教えてください。

所要時間2分
0

Amazon Relational Database Service (Amazon RDS) または Amazon Aurora インスタンスをアベイラビリティーゾーンの外に移動したいです。Amazon RDS DB サブネットグループにあるサブネットも削除したいです。

簡単な説明

Amazon RDS DB インスタンスを起動するには、DB サブネットグループに少なくとも 2 つのサブネットが含まれている必要があります。RDS インスタンスは、関連する DB サブネットグループ内のサブネットでのみ起動できます。サブネットは、同じ AWS リージョン内の別々のアベイラビリティーゾーンにある必要があります。中断を最小限に抑えるには、少なくとも 3 つのアベイラビリティーゾーンのサブネットを用意するのがベストプラクティスです。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

アベイラビリティーゾーンを特定する

アベイラビリティーゾーン ID

アベイラビリティーゾーン ID を使用して、ある AWS アカウント内のリソースの場所を別のアカウント内のリソースと関連付けて特定します。たとえば、use1-az2 にあるアカウントで実行されている Amazon Elastic Compute Cloud (Amazon EC2) インスタンスがあるとします。これらの EC2 インスタンスは、use1-az3 にあるアカウントで実行されている RDS データベースと通信します。AZ 間トラフィックによる追加コストや遅延を回避するには、両方のインスタンスを同じアベイラビリティーゾーンで実行します。障害が発生した場合のダウンタイムを減らすには、マルチ AZ 配置を使用します。

アカウントのアベイラビリティーゾーンのマッピングを確認してアベイラビリティーゾーン名を取得するには、describe-availability-zones コマンドを実行します。

aws ec2 describe-availability-zones --zone-ids ZONE ID --region REGION

注: ZONE ID はアベイラビリティーゾーンの ID に、REGION はお使いのリージョンに置き換えてください。

移動する RDS インスタンスを特定する

移動する RDS インスタンスを特定するには、AWS Config でアベイラビリティーゾーン名を使用するか、AWS CLI で list コマンドを実行します。

AWS Config

AWS Config を有効にします。次に、以下のコマンドを実行して、アベイラビリティーゾーンで実行されている、またはセカンダリノードがある DB インスタンスのリストを返します。

SELECT
  resourceId,
  resourceName,
  accountId,
  awsRegion,
  configuration.availabilityZone,
  configuration.secondaryAvailabilityZone
WHERE
  resourceType = 'AWS::RDS::DBInstance'
  AND (
    configuration.availabilityZone = 'us-east-1e'
    OR configuration.secondaryAvailabilityZone = 'us-east-1e'
  )

注: 上記のクエリでは、アベイラビリティーゾーンはアカウントのマッピングにあるゾーン名と一致する必要があります。

AWS CLI

describe-db-instances コマンドを実行して、アベイラビリティーゾーンに現在デプロイされている RDS DB インスタンスを一覧表示します。

aws rds describe-db-instances \
    --query 'DBInstances[?Engine!=`aurora-postgresql`&&Engine!=`aurora-mysql`&&(AvailabilityZone==`AVAILABILITY ZONE` || SecondaryAvailabilityZone==`AVAILABILITY ZONE`)].{"0-Engine":Engine, "1-DBInstanceIdentifier":DBInstanceIdentifier, "2-DBSubnetGroupName":DBSubnetGroup.DBSubnetGroupName, "3-AvailabilityZone":AvailabilityZone, "4-SecondaryAvailabilityZone":SecondaryAvailabilityZone} | sort_by([], &"1-DBInstanceIdentifier")' \
    --region us-east-1

describe-db-instances コマンドを実行して、アベイラビリティーゾーンに現在デプロイされている Aurora DB インスタンスを一覧表示します。

aws rds describe-db-instances \
    --query 'DBInstances[?Engine==`aurora-postgresql`&&Engine==`aurora-mysql`&&AvailabilityZone==`AVAILABILITY ZONE`].{"0-Engine":Engine, "1-DBClusterIdentifier":DBClusterIdentifier, "2-DBInstanceIdentifier":DBInstanceIdentifier, "3-DBSubnetGroupName":DBSubnetGroup.DBSubnetGroupName, "4-AvailabilityZone":AvailabilityZone} | sort_by([], &"1-DBClusterIdentifier")'  \
    --region us-east-1

インスタンスをアベイラビリティーゾーンの外に移動する

RDS DB インスタンス

注: シングル AZ 配置のアベイラビリティーゾーンは変更できません。

RDS インスタンスをアベイラビリティーゾーンの外に移動するには、次の手順を実行します。

  1. RDS インスタンスがシングル AZ 配置の場合は、DB インスタンスをマルチ AZ 配置に変更します。マルチ AZ 配置では、別のサブネットを使用する別のアベイラビリティーゾーンにスタンバイ DB インスタンスが作成されます。
  2. DB インスタンスをフェイルオーバーで再起動します。スタンバイ DB インスタンスがプライマリ DB インスタンスになります。
    注: フェイルオーバー後に DB インスタンスが新しいアベイラビリティーゾーンに発生することを確認します。
  3. DB インスタンスをシングル AZ DB インスタンスに変更します。その後、シングル AZ DB インスタンスは、削除対象のサブネットから削除されます。

Aurora DB インスタンス

Aurora インスタンスをアベイラビリティーゾーンの外に移動するには、次の手順を実行します。

  1. Aurora DB インスタンスがシングル AZ 配置の場合は、Aurora DB クラスターに新しいリーダーインスタンスを追加します。新しいリーダーインスタンスを作成するときに、DB サブネットグループからアベイラビリティーゾーンのいずれかを選択します。
  2. DB クラスターのフェイルオーバーを強制して、新しいリーダーインスタンスを新しいライター DB インスタンスとして昇格させます。
    注: ターゲットとなるリーダーインスタンスが複数あり、そのうち 1 つを指定しなかった場合、Amazon RDS は最も高い昇格階層を持つリーダーインスタンスを昇格させます。優先度の範囲は、最高優先度の 0 から最低優先度の 15 までです。詳細については、「Aurora DB クラスターのフォールトトレランス」を参照してください。
  3. 以前のプライマリ DB インスタンスを削除します

DB サブネットグループからサブネットを削除する

注: サブネットでインスタンスを起動した場合、そのサブネットは削除できません。削除するサブネットで DB インスタンスを起動した場合、次のエラーメッセージが表示されます。 「DB サブネットグループの変更リクエストが失敗しました。削除するサブネットの一部が現在使用中です:」

DB サブネットグループからサブネットを削除するには、次の手順を実行します。

  1. Amazon RDS コンソールを開きます。

  2. ナビゲーションペインで [サブネットグループ] を選択します。

  3. DB インスタンスが関連付けられているサブネットグループを選択し、[編集] を選択します。

  4. [DB サブネットグループを編集] ページの [サブネットを追加] で、削除対象のサブネットを削除します。

  5. どの RDS DB インスタンスがアベイラビリティーゾーンに残っているかを確認するには、describe-db-instances コマンドを実行します。

    aws rds describe-db-instances \
        --query 'DBInstances[?Engine!=`aurora-postgresql`&&Engine!=`aurora-mysql`&&(AvailabilityZone==`AVAILABILITY ZONE` || SecondaryAvailabilityZone==`AVAILABILITY ZONE`)].{"0-Engine":Engine, "1-DBInstanceIdentifier":DBInstanceIdentifier, "2-DBSubnetGroupName":DBSubnetGroup.DBSubnetGroupName, "3-AvailabilityZone":AvailabilityZone, "4-SecondaryAvailabilityZone":SecondaryAvailabilityZone} | sort_by([], &"1-DBInstanceIdentifier")' \
        --region us-east-1

    どの Aurora DB インスタンスがアベイラビリティーゾーンに残っているかを確認するには、describe-db-instances コマンドを実行します。

    aws rds describe-db-instances \
        --query 'DBInstances[?Engine==`aurora-postgresql`&&Engine==`aurora-mysql`&&AvailabilityZone==`AVAILABILITY ZONE`].{"0-Engine":Engine, "1-DBClusterIdentifier":DBClusterIdentifier, "2-DBInstanceIdentifier":DBInstanceIdentifier, "3-DBSubnetGroupName":DBSubnetGroup.DBSubnetGroupName, "4-AvailabilityZone":AvailabilityZone} | sort_by([], &"1-DBClusterIdentifier")'  \
        --region us-east-1
  6. [保存] を選択します。

RDS インスタンスを元のデプロイに戻す

マルチ AZ 配置から開始した場合は、DB インスタンスをマルチ AZ 配置に変更します。シングル AZ 配置から開始した場合は、それ以上の手順は必要ありません。

Aurora DB クラスターからリーダーインスタンスを削除した場合は、クラスターに新しいリーダー DB インスタンスを追加します。シングル AZ 配置から開始した場合は、それ以上の手順は必要ありません。

関連情報

DB サブネットグループを操作する

Amazon RDS DB インスタンスをパブリックサブネットから同じ VPC 内のプライベートサブネットに移動する方法を教えてください

Amazon RDS DB サブネットグループの一部であるサブネットを削除する方法を教えてください

AWS公式
AWS公式更新しました 1年前