目的
Elastic BeanStalkで作成したPostgreSQLにシェルで接続する
前提
Elastic BeanStalkでアプリが動いている。(EC2, RDSデータベースが起動し、連携できている。)
方法
方法は2種類。セキュリティグループを変更するのは面倒だったので、今回は後者(2)の方法をとった。
1. RDSのセキュリティーグループを変更して直接psqlコマンド
2. EC2にSSHログインして、EC2のシェルからpsqlコマンド
手順
- EC2にログインする
- psqlコマンドで接続する
EC2にログインする
.pemファイルのダウンロード
-
AWSコンソール上で、EC2→キーペア→キーペアの作成→キーペア名入力後作成ボタンを押す
-
ボタンを押した後に自動的にダウンロードされた xxx.pem ファイルを /Users/自分のユーザー名/.ssh/ にコピーする
-
xxx.pemファイルの権限(パーミッション)を適切に設定する
キーの権限が適切でないとsshするときにエラーが出るのでchmodコマンドを使って権限を適切にする
適切な権限はchmod 400 (AWSヘルプ)ここで自分のユーザー名はjunaraとする 現在の権限を確認 junara@macbook $ ls -la /Users/junara/.ssh/test.pem -rw-r--r--@ 1 junara staff 1696 11 20 00:25 /Users/junara/.ssh/test.pem 権限を変更 junara@macbook $ chmod 0400 /Users/junara/.ssh/test.pem 権限の変更を確認 junara@macbook $ ls -la /Users/junara/.ssh/test.pem -r--------@ 1 junara staff 1696 11 20 00:25 /Users/junara/.ssh/test.pem
.pemファイルをEC2に登録
-
AWSコンソール上でElastic Beanstalk→自分のアプリケーション→設定→インスタンス
-
EC2キーペアの箇所(矢印箇所)に先に設定したキーペアを入力して、ページ右下の適用をクリックする。(反映までしばらく時間かかる)
configファイル作成
ssh -i 鍵ファイル ec2ユーザー名@インスタンスのパブリックDNS名 を入力しても良いがconfigファイルを作ると、sshに接続するときのコマンドが短くすむので楽ちん。
よって、今回はconfigファイルを作る方法を説明する。
-
configファイルを作成するための情報用意
configファイルを作成するために必要な情報は以下の通り- Host:sshコマンドを入力するときの任意のエイリアス。今回はec2-appとした。
- HostName:EC2のユーザー名とインスタンスのパブリックDNS名: AWSコンソール上で「EC2→インスタンス→インスタンスにチェック→接続 ボタンを押す」で下記の画像で示す赤枠に表示される文字列
- Port:22
- user:下記画像参考。特に設定していなければec2-userだと思う。
- IdentityFile:鍵ファイルのパス: .pemファイルのダウンロード で作成した通り。 /Users/junara/.ssh/test.pem
-
configファイル作成
- /Users/junara/.ssh 下にconfigというファイル名でファイルを作成する。
- 入力例は下記の通り
/Users/junara/.ssh/configHost ec2-app HostName ec2-XX-XXX-XX-XXX.ap-northeast-1.compute.amazonaws.com Port 22 user ec2-user IdentityFile /Users/junara/.ssh/test.pem
EC2へ接続
sshでEC2へ接続する。既にconfigファイルで設定しているので、下記を入力するだけ。
ssh Host名
以下接続例。
junara@macbook $ ssh ec2-app
The authenticity of host 'ec2-XX-XXX-XX-XXX.ap-northeast-1.compute.amazonaws.com (XX-XXX-XX-XXX)' can't be established.
ECDSA key fingerprint is SHA256:---------------------------------------.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-XX-XXX-XX-XXX.ap-northeast-1.compute.amazonaws.com,XX-XXX-XX-XXX' (ECDSA) to the list of known hosts.
_____ _ _ _ ____ _ _ _
| ____| | __ _ ___| |_(_) ___| __ ) ___ __ _ _ __ ___| |_ __ _| | | __
| _| | |/ _` / __| __| |/ __| _ \ / _ \/ _` | '_ \/ __| __/ _` | | |/ /
| |___| | (_| \__ \ |_| | (__| |_) | __/ (_| | | | \__ \ || (_| | | <
|_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\
Amazon Linux AMI
This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
WILL BE LOST if the instance is replaced by auto-scaling. For more information
on customizing your Elastic Beanstalk environment, see our documentation here:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
[ec2-user@ip-xxx-xx-x-xxx ~]$
PostgreSQLに接続する
-
PostgreSQLの詳細情報表示
AWSコンソール上でElastic Beanstalk→自分のアプリケーション→設定→RDSの右上の箇所を押す -
PostgreSQLの詳細情報取得
接続には、host、port、username、password、dbnameが必要。下記画像を参考に情報をメモする。なお、特別な設定をしなければportは5432、dbnameはebdbだと思う。 PostgreSQLへ接続する
ec2のシェルからpsqlコマンドで接続する
$ psql --host=xxxxxxxxx.xxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com --port=5432 --username=yyyyy --password --dbname=zzzz
ユーザ yyyyy のパスワード:
psql (9.4.9, サーバー 9.5.4)
注意: psql メジャーバージョン 9.4, サーバーバージョン 9.5.
psql の機能の中で、動作しないものがあるかもしれません。
SSL接続(プロトコル: TLSv1.2, 暗号化方式: ECDHE-RSA-AES256-GCM-SHA384, ビット長: 256, 圧縮: オフ)
"help" でヘルプを表示します.
zzzz=>
完成!
トラブルシューティング用
- キーペアをうまく読み込めないときはこちらを参照 http://qiita.com/decobisu/items/32deea94af73a0c91103
-
PostgreSQLへの接続の参考
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ConnectToPostgreSQLInstance.html xxx.pemファイルの権限を
ls -l
で見たときに拡張属性( __@__ )が付与されている時は、念のため下記ページを参考に拡張属性を消去すると、よいかも。
http://takatakamanbou.hatenablog.com/entry/2015/06/26/235500