0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HerokuからAWSへのPostgreSQL移行手順

Posted at

本記事では、こ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の設定

  1. Elastic IPの割り当て
    AWSマネジメントコンソールのEC2ダッシュボードから「Elastic IP」を選択し、「Elastic IPアドレスの割り当て」をクリック。デフォルト設定でIPを割り当てます。

  2. 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. データ移行

  1. Herokuからのデータエクスポート
    Heroku上でpg_dump等のツールを利用し、データベースのエクスポートを実施します。

  2. AWSへのデータインポート
    エクスポートしたデータを、AWS上のPostgreSQLにpsqlなどのツールでインポートします。

※ データ移行の詳細手順は、実際のデータ量や環境に合わせて適宜調整してください。


6. 注意事項

  • セキュリティ対策

    • セキュリティグループの設定で必要最小限のIPアドレスのみ許可
    • 強固なパスワードの設定
    • リモート接続時のIP制限の徹底
  • バックアップ

    • 移行前に必ず現行データのバックアップを取得
    • 移行後も定期的なバックアップを実施
  • コスト管理

    • Elastic IPは関連付けがない場合に課金対象となるため注意
    • EC2の利用料金体系を把握する

以上の工程で、HerokuからAWSへのPostgreSQL移行を実施できます。
また、AWS上でのPostgreSQL運用については、こちらの記事でRDSとEC2直接インストールの選択肢を比較検討しているので、運用方針を決める際の参考にしてください。

この記事が、移行作業やAWSでのデータベース運用の一助となれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?