本記事では、こHerokuで運用していたPostgreSQLデータベースをAWS環境へ移行する手順を、AWS EC2の構築からPostgreSQLのインストール・設定、データ移行まで全工程にわたって解説します。また、AWS上でのPostgreSQL運用における選択肢(Amazon RDS vs EC2への直接インストール)の比較について、私の関連記事も参考情報としてご紹介します。
0. AWS上でのPostgreSQL運用の選択肢について
AWS上でPostgreSQLを運用する際、主に以下の2つの方法が考えられます。
-
Amazon RDS
自動バックアップや障害復旧など運用管理が容易になる反面、無料期間終了後は月額費用が発生します。 -
EC2に直接PostgreSQLをインストール
初期費用やランニングコストを抑えたい場合、特に個人開発環境では有利です。ただし、バックアップなどの運用管理は手動対応となります。
私の記事「AWS上でのRails+PostgreSQL運用:RDS vs EC2直接インストールの選択」では、この両者のメリット・デメリットを詳しく解説しています。今回の移行手順は、コスト面や自由度の高さからEC2に直接PostgreSQLをインストールする方法を採用しています。
1. AWS環境の準備
1.1 EC2インスタンスの作成
- OS: Amazon Linux 2023を選択
- インスタンス種別: t2.micro(無料利用枠対象)
- キーペア: インスタンス作成時にキーペア(.pemファイル)をダウンロード
1.2 Elastic IPの設定
-
Elastic IPの割り当て
AWSマネジメントコンソールのEC2ダッシュボードから「Elastic IP」を選択し、「Elastic IPアドレスの割り当て」をクリック。デフォルト設定でIPを割り当てます。 -
Elastic IPのインスタンスへの関連付け
割り当てたElastic IPを選び、「アクション」から「Elastic IPアドレスの関連付け」を選択し、作成したEC2インスタンスに関連付けます。
1.3 セキュリティグループの設定
EC2インスタンスに適用するセキュリティグループで、以下のインバウンドルールを設定します。
-
SSH(ポート22)
- ソース: 自分のIP(My IP)
-
PostgreSQL(ポート5432)
- ソース: 自分のIP(My IP)
2. EC2への接続
ダウンロードしたキーペア(.pemファイル)のパーミッションを設定し、SSHでEC2に接続します。
# .pemファイルのパーミッション変更
chmod 400 ~/.ssh/your-key.pem
# SSH接続
ssh -i ~/.ssh/your-key.pem ec2-user@your-elastic-ip
3. PostgreSQLのインストールと設定
3.1 インストールと初期化
EC2上でPostgreSQLをインストールし、データベースの初期化を行います。
# PostgreSQLのインストール
sudo dnf install postgresql15 postgresql15-server -y
# データベースの初期化
sudo postgresql-setup --initdb
# PostgreSQLの起動と自動起動設定
sudo systemctl start postgresql
sudo systemctl enable postgresql
3.2 設定ファイルの変更
postgresql.confの編集
リモートからの接続を許可するため、postgresql.conf
を編集します。
sudo vi /var/lib/pgsql/data/postgresql.conf
編集例:
listen_addresses = '*'
log_directory = 'log'
pg_hba.confの編集
リモート接続を許可するため、pg_hba.conf
の末尾に以下の行を追加します。
sudo vi /var/lib/pgsql/data/pg_hba.conf
追加内容:
host all all 0.0.0.0/0 scram-sha-256
3.3 ログディレクトリの設定
ログファイル用のディレクトリを作成し、適切な所有権・パーミッションを設定します。
sudo mkdir -p /var/lib/pgsql/data/log
sudo chown postgres:postgres /var/lib/pgsql/data/log
sudo chmod 700 /var/lib/pgsql/data/log
3.4 PostgreSQLの再起動
設定変更を反映させるため、PostgreSQLを再起動します。
sudo systemctl restart postgresql
4. データベースの準備
PostgreSQLにログインし、アプリケーション用のユーザーおよびデータベースを作成します。
# postgresユーザーに切り替えてpsqlを起動
sudo -u postgres psql
SQLコマンド例:
-- ユーザーの作成
CREATE USER myuser WITH PASSWORD 'your_password';
-- データベースの作成
CREATE DATABASE mydatabase;
-- ユーザーに権限付与
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
5. データ移行
-
Herokuからのデータエクスポート
Heroku上でpg_dump
等のツールを利用し、データベースのエクスポートを実施します。 -
AWSへのデータインポート
エクスポートしたデータを、AWS上のPostgreSQLにpsql
などのツールでインポートします。
※ データ移行の詳細手順は、実際のデータ量や環境に合わせて適宜調整してください。
6. 注意事項
-
セキュリティ対策
- セキュリティグループの設定で必要最小限のIPアドレスのみ許可
- 強固なパスワードの設定
- リモート接続時のIP制限の徹底
-
バックアップ
- 移行前に必ず現行データのバックアップを取得
- 移行後も定期的なバックアップを実施
-
コスト管理
- Elastic IPは関連付けがない場合に課金対象となるため注意
- EC2の利用料金体系を把握する
以上の工程で、HerokuからAWSへのPostgreSQL移行を実施できます。
また、AWS上でのPostgreSQL運用については、こちらの記事でRDSとEC2直接インストールの選択肢を比較検討しているので、運用方針を決める際の参考にしてください。
この記事が、移行作業やAWSでのデータベース運用の一助となれば幸いです。