PostgreSQL データベースエンジンを実行する DB インスタンスへの接続 - Amazon Relational Database Service

PostgreSQL データベースエンジンを実行する DB インスタンスへの接続

Amazon RDS によって DB インスタンスがプロビジョニングされると、標準の SQL クライアントアプリケーションを使用してインスタンスに接続できます。Amazon RDS DB インスタンスの詳細を一覧表示するには、AWS マネジメントコンソール、AWS CLI の describe-db-instances コマンド、または Amazon RDS API の DescribeDBInstances オペレーションを使用できます。接続するには以下の情報が必要です。

  • 次の例のような DB インスタンスのホストまたはホスト名。

    myinstance.123456789012.us-east-1.rds.amazonaws.com
  • DB インスタンスがリッスンするポート。たとえば、デフォルトの PostgreSQL ポートは 5432 です。

  • DB インスタンスのユーザー名とパスワード。

以下に、PostgreSQL DB インスタンスに接続する 2 つの方法を示します。最初の例では、オープンソースの PostgreSQL 向け管理開発ツールとして人気のある pgAdmin を使用します。2 番目の例では、PostgreSQL に付属するコマンドラインユーティリティである psql を使用します。

pgAdmin を使用した PostgreSQL DB インスタンスへの接続

オープンソースのツール pgAdmin を使用して、PostgreSQL DB インスタンスに接続できます。

pgAdmin を使用して PostgreSQL DB インスタンスに接続するには

  1. DB インスタンスのエンドポイント (DNS 名) とポート番号を見つけます。

    1. RDS コンソールを開き、[データベース] を選択して、DB インスタンスを一覧表示します。

    2. PstgreSQL DB インスタンス名を選択して、詳細を表示します。

    3. [接続とセキュリティ] タブで、エンドポイントをコピーします。また、ポート番号を書き留めます。DB インスタンスに接続するには、エンドポイントとポート番号の両方が必要です。

      
                                PostgreSQL DB インスタンスへの接続
  2. http://www.pgadmin.org/ から pgAdmin をインストールします。pgAdmin は、クライアントコンピュータに PostgreSQL のローカルインスタンスがなくても、ダウンロードして使用できます。

  3. クライアントコンピュータの pgAdmin アプリケーションを起動します。

  4. [Dashboard] (ダッシュボード) タブで、[Add New Server] (新しいサーバーの追加) を選択します。

  5. [Create - Server] (作成 - サーバー) ダイアログボックスの [General] (全般) タブで名前を入力して、pgAdmin のサーバーを特定します。

  6. [Connection] (接続) タブで、DB インスタンスから以下の情報を入力します。

    • [ホスト] に、エンドポイントを入力します (例: mypostgresql.c6c8dntfzzhgv0.us-east-2.rds.amazonaws.com)。

    • [Port] (ポート) には、割り当てられているポートを入力します。

    • [Username] (ユーザー名) には、DB インスタンスの作成時に入力したユーザー名を入力します。

    • [パスワード] に、DB インスタンスの作成時に入力したパスワードを入力します。

  7. [Save] を選択します。

    接続に問題がある場合は、「PostgreSQL インスタンスへの接続に関するトラブルシューティング」を参照してください。

  8. pgAdmin ブラウザでデータベースにアクセスするには、[Servers] (サーバー)、DB インスタンス、および [Databases] (データベース) を展開します。DB インスタンスのデータベース名を選択します。

  9. SQL コマンドを入力できるパネルを開くには、[Tools] (ツール)、[Query Tool] (クエリツール) の順に選択します。

psql を使用した PostgreSQL DB インスタンスへの接続

psql コマンドラインユーティリティのローカルインスタンスを使用して、PostgreSQL DB インスタンスに接続できます。PostgreSQL またはクライアントコンピュータにインストールされた psql クライアントのいずれかが必要です。psql を使用して PostgreSQL DB インスタンスに接続するには、ホスト情報とアクセス認証情報を指定する必要があります。

以下の形式のいずれかを使用して、Amazon RDS 上の PostgreSQL DB インスタンスに接続します。接続時にパスワードを求められます。バッチジョブまたはスクリプトには、--no-password オプションを使用します。

この DB インスタンスに初めて接続する場合、デフォルトのデータベース名 postgres--dbname オプションに使用してみてください。

Unix の場合、次の形式を使用します。

psql \ --host=<DB instance endpoint> \ --port=<port> \ --username=<master user name> \ --password \ --dbname=<database name>

Windows の場合、次の形式を使用します。

psql ^ --host=<DB instance endpoint> ^ --port=<port> ^ --username=<master user name> ^ --password ^ --dbname=<database name>

たとえば、次のコマンドは、架空の認証情報を使用して、mypgdb という PostgreSQL DB インスタンス上の mypostgresql というデータベースに接続します。

psql --host=mypostgresql.c6c8mwvfdgv0.us-west-2.rds.amazonaws.com --port=5432 --username=awsuser --password --dbname=mypgdb

PostgreSQL インスタンスへの接続に関するトラブルシューティング

DB インスタンスに接続できない場合、最も一般的なエラーは Could not connect to server: Connection timed out. です。このエラーを受け取った場合は、以下を実行します。

  • 使用しているホスト名が DB インスタンスのエンドポイントであること、および使用しているポート番号が正しいことを確認します。

  • DB インスタンスのパブリックアクセシビリティが [Yes] (はい) に設定されていることを確認します。

  • 接続で経由する可能性のあるファイアウォールを通過するアクセス許可のルールが、DB インスタンスに割り当てられたセキュリティグループに設定されていることを確認します。たとえば、DB インスタンスをデフォルトポートの 5432 を使用して作成した場合、会社のファイアウォールルールで自社デバイスからのそのポートへの接続がブロックされる可能性があります。

    この問題を解決するには、別のポートを使用するよう DB インスタンスを変更します。また、DB インスタンスに適用されているセキュリティグループが、その新しいポートへの接続を許可していることも確認します。

  • アプリケーションが実行中のデバイスまたは Amazon EC2 インスタンスからの接続を承認しないセキュリティグループを使用して DB インスタンスを作成したかどうか確認します。接続が機能するには、作成時に DB インスタンスに割り当てたセキュリティグループが DB インスタンスへのアクセスを許可する必要があります。たとえば、DB インスタンスが VPC で作成された場合、接続を承認する VPC セキュリティグループが必要です。

    セキュリティグループでインバウンドのルールを追加または編集できます。[ソース] に対して [マイ IP] を選択すると、ブラウザで検出された IP アドレスから DB インスタンスにアクセスできます。詳細については、「セキュリティグループを作成して VPC 内の DB インスタンスへのアクセスを提供する」を参照してください。

    または、DB インスタンスが VPC の外部で作成された場合は、それらの接続を承認するデータベースセキュリティグループが必要です。

最も一般的な接続の問題は、DB インスタンスに割り当てられているセキュリティグループのアクセスルールに関係するものです。DB インスタンスの作成時にデフォルトの DB セキュリティグループを使用した場合、恐らくそのセキュリティグループにはインスタンスへのアクセスを許可するルールはありません。Amazon RDS セキュリティグループの詳細については、「セキュリティグループによるアクセスの制御」を参照してください。

接続時に FATAL: database some-name does not exist のようなエラーが発生する場合は、デフォルトのデータベース名 postgres--dbname オプションに使用してみてください。