海を飛んで君の許へ。

開発になりたかったQAが書き散らかす

【AWS】初心者、DBサーバを立てる

前書き

【AWS】初心者、Amazon EC2インスタンスにWindowsから接続する - 海を飛んで君の許へ。
前回より引き続き、AWSにて作業していきます。
今回はDBをインストールします。

前提

Amazon EC2インスタンスSSH接続ができる
IT用語はなんとなくわかるけど他人に説明するのは自信ないレベル

環境

PC:Windows 10
AMI:Amazon Linux 2

Elastic IPを割り当てるの巻

実はEC2インスタンスは、再起動する度にグローバルIPが毎回変わるそうです。
毎回変わるとSSH接続や各種設定がめんどくさそうなので、固定したいところです。
「Elastic IP」という機能を使うことでグローバルIPを固定できるようなので、さっそく設定してみたいと思います。

1. 「Elastic IP アドレスの割り当て」をクリックする

f:id:asumigakuto:20200917213815p:plain
Elastic IP

2. アドレスの設定を決め、「割り当て」をクリックする
f:id:asumigakuto:20200917214004p:plain
今回はほかに選択肢がなかったので、「AmazonIPv4アドレスプール」を選択。

3. 「このElastic IPアドレスを関連付ける」をクリックする
f:id:asumigakuto:20200917214229p:plain
無事にElastic IPが発行されたようなので、次は「どのインスタンスでそのIPアドレスを使うか?」を紐づけてあげる必要があります。

4. 紐づけたいインスタンスを選択し、「関連付ける」をクリックする
f:id:asumigakuto:20200917220538p:plain
なぜか、上に見えている紐づけエリアとは別に、下のほうにも紐づけエリアが出てしまっていました。。
理由はわからないですが、上だけ紐づければちゃんと設定できたので、問題が起きない限りはこのままでいこうと思います…。

DBをインストールする

今回Webアプリを作るためにDBを使いたいので、どんなDBを使うか検討しました。主に2つの選択肢があります。
Amazon RDSを使う(EC2を使っているため)
インスタンス内にDBをインストールする(MySQLPostgreSQLなど)
今回は「AWSを使う」より「構築経験を積む」という目的の方が大きいので、「インスタンス内にDBをインストールする」ことにしました。
インストールするのはPostgreSQLです。
MySQLの構築経験はありますが、ポスグレは初めてです…)

1. Tera TermからSSH接続する
ちなみに、先ほどElastic IPを関連付けたので、パブリックDNSネームが変わりました。ホストネームの変更を忘れずに。

2. postgresql-serverをyum installする
【Ansible】PostgreSQL 12をAmazon Linux 2にインストールし、Ansible Playbook化する【PostgreSQL】 - Qiita
これらの記事を参考に、CentOS 7のリポジトリをダウンロードすることにします。(↑の記事をなぞっているだけです。。)

$ sudo rpm -ivh --nodeps https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

これでリポジトリのダウンロードができました。
ただしこのままyum installしても404エラーが出てしまうので、設定ファイルを書き換えないといけません。

$ cat /etc/yum.repos.d/pgdg-redhat-all.repo
$ sudo sed -i 's/\$releasever/7/g' /etc/yum.repos.d/pgdg-redhat-all.repo
$ cat /etc/yum.repos.d/pgdg-redhat-all.repo

sedコマンドは置換のコマンドですが、詳細はこちら。
【 sed 】コマンド(基礎編その4)――文字列を置き換える/置換した行を出力する:Linux基本コマンドTips(56) - @IT

$ sudo yum install postgresql12 postgresql12-server

これでようやくyum installが完了します。(ちゃっかり12にしました)

ちなみに、amazon linuxではそれ専用のインストールコマンドが使えます。なのに何故yumなのでしょうか?
実は "amazon-linux-extras" のコマンドも試したのですが、起動に失敗したため、下記の記事を読んでyumを使用しました。
Amazon linux2にpostgresqlをインストールする手順 | 瀬戸内の雲のように

3. ユーザ「Postgres」のパスワードを変更する

$ passwd postgres

初期パスワードは何が設定されているかわからず、ログインできないので、自分用のパスワードに変えておきましょう。

4. PostgreSQLを初期化する

$ PGSETUP_INITDB_OPTIONS='--encoding=UTF-8 --locale=C' sudo /usr/pgsql-12/bin/postgresql-12-setup initdb

内容はこちらで確認
CentOS 7.5 に PostgreSQL 11 をインストールする – Webアプリケーション作ってみる

5. PostgreSQL自動起動にする

$ sudo systemctl enable postgresql-12.service

これで自動起動設定になっているはずです。

$ sudo systemctl status postgresql-12.service
● postgresql-12.service - PostgreSQL 12 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-12.service; enabled; vendor preset: disabled)

"enabled" になっていればよさそうです。
postgresql-12.serivce」の前の○は白い○です(黒?)。
systemctlコマンドに慣れてない

6. PostgreSQLを起動する

$ sudo systemctl start postgresql-12.service

何も出ないのはよい便り、ということなのでしょうか…?

$ sudo systemctl status postgresql-12.service
● postgresql-12.service - PostgreSQL 12 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-12.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-09-21 23:52:28 UTC; 40s ago

コピペすると分からないですが、「postgresql-12.service」の前の○が緑色の○になりました。


まだポスグレにもログインできていないですが、ちょっと長くなりすぎたので、いったん締めます。

あとがき

Amazon Linux 2特有のもろもろに翻弄され、本当はもう少し早く書き終える予定だったのが、予想より時間がかかってしまいました…。
次回はPostgreSQLにログインの回です。よろしくお願いします!