OCIクラウド移行ガイドとは
オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニア(@araidon,@kazunishi,@yama6)による、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。
まとめ記事は以下になります。
移行するサービス:Aurora PostgreSQL
今回、移行対象とするのはAmazon Aurora PostgreSQLです。
PostgreSQLクライアントアプリケーションである、pg_dumpと、pg_restoreを用いて、
Aurora PostgreSQLのDBをOCI Database with PostgreSQLに移行する手順を解説します。
移行方式
Amazon Aurora PostgreSQLのデータをpg dumpで取得し、そのダンプファイルを使用して、OCI Database with PostgreSQLへpg restoreを使用して移行します。
前提条件
・AWS,OCIそれぞれのPostgreSQL Databaseに対して接続するための、パブリックインスタンス上のEC2,ComputeVMが構築されていること
移行手順
- Aurora PostgreSQLの作成
- pg_dumpを利用したダンプファイルの取得
- OCI Database with PostgreSQLの作成
- pg_restoreを利用したリストアの実行
1. Aurora PostgreSQLの作成
AWSのコンソール画面にログインし、RDS>データベースの作成画面に遷移します。
必要項目を入力していきます。
必要項目を入力した後、作成ボタンを押下します。
作成を待機している間に、今回利用するpg_dumpをインストールしていきます。
2. pg_dumpを利用したダンプファイルの取得
今回利用するpg_dumpはPostgreSQLクライアントに含まれているため、PostgreSQLクライアントをインストールします。
2-1. PostgreSQLクライアントのインストール
今回、接続用のEC2インスタンスのOSはAmazon Linux 2023を選択しています。
環境に合わせて、各種linuxに対応した手順でインストールを実施してください。
各種OSごとの手順は以下を参照してください。
今回、Amazon Linux 2023用へのインストールは下記記事を参考にしました。
まずは利用可能なを探していきましょう。
$ dnf search postgresql
=========================================================================================================================== Name & Summary Matched: postgresql ============================================================================================================================
collectd-postgresql.x86_64 : PostgreSQL plugin for collectd
postgresql-odbc.x86_64 : PostgreSQL ODBC driver
postgresql15.x86_64 : PostgreSQL client programs
postgresql15-contrib.x86_64 : Extension modules distributed with PostgreSQL
postgresql15-docs.x86_64 : Extra documentation for PostgreSQL
postgresql15-llvmjit.x86_64 : Just-in-time compilation support for PostgreSQL
postgresql15-plperl.x86_64 : The Perl procedural language for PostgreSQL
postgresql15-plpython3.x86_64 : The Python3 procedural language for PostgreSQL
postgresql15-pltcl.x86_64 : The Tcl procedural language for PostgreSQL
postgresql15-private-devel.x86_64 : PostgreSQL development header files for this build of PostgreSQL server
postgresql15-private-libs.x86_64 : The shared libraries required only for this build of PostgreSQL server
postgresql15-server.x86_64 : The programs needed to create and run a PostgreSQL server
postgresql15-server-devel.x86_64 : PostgreSQL development header files and libraries
postgresql15-static.x86_64 : Statically linked PostgreSQL libraries
postgresql15-test.x86_64 : The test suite distributed with PostgreSQL
postgresql15-test-rpm-macros.noarch : Convenience RPM macros for build-time testing against PostgreSQL server
postgresql15-upgrade.x86_64 : Support for upgrading from the previous major release of PostgreSQL
postgresql15が利用可能であることがわかります。
インストールを行います。
sudo dnf install postgresql15
無事、インストールが完了したら、pg dumpを探してみましょう。
pg dumpは、/usr/bin配下にあります。
$ cd /
$ ls
bin boot dev etc home lib lib64 local media mnt opt proc root run sbin srv sys tmp usr var
$ cd usr/bin
$ ls | grep pg_
pg_dump
pg_dumpall
pg_isready
pg_restore
pg_upgrade
pg_dumpと、のちに扱うpg_restoreがインストールされたことが確認できました。
2-2. PostgreSQLクライアントからAmazon Aurora PostgreSQLへの接続
では次に、Auroraに接続してみましょう。
PostgreSQLクライアントをインストールした、接続用のEC2インスタンスからアクセスできるように、Amazon Aurora PostgreSQLを作成する際に選択したセキュリティグループのインバウンドルールを下記のように設定します。
設定後、Auroraのライターエンドポイントに対して、接続を行います。
$ psql --host=test-aurora-postgresql.cluster-cn07mhl9cm4v.ap-northeast-1.rds.amazonaws.com --port=5432 --username=postgres
Password for user postgres:
psql (15.0, server 14.9)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=>
接続が確認できました。
2-3. サンプルデータの挿入
下記のサンプルデータを利用してデータのロードを行います。
2-3-1. サンプルデータの準備
こちらのURLからローカルにzipファイルをダウンロードします。
EC2インスタンスから一度ログアウトし、CloudShellに戻ります。
CloudShellにアップロードします。
CloudShellから下記コマンドを使用してEC2インスタンスにzipファイルを転送します。
[cloudshell-user@ip-XXX-XXX-XXX-XXX ~]$ ls
dvdrental.zip
[cloudshell-user@ip-XXX-XXX-XXX-XXX ~]$ scp -i 'EC2秘密鍵' 'ローカルの転送したいファイル' 'EC2ユーザー名@IPアドレス:ファイル配置先
再度EC2インスタンスにSSH接続し、下記コマンドでzipファイルを確認します。
$ ls
dvdrental.zip
zipファイルを解凍します。
$ unzip dvdrental.zip
Archive: dvdrental.zip
inflating: dvdrental.tar
$ ls
dvdrental.tar dvdrental.zip
dvdrental.tarを使用して、データをロードします。
2-3-2. サンプルデータのロード
Auroraに接続し、dvdrentalデータベースを作成します。
postgres=> CREATE DATABASE dvdrental;
CREATE DATABASE
一度ログアウトし、EC2インスタンスに戻ります。
postgres=> exit
$
pg_restoreツールを使用してデータをdvdrentalデータベースにロードします。
$ pg_restore -h test-aurora-postgresql.cluster-cn07mhl9cm4v.ap-northeast-1.rds.amazonaws.com -U postgres -d dvdrental dvdrental.tar
Password:
パスワードを打ち、数秒で処理が実行されます。
2-3-3. サンプルデータの確認
実際にデータが投入されたことを確認しましょう。
まず、データベース一覧表示します。
postgres=> \l
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
-----------+----------+----------+-------------+-------------+------------+-----------------+-----------------------
dvdrental | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc |
rdsadmin | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | rdsadmin=CTc/rdsadmin
template0 | rdsadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | =c/rdsadmin +
| | | | | | | rdsadmin=CTc/rdsadmin
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
(5 rows)
次に、データベースを切り替えます。
postgres=> \c dvdrental
psql (15.0, server 14.9)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
You are now connected to database "dvdrental" as user "postgres".
dvdrental=>
テーブルの一覧を表示します。
dvdrental=> \dt;
List of relations
Schema | Name | Type | Owner
--------+---------------+-------+----------
public | actor | table | postgres
public | address | table | postgres
public | category | table | postgres
public | city | table | postgres
public | country | table | postgres
public | customer | table | postgres
public | film | table | postgres
public | film_actor | table | postgres
public | film_category | table | postgres
public | inventory | table | postgres
public | language | table | postgres
public | payment | table | postgres
public | rental | table | postgres
public | staff | table | postgres
public | store | table | postgres
(15 rows)
最後に、データの中身を確認します。
dvdrental=> select * from actor limit 5;
actor_id | first_name | last_name | last_update
----------+------------+--------------+------------------------
1 | Penelope | Guiness | 2013-05-26 14:47:57.62
2 | Nick | Wahlberg | 2013-05-26 14:47:57.62
3 | Ed | Chase | 2013-05-26 14:47:57.62
4 | Jennifer | Davis | 2013-05-26 14:47:57.62
5 | Johnny | Lollobrigida | 2013-05-26 14:47:57.62
(5 rows)
ここまでで、Auroraにデータがロードされたことを確認できました。
2-4. サンプルデータのDumpファイル作成
exitコマンドでAuroraから抜け、EC2インスタンス上でpg dumpを実行します。
$ pg_dump -h test-aurora-postgresql.cluster-cn07mhl9cm4v.ap-northeast-1.rds.amazonaws.com -U postgres -O -x --format=t --file=fromaws_dvdrental.tar dvdrental
Password:
$ ls
dvdrental.tar dvdrental.zip fromaws_dvdrental.tar
tarファイル形式のfromaws_dvdrental.tarというファイル名で、ダンプファイルを作成します。
また、このダンプファイルは別のデータベースにリストアするため、-O オプションを付ける必要があります。
これは、オブジェクトの所有権を元のデータベースにマッチさせるためのコマンドを出力しないようにするオプションです。
-x オプションでは、アクセス権限(grant/revokeコマンド)のダンプを抑制しています。
詳細は、下記リファレンスをご参照ください。
ここで作成したfromaws_dvdrental.tarを利用し、OCI Database with PostgreSQLにデータベースを移行します。
一度EC2からCloudShell上に転送し、CloudShellの機能を利用してファイルをローカルにダウンロードしておきます。
scp -i test-pub-key.pem ec2-user@ec2-52-199-86-11.ap-northeast-1.compute.amazonaws.com:/home/ec2-user/fromaws_dvdrental.tar ~/fromaws_dvdrental.tar
ここまでで、AWS側の作業は完了です。
3. OCI Database with PostgreSQLの作成
OCI側の設定を進めていきます。
まずは、データベースが必要となるため、コンソール画面から作成していきます。
OCIのコンソール画面にログインし、ナビゲーションメニューからPostgreSQL>データベースを選択します。
次へボタンを押下し、必要項目を入力していきます。
必要項目を入力した後、サマリ画面が表示されるので、送信ボタンを押下します。
作成されるまで10-20分ほど待機します。
データベースが作成されました!
4. pg_restoreを利用したリストアの実行
4-1. postgresqlクライアントのインストール
2-1. PostgreSQLクライアントのインストールと同様に、OCIのCompute VMインスタンスにもPostgreSQLクライアントをインストールします。
なお、OCI側のOSはOracle Linux8を使用しています。
インストール方法については、こちらの記事を参考にしました。
4-2. OCI Database with PostgreSQLへの接続
下記コマンドを実行し、接続します。
このはOCI Database with PostgreSQLのDBシステムの詳細から確認できます。
同じVCNの中にあるCompute VMインスタンスから接続する場合、Endpoint,FQDNどちらからも接続が可能です。
[opc@test-instance ~]$ psql -h <endpoint> -U <usename> -d postgres
Password for user yamadas:
psql (14.10, server 14.9)
WARNING: psql major version 10, server major version 14.
Some psql features might not work.
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
postgres=>
接続が確認できました!
4-3. リストアの実行
まず、データベースを作成します。
postgres=> create database oci_dvdrental;
CREATE DATABASE
postgresqlを抜けて、ローカルからアップロードしたfromaws_dvdrental.tarを使用してリストアを実行します。
postgres=> exit
[opc@test-instance ~]$ pg_restore -h <endpoint> -U <usename> -O -d oci_dvdrental fromaws_dvdrental.tar
4-4. テストデータの確認
再度OCI Database with PostgreSQLへ接続します。
oci_dvdrentalにデータベースを切替え、テーブルを確認し、データを確認します。
postgres=> \c oci_dvdrental
psql (14.10, server 14.9)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
You are now connected to database "oci_dvdrental" as user "yamadas".
oci_dvdrental=> \dt;
List of relations
Schema | Name | Type | Owner
--------+---------------+-------+---------
public | actor | table | yamadas
public | address | table | yamadas
public | category | table | yamadas
public | city | table | yamadas
public | country | table | yamadas
public | customer | table | yamadas
public | film | table | yamadas
public | film_actor | table | yamadas
public | film_category | table | yamadas
public | inventory | table | yamadas
public | language | table | yamadas
public | payment | table | yamadas
public | rental | table | yamadas
public | staff | table | yamadas
public | store | table | yamadas
(15 rows)
oci_dvdrental=> select * from actor limit 5;
actor_id | first_name | last_name | last_update
----------+------------+--------------+------------------------
1 | Penelope | Guiness | 2013-05-26 14:47:57.62
2 | Nick | Wahlberg | 2013-05-26 14:47:57.62
3 | Ed | Chase | 2013-05-26 14:47:57.62
4 | Jennifer | Davis | 2013-05-26 14:47:57.62
5 | Johnny | Lollobrigida | 2013-05-26 14:47:57.62
(5 rows)
Aurora PostgreSQLで確認した同様のデータが確認できました!
まとめ
pg dump, pg restoreによる、Amazon Aurora PostgreSQLから、11月中旬にGAされたOCI Database with PostgreSQLへの移行を検証しました。
移行作業の一助になりましたら幸いです。