AWS
PostgreSQL
cloud9
Rails5

Cloud9 + PostgreSQL + Rails db:migrate で 「FATAL: Ident authentication failed for user」エラーを解決する方法

postgresql のインストールと初期化

ec2-user$
sudo yum -y install postgresql96
sudo yum -y install postgresql96-devel
sudo yum -y install postgresql96-server

sudo /etc/init.d/postgresql96 initdb

postgresユーザに切り替え、DBユーザーを作成

ec2-user$
sudo -u postgres -i
-bash-4.2$
psql
createuser -d -U postgres -P [USERNAME]
logout

【重要】pg_hba.conf を変更し、接続できるクライアントを設定する

pg_hba.conf については、他ホストから接続するための設定 が詳しいのでそちらを参照してください。

ec2-user:~/environment/project
sudo vi /var/lib/pgsql96/data/pg_hba.conf
pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
- host    all             all             127.0.0.1/32            ident
+ host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident

最初、local all alltrust に変更しましたが、Rails->PostgreSQL はTCPを利用したアクセスになるため host all all 127.0.0.1/32 を変更する必要があるようです。

PostgreSQLデータベースにアクセスできないときの対処法 - のほほん徒然

RailsがPostgreSQLにアクセスする際にUNIX socketではなくTCP socketを利用していて,TCPを利用したアクセスではpasswordによるユーザ認証がPostgreSQLの設定で許可されていないことが原因のようです.

postgresqlの起動とDBセットアップまで

sudo /etc/init.d/postgresql96 start
rails db:setup

参考

留意点

パッケージ管理も apt-get をつかっていました。公開時点(2017/09/16)から1年ほどしか経過していません。
今後のアップデートによって変更される可能性に注意しておく必要があります。

サービス周りのコマンド集

DB初期化
sudo /etc/init.d/postgresql96 initdb
スタート
sudo /etc/init.d/postgresql96 start
再起動
sudo /etc/init.d/postgresql96 restart