

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# pg\_transport を使用して 2 つの Amazon RDS DB インスタンス間でPostgreSQL データベースを転送する
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport"></a>

*Amazon Web Services、Raunak Rishabh、Jitender Kumar*

## 概要
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-summary"></a>

このパターンでは、**pg\_transport** エクステンションを使用して、2 つの Amazon Relational Database Service (Amazon RDS) for PostgreSQL DB インスタンス間で非常に大規模なデータベースを移行する手順を示しています。このエクステンションは、物理的な移行メカニズムで各データベースを移行させます。最小限のプロセスでデータベースファイルをストリーミングすることで、最小限のダウンタイムで DB インスタンス間で大規模なデータベースを移行できます。この拡張機能では、ターゲット DB インスタンスがソース DB インスタンスからデータベースをインポートするプルモデルを使用します。

## 前提条件と制限事項
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-prereqs"></a>

**前提条件**
+ 両方の DB インスタンスが同じメジャーバージョンの PostgreSQL を実行している必要があります。
+ データベースはターゲットに存在してはいけません。そうしない場合、移行は失敗します。
+ **pg\_transport** 以外の拡張機能をソースデータベースで有効にしないでください。
+ すべてのソースデータベースオブジェクトはデフォルトの **pg\_default** テーブルスペースになければなりません。
+ ソース DB インスタンスのセキュリティグループは、ターゲット DB インスタンスからのトラフィックを許可する必要があります。
+ 「[psql](https://www.postgresql.org/docs/11/app-psql.html)」や「[PgAdmin](https://www.pgadmin.org/)」などの PostgreSQL クライアントをインストールして、Amazon RDS PostgreSQL DB インスタンスと連携させます。クライアントは、ローカルシステムにインストールすることも、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用することもできます。このパターンでは、EC2 インスタンスで psql を使用します。

**制限事項**
+ Amazon RDS for PostgreSQL の異なるメジャーバージョン間でデータベースを転送することはできません。
+ ソースデータベースからのアクセス許可と所有権は、ターゲットデータベースに移行されません。
+ リードレプリカやリードレプリカの親インスタンス上でデータベースを転送することはできません。
+ このメソッドで転送する予定のデータベーステーブルでは、**reg** データタイプを使用することはできません。
+ DB インスタンス上で、合計 32 トランスポー (インポートとエクスポートの両方を含む) まで同時に実行できる。
+ テーブルの名前を変更したり、テーブルを含めたり除外したりすることはできません。すべてはそのまま移行されます。

注意
+ 拡張機能を削除すると依存オブジェクトやデータベースの操作に重要なデータも削除されるため、拡張機能を削除する前にバックアップを作成してください。
+ **pg\_transport** のワーカー数と `work_mem` 値を決定するときは、ソースインスタンス上の他のデータベースで実行されているインスタンスクラスとプロセスを考慮してください。
+ トランスポートが開始されると、ソースデータベースのすべての接続が終了し、データベースは読み取り専用モードになります。

**注記**  
トランスポートが 1 つのデータベースで実行されている場合、同じサーバー上の他のデータベースには影響しません。****

**製品バージョン**
+ Amazon RDS for PostgreSQL 10.10 以降、および Amazon RDS for PostgreSQL 11.5 以降、および Amazon RDS for PostgreSQL 11.5 以降。最新バージョン情報については、Amazon RDS ドキュメントの「[DB インスタンス間の PostgreSQL データベースの転送](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.TransportableDB.html)」を参照してください。

## アーキテクチャ
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-architecture"></a>

![Amazon RDS DB インスタンス間での PostgreSQL データベースの転送](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/d5fb7ea3-32b7-4602-b382-3cf5c075c7c9/images/aec4d8d2-37a8-4136-9042-f9667ac4aebb.png)


## ツール
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-tools"></a>
+ **pg\_transport** は各データベースを移動するための物理的なトランスポートメカニズムを提供します。最小限のプロセスでデータベースファイルをストリーミングすることで、物理的な移行は、従来のダンプおよびロードプロセスよりもはるかに早くデータを移動でき、ダウンタイムを最小限に抑えます。PostgreSQL トランスポータブルデータベースは、移行先 DB インスタンスが移行元 DB インスタンスからデータベースをインポートするプルモデルを使用します。このパターンで説明されているように、ソース環境とターゲット環境を準備するときに DB インスタンスにこのエクステンションをインストールします。
+ 「[psql](https://www.postgresql.org/docs/11/app-psql.html)」を使用すると、PostgreSQL DB インスタンスに接続して操作することができます。**psql** をシステムにインストールするには、「[PostgreSQL Downloads](https://www.postgresql.org/download/)」ページを参照してください。

## エピック
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-epics"></a>

### ターゲットパラメータグループを作成する
<a name="create-the-target-parameter-group"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ターゲットシステムのパラメータグループを作成します。 | ターゲットパラメータグループとして識別できるグループ名 (例: `pgtarget-param-group`) を指定します。手順については、「[Amazon RDS ドキュメント](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Creating)」を参照してください。 | DBA | 
| パラメータグループのパラメータを変更します。 | 以下のパラメータを設定します:[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.html)<br />パラメータグループの詳細については、「[Amazon RDS ドキュメント](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.TransportableDB.html)」を参照してください。 | DBA | 

### ソースパラメーターグループの作成
<a name="create-the-source-parameter-group"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ソースシステムのパラメータグループを作成します。 | ソースパラメータグループであることがわかるグループ名 (例: `pgsource-param-group`) を指定します。手順については、「[Amazon RDS ドキュメント](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Creating)」を参照してください。 | DBA | 
| パラメータグループのパラメータを変更します。 | 以下のパラメータを設定します:[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.html)<br />パラメータグループの詳細については、「[Amazon RDS ドキュメント](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.TransportableDB.html)」を参照してください。 | DBA | 

### ターゲット環境を準備する
<a name="prepare-the-target-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ソースデータベースの転送先となる新しい Amazon RDS for PostgreSQL DB インスタンスを作成します。 | ビジネス要件に基づいてインスタンスクラスと PostgreSQL バージョンを決定してください。 | DBA、システム管理者、データベースアーキテクト | 
| EC2 インスタンスから DB インスタンスポートに接続できるように、ターゲットのセキュリティグループを変更します。 | デフォルトでは、PostgreSQL インスタンスのポートは 5432 です。別のポートを使用している場合は、そのポートへの接続を EC2 インスタンスで開いておく必要があります。 | DBA、システム管理者 | 
| インスタンスを変更し、新しいターゲットパラメータグループを割り当てます。 | 例えば、`pgtarget-param-group`。 | DBA | 
| ターゲットの Amazon RDS DB インスタンスを再起動します。 | パラメータ `shared_preload_libraries` とパラメータ `max_worker_processes` は静的パラメータで、インスタンスの再起動が必要です。 | DBA、システム管理者 | 
| psql を使用して EC2 インスタンスからデータベースに接続します。 | コマンドを使用します。 <pre>psql -h <rds_end_point> -p PORT -U username -d database -W</pre> | DBA | 
| pg\_transport 拡張機能を作成します。 | `rds_superuser` ロールを持つユーザーとして次のクエリを実行します。<pre>create extension pg_transport;</pre> | DBA | 

### ソース環境の準備
<a name="prepare-the-source-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Amazon EC2 インスタンスとターゲット DB インスタンスからの DB インスタンスポートへの接続を許可するように、ソースのセキュリティグループを変更します。 | デフォルトでは、PostgreSQL インスタンスのポートは 5432 です。別のポートを使用している場合は、そのポートへの接続を EC2 インスタンスで開いておく必要があります。 | DBA、システム管理者 | 
| インスタンスを変更し、新しいソースパラメータグループを割り当てます。 | 例えば、`pgsource-param-group`。 | DBA | 
| ソース Amazon RDS DB インスタンスを再起動します。 | パラメータ `shared_preload_libraries` とパラメータ `max_worker_processes` は静的パラメータで、インスタンスの再起動が必要です。 | DBA | 
| psql を使用して EC2 インスタンスからデータベースに接続します。 | コマンドを使用します。 <pre>psql -h <rds_end_point> -p PORT -U username -d database -W</pre> | DBA | 
| pg\_transport エクステンションを作成し、転送するデータベースから他のすべてのエクステンションを削除します。 | ソースデータベースに **pg\_transport** 以外の拡張機能がインストールされていると、転送は失敗します。このコマンドは、`rds_superuser` ロールを持つユーザーが実行する必要があります。 | DBA | 

### トランスポートの実行
<a name="perform-the-transport"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ドライランをを実行します。 | `transport.import_from_server` 関数を使用して、最初にリハーサルを実行します。<pre>SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', 'true');</pre><br />この関数の最後のパラメーター (`true` に設定) はドライランを定義します。<br />この関数は、メイントランスポートを実行したときに表示されるエラーをすべて表示します。メインストランスポートを実行する前に、エラーを解決してください。 | DBA | 
| ドライランが成功したら、データベーストランスポートを開始します。 | `transport.import_from_server` 関数を実行してトランスポートを実行します。ソースに接続し、データをインポートします。 <pre>SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', false);</pre><br />この関数の最後のパラメーター (`false` に設定) は、これがドライランではないことを示しています。 | DBA | 
| ポストトランスポートステップを実行する。 | データベーストランスポートが完了したら:[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.html) | DBA | 

## 関連リソース
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-resources"></a>
+ 「[Amazon RDS ドキュメント](https://docs.aws.amazon.com/rds/)」
+ 「[pg\_transport ドキュメンテーション](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html#PostgreSQL.TransportableDB.Setup)」
+ 「[RDS PostgreSQL トランスポータブルデータベースを使用したデータベースの移行](https://aws.amazon.com/blogs/database/migrating-databases-using-rds-postgresql-transportable-databases/)」(ブログ投稿)
+ 「[PostgreSQL のダウンロード](https://www.postgresql.org/download/linux/redhat/)」
+ 「[psql ユーティリティ](https://www.postgresql.org/docs/11/app-psql.html)」
+ [DB パラメータグループを作成する](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html#USER_WorkingWithParamGroups.Creating)
+ 「[DB パラメータグループ内のパラメータを変更する](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html#USER_WorkingWithParamGroups.Modifying)」
+ 「[PostgreSQL のダウンロード](https://www.postgresql.org/download/)」