

※AWSの初心者です。今まではHerokuしか使ったことはありません。

**AWSの構成**  
EC2インスタンス1個  
RDSでPostgreSQL、1個

RailsアプリをCapistranoでEC2にデプロイしたいのですが、  
Capistranoの下記コマンド(デプロイ)を実行すると、エラーが発生します。  
vagrant@vagrant-ubuntu-trusty:~/sample_app$bundle exec cap production deploy

**エラー文**  
PG::ConnectionBad: FATAL: Peer authentication failed for user "postgres"  
Tasks: TOP => db:migrate  
(See full trace by running task with --trace)

EC2にSSHでログイン後、  
sudo service postgresql start  
sudo su - postgres  
psql  
postgres=#  
postgres=# \du  
List of roles  
Role name | Attributes | Member of  
\-----------+------------------------------------------------+-----------  
ec2-user | Create role, Create DB | {}  
postgres | Superuser, Create role, Create DB, Replication | {}  
root | Create role, Create DB | {}

postgres=# who am i  
postgres-# \q  
-bash-4.2$  
は、実行できます。

**EC2のデータベース**  
postgres=# \l  
List of databases  
Name | Owner | Encoding | Collate | Ctype | Access privileges  
\------------------------+----------+----------+-------------+-------------+-----------------------  
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |  
sample_app_development | root | UTF8 | en_US.UTF-8 | en_US.UTF-8 |  
sample_app_test | root | UTF8 | en_US.UTF-8 | en_US.UTF-8 |  
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +  
| | | | | postgres=CTc/postgres  
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +  
| | | | | postgres=CTc/postgres

**ローカル(vagrant)のデータベース**  
vagrant@vagrant-ubuntu-trusty:~/hoge_app/config$ rails db  
psql (9.5.3)  
Type "help" for help.

hoge_app_development=# \l  
List of databases  
Name | Owner | Encoding | Collate | Ctype | Access privileges  
\------------------------+----------+----------+-------------+-------------+-----------------------  
fuga_development | vagrant | UTF8 | en_US.UTF-8 | en_US.UTF-8 |  
fuga_test | vagrant | UTF8 | en_US.UTF-8 | en_US.UTF-8 |  
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |  
hoge_app_development | vagrant | UTF8 | en_US.UTF-8 | en_US.UTF-8 |  
hoge_app_test | vagrant | UTF8 | en_US.UTF-8 | en_US.UTF-8 |  
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +  
| | | | | postgres=CTc/postgres  
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +  
| | | | | postgres=CTc/postgres  
(7 rows)

**教えて頂きたいこと**  
1\. RDSでPostgreSQLを作成するとデータベースが作成されて、EC2にログイン後、「sudo service postgresql
start」コマンドなどが実行できるという認識ですが、RDSでPostgreSQLを作成した場合でも、EC2にログイン後、「sudo yum install
-y postgresql」などで、PostgreSQLをEC2にインストールする必要はあるのでしょうか？  
2\. config/database.ymlの設定は適切でしょうか？

**database.yml**  
production:  
<<: *default  
adapter: postgresql  
host: 32.873.61.427  
encoding: utf8  
database: RDS作成時のインスタンス識別子  
username: ec2-user  
password: RDS作成時に設定したパスワード  
pool: 5  
timeout: 5000

  3. エラーの発生原因

何卒宜しくお願い致します。


CC BY-SA 3.0
2016-06-20T12:24:43.633
26895
2016-06-22T13:16:12.307
2016-06-22T13:16:12.307
12323
12323
question
ruby-on-rails aws postgresql capistrano amazon-ec2
CapistranoでRailsアプリをEC2にデプロイするとエラーが発生します。「PG::ConnectionBad: FATAL: Peer authentication failed for user "postgres"」


  1. 認識が全く間違っています。RDSを作成したのならばEC2にはPostgreSQLをインストールすつ必要はありませんし、service startなんてする必要ありません。RDSというのはリレーショナルデータベース専用のサーバというイメージです。RDSのインスタンスを作成し、それが稼働してるのならばあなたはもうPostgreSQLを利用する環境を手にしています。

  2. おそらく大分間違っています。`host`は`mydb.123456789012.ap-northeast-1.rds.amazonaws.com`のようなRDSインスタンスのエンドポイントになるはずです。`database`はPostgreSQL内のアプリが使用するデータベース名を指定するのではないでしょうか。そして`username`にはそのデータベースにアクセス可能なPostgreSQLのユーザーを指定するのではないでしょうか。ec2-userというのはEC2インスタンスのデフォルトのユーザーのように見えます。

  3. 直接的な原因は、接続しようとして`base`というユーザーの認証に失敗したことです。Peer認証となってますから、やはりRDSではなくローカルの(EC2にインストールされた)PostgreSQLに接続を試みています。


CC BY-SA 3.0
2016-06-21T02:01:15.817
26905
2016-06-21T02:01:15.817
16900
26895
answer