タイトル通りです。
ローカルのPCから接続するときはpsqlコマンドをインストールしてアクセスできますが、自分のPCにインストールしたくない人はEC2を立てたりする必要があります。
今回はEC2ではなく、AWS CloudShellで接続できるか確認してみます。
実施作業
CloudShell起動
CloudShellにはコンソール上部にあるPowserShellのようなアイコンからすぐに接続することができます。
初回は初期設定に少し時間がかかります。
接続してすぐにpsqlコマンドを実行してみましたがそんなコマンドはないと怒られたので、デフォルトではpsqlコマンドはインストールされていないようです。
psqlコマンドインストール
まずはpsqlのコマンドがインストールできるか確認してみます。
$ sudo yum search postgresql
表示された一覧に「postgresql.x86_64 : PostgreSQL client programs」があったので、これをインストールします。
以下のコマンドを実行します。
$ sudo yum install -y postgresql.x86_64
Complete!と表示されたので正常にインストールできてそうです。
バージョンが古いようですが、インストールはできているようです。
RDSのSG修正
過去の記事でRDSと専用のSGを作成しているので、そのSGにCloudShellのIPからの接続を許可する設定を追加しておきます。
RDS接続
以下のコマンドをCloudShellで実行して接続できるか試してみます。
$ psql -h database-1.[ランダム文字列].ap-northeast-1.rds.amazonaws.com -U postgres -d sample_db
接続に失敗しました。
先に調べてやればよかったですが、CloudShellのFAQを見るとプライベートVPCにあるリソースにアクセスすることはできないみたいです。
AWS CloudShell FAQs | Browser-Based Shell | Amazon Web Services
以下の記事に自己責任と前置きされた上で接続方法が記載されていたので、こちらのやり方で接続できるか試してみます。
AWS CloudShell を早速使ってみました - Qiita
RDS接続(2回目)
参考記事を見る限り、
- 接続したいリソースがパブリックサブネットに構築されている
- CloudShellのグローバルIPが接続先リソースで許可されている
という条件がクリアできれば接続できるようです。
今回RDSはたまたまパブリックサブネットで構築していたので、以下のコマンドでCloudShellのグローバルIPを確認します。
$ curl http://checkip.amazonaws.com/
確認したグローバルIPをRDSのSGに追加します。
今度は接続に成功しました。
重ねて言いますが、このやり方はRDSをパブリックサブネットに配置したり、CloudShellのグローバルIPをRDSのSGで許可したりあまり推奨されない方法ですので、使用される際は検証の範囲に留めておくようご注意ください。
サンプルデータ確認
最後にRDS内にサンプルデータをインポートしてCloudShellから確認してみます。
[PostgreSQL] サンプルのデータベースを用意する | DevelopersIO
以下の記事に記載の手順でインポートを行います。
尚、pg_restoreコマンドはpsqlコマンドのバージョンが古くて使えなかったので、以下の記事を参考に新しいバージョンをインストールしました。
【超速】AWS EC2インスタンスにpostgresql client 12をインストールする - Qiita
で、実際にインポートして確認した結果がこちらです。
psql -cコマンドでSQL実行してみるとちゃんとデータが入っていることが確認できます。
感想及び所感
RDSに対してCloudShellから接続とデータへのクエリを試してみました。
検証として手軽に確認したいときは良いですが、通常はEC2を別途準備してそちらからアクセスするようにした方が良いと思います。