0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Linux 2023にPostgreSQL16を構築する ─ VPC・EC2・initdbの手順まとめ

0
Last updated at Posted at 2026-04-19

Amazon Linux 2023 & PostgreSQL16

学習用にAmazon Linux 2023 & PostgreSQL16の環境を構築してみる。
AWSの利用には料金がかかるので注意してください。

1. VPCの作成 & EC2の起動

1.1 VPCの作成

AWSの管理コンソールから、[VPC]を選択して、[VPCを作成]をクリックする。
[作成するリソース]から[VPCなど]を選択して、もろもろを設定していく。

項目 説明
プロジェクト 自動で共通の名前をつけてくれる。 例:psql16
アベイラビリティゾーン (AZ) の数 学習用なので1つで十分
パブリック・プライベートサブネットの数 こちらも1つで十分
NATゲートウェイ 【注記】Zonalで1Az内
VPCエンドポイント なし

【注記】NATゲートウェイは料金が発生するが、プライベートサブネットからインターネットに出るために必要

1.2 EC2の起動

[EC2]を選択して、[インスタンスを起動]を押す。

項目 説明
名前 サーバーの名称。 例:psql16-ec2
OSイメージ Amazon Linux 2023を選択
インスタンスタイプ 料金が安いt3.microを利用
キーペア ログイン時に必要になる鍵
ネットワーク設定 作成したVPC、private サブネットを選択
セキュリティグループ ひとまず作成しておく
ストレージ 20GB

上記の設定ができれば、[インスタンスを起動]する。

1.3 セキュリティグループ & 接続

2つ作成する。

・sgr-psql16-eic: アウトバウンドのみ 0.0.0.0/0
・sgr-psql16-ec2:インバウンドはSSH(22)でEC2のみ、アウトバウンドは 0.0.0.0/0

EC2への接続は、管理コンソールから[EC2]を選択して、先ほど作成した[psql16-ec2]を選択する。
[接続]を押して、[EC2 Instance Connect]を選択する。

[プライベート IP を使用して接続]を選択して、「EC2 Instance Connect エンドポイント」を選択して、[接続]する。

これで別のブラウザ画面が立ち上がってきて、Linux のサーバーに接続できている。
下記のコマンドを打って、NAME等が表示されれば成功である。

$cat /etc/os-release
NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
・・・

外部に接続できているかの確認のコマンドは下記です。

$ curl -I https://google.com

2. PostgreSQL16インストール

2.1 インストール

コンソールで、下記コマンドを実行する。

$ sudo dnf install -y postgresql16-server postgresql16-contrib
結果の出力例
Last metadata expiration check: 22:28:42 ago on Sat Apr 18 12:12:24 2026.
Dependencies resolved.
========================================================================================================================
 Package                              Architecture      Version                            Repository              Size
========================================================================================================================
Installing:
 postgresql16-contrib                 x86_64            16.12-1.amzn2023.0.1               amazonlinux            953 k
 postgresql16-server                  x86_64            16.12-1.amzn2023.0.1               amazonlinux            6.9 M
Installing dependencies:
 libicu                               x86_64            67.1-7.amzn2023.0.4                amazonlinux            9.6 M
 libxslt                              x86_64            1.1.43-1.amzn2023.0.3              amazonlinux            183 k
 postgresql16                         x86_64            16.12-1.amzn2023.0.1               amazonlinux            1.9 M
 postgresql16-private-libs            x86_64            16.12-1.amzn2023.0.1               amazonlinux            145 k
 uuid                                 x86_64            1.6.2-50.amzn2023.0.2              amazonlinux             58 k

Transaction Summary

(省略)

Installed:
  libicu-67.1-7.amzn2023.0.4.x86_64                             libxslt-1.1.43-1.amzn2023.0.3.x86_64
  postgresql16-16.12-1.amzn2023.0.1.x86_64                      postgresql16-contrib-16.12-1.amzn2023.0.1.x86_64
  postgresql16-private-libs-16.12-1.amzn2023.0.1.x86_64         postgresql16-server-16.12-1.amzn2023.0.1.x86_64
  uuid-1.6.2-50.amzn2023.0.2.x86_64

Complete!

インストールが終わったら下記のコマンドを実行して確認する。

$ rpm -qa | grep postgresql

PostgreSQL関連の文字列が表示されれば成功です。

2.2 データベースの初期化 & 起動

初期化はこのコマンドを実行する。

$ sudo postgresql-setup --initdb

サービスの有効化はこちら。

$ sudo systemctl enable postgresql

起動はこちらのコマンド。

$ sudo systemctl start postgresql

サービスが立ち上がっているのか確認はこちらのコマンド。

$ sudo systemctl status postgresql
起動結果の例
● postgresql.service - PostgreSQL database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; preset: disabled)
     Active: active (running) since Sun 2026-04-19 10:48:42 UTC; 10s ago
    Process: 27368 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (code=exited, status=0/SUCCESS)
   Main PID: 27370 (postgres)
      Tasks: 7 (limit: 1014)
     Memory: 17.6M
        CPU: 45ms
     CGroup: /system.slice/postgresql.service
             ├─27370 /usr/bin/postgres -D /var/lib/pgsql/data
             ├─27371 "postgres: logger "
             ├─27372 "postgres: checkpointer "
             ├─27373 "postgres: background writer "
             ├─27375 "postgres: walwriter "
             ├─27376 "postgres: autovacuum launcher "
             └─27377 "postgres: logical replication launcher "

「q」で状態表示から抜け出せます。

下記コマンドでインストールしたPostgreSQLのバージョンを表示可能です。

sudo -u postgres psql -c "SELECT version();"

2.3 クラスタ(物理的なデータ保存領域)の再作成

初期構築時に注意すべきポイントもあるようなので、クラスタを再作成してみます。

# サービス停止
$ sudo systemctl stop postgresql

# Active: inactive (dead) になっていればOK
$ sudo systemctl status postgresql
○ postgresql.service - PostgreSQL database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; preset: disabled)
     Active: inactive (dead) since Tue 2026-04-21 12:38:22 UTC; 25min ago
     (省略)

# 確認プロンプトに y で実行
$ sudo rm -rI /var/lib/pgsql/data

# data ディレクトリが消えていればOK
$ sudo ls /var/lib/pgsql/

# もろもろオプションを設定して再作成(*パスワード設定します)
$ sudo -u postgres /usr/bin/initdb \
  -D /var/lib/pgsql/data \
  -E UTF8 \
  --locale=C \
  -A scram-sha-256 \
  --data-checksums \
  -W

下記メッセージが表示されるので、パスワードを設定します。

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "C".
The default text search configuration will be set to "english".

Data page checksums are enabled.

Enter new superuser password:

もう一度パスワードを入力します。

Enter it again:

creating directory /var/lib/pgsql/data ... ok
(省略)
syncing data to disk ... ok
オプション 説明 出典
--locale=C C/POSIX 以外のロケールを使うと文字処理が遅くなり、通常のインデックスが LIKE で使えなくなる。必要な場合のみロケールを使うべきである。 https://www.postgresql.org/docs/current/locale.html
-A scram-sha-256 MD5 ハッシュアルゴリズムは現在では安全とは言えないため、md5 から scram-sha-256 への移行が推奨される。移行手順は password_encryption = 'scram-sha-256' を postgresql.conf に設定し、ユーザーがパスワードを再設定した上で pg_hba.conf の認証方式を scram-sha-256 に変更する。 https://www.postgresql.org/docs/current/auth-password.html
--data-checksums データページはチェックサムで保護され、ページ書き込み時に更新・読み込み時に検証される。チェックサムはクラスタ全体で有効/無効を切り替えるもので、データベースやテーブル単位の指定はできない。 https://www.postgresql.org/docs/16/checksums.html 
$ sudo systemctl start postgresql

# ロケールの確認方法
$ sudo -u postgres psql -c "SHOW lc_messages;"
Password for user postgres:
 lc_messages
-------------
 C
(1 row)


# 認証方式
$ sudo -u postgres psql -c "SELECT usename, passwd FROM pg_shadow LIMIT 5;"
Password for user postgres:
 usename  |          passwd
-------------------------------------
 postgres | SCRAM-SHA-256$4096:XXXXXXXXXX
(1 row)

# ロケール設定
$ sudo -u postgres psql -c "SHOW data_checksums;"
Password for user postgres:
 data_checksums
----------------
 on
(1 row)

2.4 次回に向けて

「postgresql16-contrib」をインストールした目的です。
「追加モジュール(拡張機能)」をまとめたパッケージとのこと。

項目 説明
拡張機能の提供 全文検索、暗号化、統計情報の収集など、特定の用途に特化した機能を追加します。
物理的な実体 通常、/usr/pgsql-16/share/extension/ などのディレクトリに .sql や .control ファイルとしてインストールされます。
有効化の方法 パッケージをインストールしただけでは使えません。データベースに接続し、SQLで CREATE EXTENSION 拡張機能名; を実行することで初めて使用可能になります。

そのなかでもpgbenchを利用してみたいと思います。
なお、コマンド実行ごとにパスワード入力が求められます。

$ sudo -u postgres createdb pgbench_test
$ sudo -u postgres pgbench -i -s 1 pgbench_test
dropping old tables...
NOTICE:  table "pgbench_accounts" does not exist, skipping
NOTICE:  table "pgbench_branches" does not exist, skipping
NOTICE:  table "pgbench_history" does not exist, skipping
NOTICE:  table "pgbench_tellers" does not exist, skipping
creating tables...
generating data (client-side)...
100000 of 100000 tuples (100%) done (elapsed 0.11 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done in 0.23 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 0.13 s, vacuum 0.05 s, primary keys 0.05 s).

下記コマンドで結果が表示されれば導入完了です。

$ sudo -u postgres psql -d pgbench_test -c "\dt"
              List of relations
 Schema |       Name       | Type  |  Owner
----------------------------------------------
 public | pgbench_accounts | table | postgres
 public | pgbench_branches | table | postgres
 public | pgbench_history  | table | postgres
 public | pgbench_tellers  | table | postgres
(4 rows)

次回以降は、このpgbenchを使って色々勉強していきます。

おまけ

# タイムゾーンを変更
$ sudo timedatectl set-timezone Asia/Tokyo
# 確認
$ timedatectl

# cron をインストール
$ sudo dnf install cronie -y

# サービス起動
$ sudo systemctl start crond
# サービス自動起動
$ sudo systemctl enable crond

# 編集
$ sudo crontab -e

# viになるので、下記を深夜0時に終了を設定(viを Escを押下、:wq)
0 0 * * * /sbin/shutdown -h now

# 設定を確認
$ sudo crontab -l

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?