Amazon Linux2にPostgreSQLのクライアントモジュールをインストールする

· 1219 words · 3 minute read

概要

EC2(Amazon Linux)上に建てた踏み台サーバーをクライアントとして、RDS(PostgreSQL)に接続したいというのが今回の主旨です。 PostgreSQLにはクライアントモジュールとサーバーモジュールの二種類があります。今回のようにEC2をPostgreSQL DBとしてて使うのではなく、RDSに接続するクライアントとして使う場合には、クライアントモジュールをインストールするだけで十分です。この記事では、PostgreSQLクライアントモジュールのみをインストールする手順を記載します。

環境

  • EC2(接続元踏み台サーバー): Amazon Linux 2 AMI
  • RDS(接続先DBサーバー): Aurora PostgreSQL 11.7

手順

EC2に建てたサーバーにSSHで接続し、yumでpostgresのclientモジュールをインストールします。

# PostgreSQLのパッケージを確認する
[ec2-user@ip-xxx-xx-xx-xxx ~]$ yum search postgresql | grep client
postgresql.x86_64 : PostgreSQL client programs
                       : clients
postgresql-libs.i686 : The shared libraries required for any PostgreSQL clients
PyGreSQL.x86_64 : A Python client library for PostgreSQL
tcl-pgtcl.x86_64 : A Tcl client library for PostgreSQL

postgresql-libs.i686, postgresql.x86_64がPostgreSQLのクライアントプログラムとその依存するパッケージであることがわかります。

しかし、このままyum installしようとすると、EC2ではデフォルトで参照しているPostgreSQLクライアントモジュールのリポジトリが古いため、指定したバージョンのモジュールが参照できずエラーになります。手動でEC2にリポジトリをダウンロードし、任意のバージョンのモジュールをダウンロードできるようにします。

Amazon Linux専用のリポジトリはないので、RPM(Red Hat Package Manager)用のリポジトリをダウンロードしてpgdg-redhat-all.repoを書き換えます。 なお、セキュリティグループでEC2上のサーバーへのアウトバウンドルールを絞っているとwgetする際にRPM接続できずにエラーになるので、HTTPS(Port: 443)を許可するように変更する必要があります。

# RPM用のリポジトリを/tmpにダウンロードする
[ec2-user@ip-xxx-xx-xx-xxx ~]$ wget -P /tmp https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm tmp/
[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo rpm -Uvh --nodeps /tmp/pgdg-redhat-repo-latest.noarch.rpm

# デフォルトのリポジトリを参照しないように設定を変更する
[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo sed --in-place -e "s/\$releasever/7/g" /etc/yum.repos.d/pgdg-redhat-all.repo

ここまでできたらyumでPostgreSQLクライアントモジュールをインストールします。

# クライアントモジュールをインストールする
[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo yum -y install postgresql-libs.i686 postgresql.x86_64
依存性関連をインストールしました:
  cyrus-sasl-lib.i686 0:2.1.26-23.amzn2               glibc.i686 0:2.26-44.amzn2                         keyutils-libs.i686 0:1.5.8-3.amzn2.0.2
  krb5-libs.i686 0:1.15.1-37.amzn2.2.2                libcom_err.i686 0:1.42.9-19.amzn2                  libcrypt.i686 0:2.26-44.amzn2
  libdb.i686 0:5.3.21-24.amzn2.0.3                    libgcc.i686 0:7.3.1-12.amzn2                       libselinux.i686 0:2.5-12.amzn2.0.2
  libsepol.i686 0:2.5-8.1.amzn2.0.2                   libstdc++.i686 0:7.3.1-12.amzn2                    libverto.i686 0:0.2.5-4.amzn2.0.2
  ncurses-libs.i686 0:6.0-8.20170212.amzn2.1.3        nspr.i686 0:4.25.0-2.amzn2                         nss.i686 0:3.53.1-3.amzn2
  nss-pem.i686 0:1.0.3-5.amzn2                        nss-softokn.i686 0:3.53.1-6.amzn2                  nss-softokn-freebl.i686 0:3.53.1-6.amzn2
  nss-util.i686 0:3.53.1-1.amzn2                      openldap.i686 0:2.4.44-22.amzn2                    openssl-libs.i686 1:1.0.2k-19.amzn2.0.6
  pcre.i686 0:8.32-17.amzn2.0.2                       postgresql-libs.x86_64 0:9.2.24-1.amzn2.0.1        readline.i686 0:6.2-10.amzn2.0.2
  sqlite.i686 0:3.7.17-8.amzn2.1.1                    zlib.i686 0:1.2.7-18.amzn2

完了しました!

# インストールしたモジュールのバージョンを確認する
[ec2-user@ip-xxx-xx-xx-xxx ~]$ psql -V
psql (PostgreSQL) 9.2.24

ここまでの設定をすることで、psqlコマンドを使ってRDSの接続先DBサーバーRDSと通信できるようになります。 なお、AWSセキュリティグループの設定については記載しませんでしたが、あらかじめ接続元サーバーと接続先サーバーで通信が行えるように、インバウンドルールを設定する必要があります。

[ec2-user@ip-xxx-xx-xx-xxx ~]$ psql -h example.ap-northeast-1.rds.amazonaws.com -U example_user -d example_db