

# 障害挿入クエリを使用した Amazon Aurora PostgreSQL のテスト
<a name="AuroraPostgreSQL.Managing.FaultInjectionQueries"></a>

障害挿入クエリを使用して、Aurora PostgreSQL DB クラスターの耐障害性をテストできます。フォールト挿入クエリは、SQL コマンドとして Amazon Aurora インスタンスに発行されます。フォールトインジェクションクエリを使用すると、インスタンスをクラッシュさせて、フェイルオーバーと復旧をテストできます。また、Aurora レプリカの障害、ディスク障害、ディスクの輻輳をシミュレートできます。フォールトインジェクションクエリは、以下のように、使用可能なすべての Aurora PostgreSQL バージョンでサポートされています。
+ Aurora PostgreSQL バージョン 12、13、14 以降
+ Aurora PostgreSQL バージョン 11.7 以降
+ Aurora PostgreSQL バージョン 10.11 以降

**Topics**
+ [インスタンスのクラッシュのテスト](#AuroraPostgreSQL.Managing.FaultInjectionQueries.Crash)
+ [Aurora レプリカの障害のテスト](#AuroraPostgreSQL.Managing.FaultInjectionQueries.ReplicaFailure)
+ [ディスクの障害のテスト](#AuroraPostgreSQL.Managing.FaultInjectionQueries.DiskFailure)
+ [ディスクの輻輳のテスト](#AuroraPostgreSQL.Managing.FaultInjectionQueries.DiskCongestion)

障害挿入クエリでクラッシュを指定すると、Aurora PostgreSQL DB インスタンスのクラッシュが強制的に実行されます。その他の障害挿入クエリでは、障害イベントのシミュレーションが実行されますが、そのイベントは発生しません。障害挿入クエリを送信すると、障害イベントのシミュレーションが発生する時間も指定されます。

Aurora レプリカのエンドポイントに接続することによって、Aurora レプリカインスタンスの 1 つに障害挿入クエリを送信できます。詳細については、「[Amazon Aurora エンドポイント接続](Aurora.Overview.Endpoints.md)」を参照してください。

## インスタンスのクラッシュのテスト
<a name="AuroraPostgreSQL.Managing.FaultInjectionQueries.Crash"></a>

障害挿入クエリ関数 `aurora_inject_crash()` を使用して、Aurora PostgreSQL インスタンスのクラッシュを強制的に発生させることができます。

この障害挿入クエリでは、フェイルオーバーが発生しません。フェイルオーバーをテストする場合、RDS コンソールで DB クラスターの **[フェイルオーバー]** インスタンスアクションを選択するか、AWS CLI コマンドの [failover-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/failover-db-cluster.html)、または RDS API の [FailoverDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_FailoverDBCluster.html) オペレーションを使用します。

**構文**

```
1. SELECT aurora_inject_crash ('instance' | 'dispatcher' | 'node');
```オプション

この障害挿入クエリでは、次のクラッシュタイプのいずれかを指定できます。クラッシュタイプでは大文字と小文字は区別されません。

*インスタンス*  
Amazon Aurora インスタンスの PostgreSQL 互換データベースのクラッシュがシミュレートされます。

*'ディスパッチャー'*  
Aurora DB クラスターのプライマリインスタンスにあるディスパッチャーのクラッシュがシミュレートされます。*ディスパッチャー* は Amazon Aurora DB クラスターのクラスターボリュームに対して更新を書き込みます。

*ノード*  
PostgreSQL 互換データベースと Amazon Aurora インスタンスのディスパッチャーの両方のクラッシュがシミュレートされます。

## Aurora レプリカの障害のテスト
<a name="AuroraPostgreSQL.Managing.FaultInjectionQueries.ReplicaFailure"></a>

障害挿入クエリ関数 `aurora_inject_replica_failure()` を使用して、Aurora レプリカの障害をシミュレートできます。

Aurora レプリカの障害により、指定した時間間隔で指定した割合だけ Aurora レプリカまたは DB クラスター内のすべての Aurora レプリカへのレプリケーションがブロックされます。指定した時間が終了すると、影響を受けた Aurora レプリカは自動的にプライマリインスタンスと同期されます。

**構文**

```
1. SELECT aurora_inject_replica_failure(
2.    percentage_of_failure, 
3.    time_interval, 
4.    'replica_name'
5. );
```オプション

この障害挿入クエリでは、以下のパラメータを使用します。

*percentage\$1of\$1failure*  
障害イベントの発生時にブロックするレプリケーションの割合。この値は 0～100 の倍精度にすることができます。0 を指定すると、レプリケーションはブロックされません。100 を指定すると、すべてのレプリケーションがブロックされます。

*time\$1interval*  
Aurora レプリカの障害をシミュレートする時間。時間は秒単位で示されます。例えば、値が 20 の場合、シミュレーションは 20 秒間実行されます。  
Aurora レプリカの障害イベントの時間を指定するときには注意が必要です。指定する時間が長すぎ、障害イベントの発生時に書き込みインスタンスが大量のデータを書き込んだ場合、Aurora DB クラスターは Aurora レプリカがクラッシュしたものと見なし、レプリカを置き換える可能性があります。

*replica\$1name*  
障害シミュレーションを挿入する Aurora レプリカ。1 つの Aurora レプリカの障害をシミュレートするには Aurora レプリカの名前を指定します。DB クラスターのすべての Aurora レプリカの障害をシミュレートするには、空の文字列を指定します。  
レプリカ名を識別するには、`server_id` 関数の `aurora_replica_status()` 列を参照してください。次に例を示します。  

```
postgres=> SELECT server_id FROM aurora_replica_status();
```

## ディスクの障害のテスト
<a name="AuroraPostgreSQL.Managing.FaultInjectionQueries.DiskFailure"></a>

障害挿入クエリ関数 `aurora_inject_disk_failure()` を使用して、Aurora PostgreSQL DB クラスターのディスクの障害をシミュレートできます。

ディスク障害のシミュレーションでは、Aurora PostgreSQL DB クラスターがランダムにディスクセグメントをエラーとしてマークします。シミュレーションの実行中、これらのセグメントに対するリクエストはブロックされます。

**構文**

```
1. SELECT aurora_inject_disk_failure(
2.    percentage_of_failure, 
3.    index, 
4.    is_disk, 
5.    time_interval
6. );
```オプション

この障害挿入クエリでは、以下のパラメータを使用します。

*percentage\$1of\$1failure*  
障害イベントの発生時にエラーとしてマークするディスクの割合。この値は 0～100 の倍精度にすることができます。0 を指定すると、ディスクのどの部分もエラーとしてマークされません。100 を指定すると、ディスク全体がエラーとしてマークされます。

*index*  
障害イベントをシミュレートする特定の論理的なデータブロック。利用可能なデータの論理的なブロックまたはストレージノードの範囲を超えた場合は、指定できる最大インデックス値を示すエラーが表示されます。このエラーを回避するには、「[Aurora PostgreSQL DB クラスターのボリュームステータスの表示](AuroraPostgreSQL.Managing.VolumeStatus.md)」を参照してください。

*is\$1disk*  
障害が論理的なブロックに挿入されるのかストレージノードに挿入されるのかを示します。true を指定すると、論理的なブロックに障害が挿入されます。false を指定すると、ストレージノードに障害が挿入されます。

*time\$1interval*  
ディスク障害をシミュレートする時間。時間は秒単位で示されます。例えば、値が 20 の場合、シミュレーションは 20 秒間実行されます。

## ディスクの輻輳のテスト
<a name="AuroraPostgreSQL.Managing.FaultInjectionQueries.DiskCongestion"></a>

障害挿入クエリ関数 `aurora_inject_disk_congestion()` を使用して、Aurora PostgreSQL DB クラスターのディスクの輻輳をシミュレートできます。

ディスク輻輳のシミュレーションでは、Aurora PostgreSQL DB クラスターがランダムにディスクセグメントを輻輳としてマークします。これらのセグメントに対するリクエストは、シミュレーションの実行中、指定した最小遅延値と最大遅延値の間で遅延します。

**構文**

```
1. SELECT aurora_inject_disk_congestion(
2.    percentage_of_failure, 
3.    index, 
4.    is_disk, 
5.    time_interval, 
6.    minimum, 
7.    maximum
8. );
```オプション

この障害挿入クエリでは、以下のパラメータを使用します。

*percentage\$1of\$1failure*  
障害イベントの発生時に輻輳としてマークするディスクの割合。これは 0～100 の間の倍精度値です。0 を指定すると、ディスクのどの部分も輻輳としてマークされません。100 を指定すると、ディスク全体が輻輳としてマークされます。

*index*  
障害イベントのシミュレーションに使用する特定の論理的なデータブロックまたはストレージノード。  
利用可能なデータの論理的なブロックまたはストレージノードの範囲を超えた場合は、指定できる最大インデックス値を示すエラーが表示されます。このエラーを回避するには、「[Aurora PostgreSQL DB クラスターのボリュームステータスの表示](AuroraPostgreSQL.Managing.VolumeStatus.md)」を参照してください。

*is\$1disk*  
障害が論理的なブロックに挿入されるのかストレージノードに挿入されるのかを示します。true を指定すると、論理的なブロックに障害が挿入されます。false を指定すると、ストレージノードに障害が挿入されます。

*time\$1interval*  
ディスクの輻輳のシミュレートにかかる時間。時間は秒単位で示されます。例えば、値が 20 の場合、シミュレーションは 20 秒間実行されます。

*最小値、最大値*  
輻輳による遅延の最小値と最大値をミリ秒単位で指定します。有効な値の範囲は 0.0～100.0 ミリ秒です。シミュレーションを実行する間、輻輳としてマークされたディスクセグメントでは、最小値と最大値の間の範囲でランダムな遅延が発生します。最大値は最小値より大きくなければなりません。