

# ローカル書き込み転送用の Aurora PostgreSQL の設定
<a name="aurora-postgresql-write-forwarding-configuring"></a>

 以下のセクションを使用すると、Amazon Aurora PostgreSQL DB クラスターのローカル書き込み転送を有効にし、整合性レベルを設定して、書き込み転送でトランザクションを管理できるようになります。

## ローカル書き込み転送の有効化
<a name="aurora-postgresql-write-forwarding-enabling"></a>

 デフォルトでは、Aurora PostgreSQL DB クラスターのローカル書き込み転送は有効になっていません。ローカル書き込み転送は、インスタンスレベルではなくクラスターレベルで有効にします。

### コンソール
<a name="aurora-postgresql-write-forwarding-enabling.CON"></a>

 DB クラスターを作成または変更するときに、AWS マネジメントコンソール を使用して、**[リードレプリカの書き込み転送]** の **[ローカル書き込み転送を有効にする]** チェックボックスを選択します。

### AWS CLI
<a name="aurora-postgresql-write-forwarding-enabling.CLI"></a>

 AWS CLI でローカル書き込み転送を有効にするには、`--enable-local-write-forwarding` オプションを使用します。このオプションは、`create-db-cluster` コマンドを使用して新しい DB クラスターを作成するときに機能します。`modify-db-cluster` コマンドを使用して、既存の DB クラスターを変更する場合にも機能します。これらの同じ CLI コマンドで `--no-enable-local-write-forwarding` オプションを使用することで、ローカル書き込み転送を無効にすることができます。

 次の例では、ローカル書き込み転送を有効にして Aurora PostgreSQL DB クラスターを作成します。

```
                        aws rds create-db-cluster \
                        --db-cluster-identifier write-forwarding-test-cluster \
                        --enable-local-write-forwarding \
                        --engine aurora-postgresql \
                        --engine-version 16.4 \
                        --master-username myuser \
                        --master-user-password mypassword \
                        --backup-retention 1
```

 次に、書き込み転送を使用できるように、ライター DB インスタンスとリーダー DB インスタンスを作成します。詳細については、「[Amazon Aurora DB クラスターの作成](Aurora.CreateInstance.md)」を参照してください。

### RDS API
<a name="aurora-postgresql-write-forwarding-enabling.API"></a>

 Amazon RDS API を使用してローカル書き込み転送を有効にするには、`EnableLocalWriteForwarding` パラメータを `true` に設定します。このパラメータは、`CreateDBCluster` オペレーションを使用して新しい DB クラスターを作成するときに機能します。この操作は、`ModifyDBCluster` オペレーションを使用して既存の DB クラスターを変更する場合にも機能します。`EnableLocalWriteForwarding` パラメータを `false` に設定することで、ローカル書き込み転送を無効にすることができます。

### データベースセッションのローカル書き込み転送を有効にする
<a name="aurora-postgresql-write-forwarding-enabling-session"></a>

 `apg_write_forward.consistency_mode` パラメータは、書き込み転送を有効にする DB パラメータと DB クラスターパラメータです。読み取り整合性レベルには、`SESSION`、`EVENTUAL`、`GLOBAL`、または `OFF` を指定できます。整合性レベルの詳細については、[Aurora PostgreSQL でのローカル書き込み転送の整合性と分離](#aurora-postgresql-write-forwarding-isolation) を参照してください。

 このパラメータには、次の規則が適用されます。
+ デフォルト値は `SESSION` です。
+  ローカル書き込み転送は、`apg_write_forward.consistency_mode` を `EVENTUAL`、`SESSION`、または `GLOBAL` に設定した場合にのみ使用できます。このパラメータは、ローカル書き込み転送が有効になっている DB クラスターのリーダーインスタンスにのみ関係します。
+ 値を `OFF` に設定すると、セッションでのローカル書き込み転送が無効になります。

## Aurora PostgreSQL でのローカル書き込み転送の整合性と分離
<a name="aurora-postgresql-write-forwarding-isolation"></a>

リードレプリカの読み取り整合性の度合いを制御できます。読み取り整合性レベルを調整して、セッションから転送したすべての書き込みオペレーションを、後続のクエリの前に、リードレプリカに表示できます。また、この設定を使用して、リードレプリカのクエリで常にライター DB インスタンスの最新の更新を参照することもできます。これは、他のセッションまたは他のクラスターによって送信されたものであっても同様です。アプリケーションでこの種類の動作を指定するには、セッションレベルのパラメータ `apg_write_forward.consistency_mode` の適切な値を選択します。`apg_write_forward.consistency_mode` パラメータは、ローカル書き込み転送が有効になっているリードレプリカにのみ影響します。

**注記**  
`apg_write_forward.consistency_mode` パラメータには、`SESSION`、`EVENTUAL`、`GLOBAL` および `OFF` の値を指定できます。デフォルトでは、値は `SESSION` に設定されます。値を `OFF` に設定すると、書き込み転送が無効になります。

整合性レベルを上げると、リードレプリカに変更が反映されるまでアプリケーションで待つ時間が長くなります。レイテンシーを短縮することと、他の場所での変更が完全に利用可能になってからクエリを実行することのバランスを選択できます。

利用可能な整合性モードの設定ごとに、次のような効果があります。
+ `SESSION` – ローカル書き込み転送を使用するリードレプリカのセッションでは、そのセッションで行われたすべての変更の結果を表示できます。トランザクションがコミットされているかどうかにかかわらず、変更が表示されます。必要に応じて、クエリは、転送された書き込みオペレーションの結果が現在のリーダー DB インスタンスにレプリケートされるまで待ちます。他のセッションで実行された書き込みオペレーションの結果が現在の DB クラスター内で更新されるのを待つことはありません。
+ `EVENTUAL` – ローカル書き込み転送を使用するセッションでは、レプリケーションの遅延により、わずかに古いデータが表示されることがあります。同じセッションでの書き込みオペレーションの結果は、ライター DB インスタンスで書き込みオペレーションを実行してリードレプリカにレプリケートするまで表示されません。クエリは、更新された結果が使用可能になるのを待つことはありません。したがって、ステートメントのタイミングとレプリケーションの遅延の量に応じて、古いデータや更新されたデータが取得される可能性があります。
+ `GLOBAL` – リードレプリカのセッションでは、そのセッションで行った変更が表示されます。また、ライター DB インスタンスと他のリードレプリカの両方からコミットされたすべての変更も表示されます。各クエリは、セッション遅延の量に応じて待機時間が異なる場合があります。クエリを開始した時点で、ライター DB インスタンスからコミットされたすべてのデータでリードレプリカが最新の状態であると、クエリは続行します。
**注記**  
グローバル整合性モードは、セッション内で実行するクエリのレイテンシーに影響します。セッションが書き込みクエリを送信していない場合でも、待機が行われます。
+ `OFF` — ローカル書き込み転送は無効です。

書き込み転送を使用するセッションでは、`REPEATABLE READ` および `READ COMMITTED` 分離レベルのみを使用できます。ただし、`SERIALIZABLE` 分離レベルはサポートされていません。

 書き込み転送に関連するすべてのパラメータの詳細については、「[書き込み転送のデフォルトのパラメータ設定](aurora-postgresql-write-forwarding-understanding.md#aurora-postgresql-write-forwarding-params)」を参照してください。

## 書き込み転送によるトランザクションアクセスモード
<a name="aurora-postgresql-write-forwarding-txns"></a>

トランザクションアクセスモードを読み取り専用に設定している場合、ローカル書き込み転送は使用されません。ローカル書き込み転送が有効になっている DB クラスターおよびセッションに接続している場合にのみ、書き込みを読み取るようにアクセスモードを設定できます。

トランザクションアクセスモードの詳細については、「[SET TRANSACTION](https://www.postgresql.org/docs/current/sql-set-transaction.html)」を参照してください。