インターネット上に自分専用のポスグレ(PostgreSQL)データベースサーバがあると便利だから、作りたい!
そんな時の作り方を紹介します。
Linux(Ubuntu)サーバをEC2を使って作成して、PostgreSQLをインストールします。
AWS的にはRDSでPostgreSQLを準備するのが王道ですが、個人の練習用なら無料枠で使えるt2.microインスタンスのEC2に直接インストールした方がコスト削減できます。
Linuxサーバインスタンスを作成してSSH接続
次のものを使いますので、準備します。
- AWSアカウント(GCP派の方はEC2をGCEに読み替えれば大体同じ感じで・・・)
- SSHクライアント(私はTera Term使っています)
- A5:SQL Mk-2(最後の接続確認しない場合は不要です)
EC2インスタンス作成
まずはAWSのマネジメントコンソールにログインして、EC2インスタンスを立ち上げます。

Linux系のOSならなんでもよいですが、今回はUbuntuを使います。CentOS系を使うよっていう方は一部コマンドが違うので読み替えてください。

インスタンスタイプの選択
インスタンスのタイプは必要なサイズを指定しましょう。
今回は練習なので無料枠内で作れるt2.microにします。

いろいろ細かい設定ができるのですが、今回は割愛して、一気に起動ボタンをポチっとしちゃいます。

SSH接続用のキーペア設定
私はいつも使っているキーペアがあるのでそれを選択します。
まだ作っていない方は新しいキーペアを作成して先に進めます。

インスタンス確認
起動するとインスタンスリストに登場します。今回名前の設定を忘れてしまったようなので適当に命名しておきます。



SSHでリモート接続確認
WindowsパソコンからTeraTermを使って接続してみます。接続先はこのIPアドレスか、またはその下のパブリックIPv4 DNSでもOKです。

TeraTermを起動して接続先やプロトコルを指定します。

今回はEC2のOSをUbuntuにしたので、ユーザ名も「ubuntu」を指定します。認証は先程のキーペアを使いますので、RSA/DSA/ECDSA/ED25519鍵を使うを選択して、秘密鍵ファイルを指定してOKボタンを押すと接続できます。

このように接続できれば第一関門突破です。

PostgreSQLインストール
PostgreSQLをインストールします。ここからはTeraTermでSSH接続して作業します。
ubuntu@ip-172-31-39-181:~$ sudo apt update
ubuntu@ip-172-31-39-181:~$ sudo apt install postgresql postgresql-contrib -y
postgresユーザが作成されますので、スイッチします。
ubuntu@ip-172-31-39-181:~$ sudo su postgres
postgres@ip-172-31-39-181:/home/ubuntu$ whoami
postgres
postgres@ip-172-31-39-181:/home/ubuntu$
psqlコマンドでPostgreSQLに接続します。
\conninfo で接続先データベースとユーザを確認してみます。postgresデータベースにpostgresユーザで接続できているのを確認することができます。
psqlを終了する場合は、\q です。
postgres@ip-172-31-39-181:/home/ubuntu$ psql
psql (12.7 (Ubuntu 12.7-0ubuntu0.20.04.1))
Type "help" for help.
postgres=# \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
postgres=# \q
postgres@ip-172-31-39-181:/home/ubuntu$
接続設定変更
PostgreSQLは初期状態だとローカルホストからしか接続できない設定になっていますので、リモートから接続するには、もうひと手間必要です。
postgresユーザのパスワード設定
psqlでローカル接続して、postgresユーザのパスワードを変更します。
postgres=# ALTER USER postgres PASSWORD 'パスワード';
実際にはこんな感じでセットします。

postgresql.conf の変更
すべてのアクセスを受け付けるように設定を変更します。
ubuntu@ip-172-31-39-181:/etc/postgresql/12/main$ sudo vi postgresql.conf
listen_addresses = 'localhost' # what IP address(es) to listen on;
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
listen_addresses = '*' # what IP address(es) to listen on;
findコマンドで検索してしまいましょう。
ubuntu@ip-172-31-39-181:~$ find / -name 'postgresql.conf' 2>/dev/null
/etc/postgresql/12/main/postgresql.conf
pg_hba.conf の変更
ubuntu@ip-172-31-39-181:/etc/postgresql/12/main$ sudo vi pg_ctl.conf
この部分が、ローカルホストのみ受付になっていますので、接続を許可するIPアドレス範囲をCIDR形式で記載すればOKです。
今回はIP範囲指定なしのフルオープン(0.0.0.0/0)にします。
# IPv4 local connections:
host all all 127.0.0.1/32 md5
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
host all all 0.0.0.0/0 md5
PostgreSQLを再起動
設定ファイルの編集が終わったら、再起動して設定を有効にします。
ubuntu@ip-172-31-39-181:/etc/postgresql/12/main$ sudo systemctl status postgresql

これでサーバ側の設定は完了です。ちゃんと設定できたかリモート接続して確認してみましょう。
接続確認
Linuxマシンから接続確認
Linuxマシンから接続確認するには、別のマシンからpsqlでリモート接続します。
IPアドレスはさきほど環境構築したサーバのIPアドレス、またはホスト名を指定します。
$ psql -h 172.31.39.181 -U postgres
Windowsマシンから接続確認
Windowsパソコンから接続確認するにはクライアントソフトが必要です。今回は、A5:SQL Mk-2を使います。それ何?という方はこちらをどうぞ。
A5:SQL Mk-2を起動したら、データベースの追加と削除を実行します。

PostgreSQL(直接接続)ボタンを押します。

今回構築したPostgreSQLサーバへの接続情報を入力します。
- サーバ名:EC2のパブリックIPv4アドレス
- ポート番号:変更していなければ、デフォルトの5432
- ユーザID:postgres
- パスワード:先のALTER文で変更したpostgresユーザのパスワード
入力できたら、テスト接続ボタンを押します。

接続に成功しました、と表示されればリモートからの直接接続完了です。
OKボタンを押してA5に接続設定を登録しましょう。


この一冊でPostreSQLって何?というところから自分のWindowsパソコンでPostgreSQLデータベースを動かしてアプリを作るところまで学べます。オススメです。
データベースに関わる全てのエンジニア必携のベストセラー!
私もシステム開発でコードやSQL書いていた時は常に持ち歩いていた愛読書です。
トラブルシューティング
Cannot connect to server on host ‘IPアドレス’: Connection timed out
このように表示される場合は、EC2のセキュリティグループの設定でポートが開いていない可能性がありますので、確認してみてください。

PostgreSQLをインストールしたEC2のセキュリティグループのインバウンドルールを確認します。

インバウンドルールにPostgreSQLのポートが通過設定されていない場合は、セキュリティグループのリンクをクリックして、インバウンドルールを編集します。

①ルールを追加ボタンを押して、②にPostgreSQLのポートを指定します。タイプリストからPostgreSQLを選択すればOKです。デフォルトポート:5432以外で動かしている場合はその番号を直指定します。最後に③のルールを保存したら、再度接続確認をしてみてください。

AWSは機能が多岐にわたり存在し、初心者が足を踏み入れるとほぼ100%迷います。まずはこの教科書で全体を広く浅く知ることが重要です。
AWSを使うメリットとして迅速なサービス運用環境の構築が求められます。失敗できない本番環境を構築する前に読んでおきたい一冊です。
そしていよいよAWS認定試験に挑戦したくなった場合は、こちらで徹底的に学習しましょう。これからはAWSです。
コメント