スキップしてコンテンツを表示

Aurora PostgreSQL 互換 DB クラスターに接続するときの問題をトラブルシューティングする方法を教えてください。

所要時間4分
0

Amazon Aurora PostgreSQL 互換エディションデータベース (DB) クラスターの接続に関する問題をトラブルシューティングしたいと考えています。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

正しい接続パラメータが設定されていることを確認する

次の手順を実行します。

  1. Amazon Relational Database Service (Amazon RDS) コンソールを開きます。
  2. ナビゲーションペインで [データベース] を選択します。
  3. お使いの Aurora PostgreSQL 互換の DB クラスターを選択します。
  4. [接続とセキュリティ] タブでは、次の値に注意してください。<br id=hardline_break/> ライターまたはリーダーエンドポイント<br id=hardline_break/> デフォルトポート番号 5432
  5. データベース名、ユーザー名、パスワードが正しいことを確認します。

接続をテストするには、次の psql コマンドを実行します。

psql -h your-cluster-endpoint -p 5432 -U your-username -d your-database-name

注: your-cluster-endpoint をクラスターエンドポイントに、your-username をデータベースユーザー名に、your-database-name をデータベース名に置き換えてください。

ネットワーク接続をテストする

クライアントが Aurora PostgreSQL 互換 DB クラスターエンドポイントにアクセスできることを確認するには、次のコマンドを実行します。

telnet を使用する場合

次の telnet コマンドを実行します。

telnet your-cluster-endpoint 5432

注: your-cluster-endpoint をお使いのクラスターエンドポイントに置き換えてください。

接続に成功すると、以下のような出力が表示されます。

Trying xxx.xxx.xxx.xxx...
Connected to your-cluster-endpoint.

netcat を使用する場合

telnet が利用できない場合は、次の netcat コマンドを実行します。

nc -zv your-cluster-endpoint 5432

注: your-cluster-endpoint をお使いのクラスターエンドポイントに置き換えてください。

接続に成功すると、以下のような出力が表示されます。

Connection to your-cluster-endpoint 5432 port [tcp/postgresql] succeeded!

上記のコマンドがタイムアウトまたは失敗した場合は、ネットワーク接続に問題があります。セキュリティグループのインバウンドルールが適切に設定されていることを確認してください。

セキュリティグループのインバウンドルールを確認する

次の手順を実行します。

  1. Amazon RDS コンソールを開きます。
  2. ナビゲーションペインで [データベース] を選択します。
  3. お使いの Aurora PostgreSQL 互換の DB クラスターを選択します。
  4. [接続とセキュリティ] セクションの [VPC セキュリティグループ] の下のセキュリティグループ名をメモします。
  5. Amazon Virtual Private Cloud (Amazon VPC) コンソールを開きます。
  6. ナビゲーションペインで [セキュリティグループ] を選択します。
  7. 対象のセキュリティグループを選択します。
  8. [インバウンドルール] を選択します。
  9. 次の設定のルールがあることを確認します。<br id=hardline_break/> タイプが PostgreSQL またはカスタム TCP であること。<br id=hardline_break/> ポートが 5432 であること。<br id=hardline_break/> ソースがクライアントの IP アドレスまたは適切な CIDR ブロックであること。

Amazon VPC コンソールを使用してセキュリティグループにインバウンドルールを追加するには、「セキュリティグループのルールを設定する」を参照してください。

AWS CLI を使用してインバウンドルールを追加するには、次の authorize-security-group-ingress コマンドを実行します。

aws ec2 authorize-security-group-ingress \
  --group-id your-group-id \
  --protocol tcp \
  --port 5432 \
  --cidr your-IP-address/32 \
  --region your-region

注: your-group-id をセキュリティグループ ID に、your-IP-address/32 を IP アドレスまたは CIDR ブロックに、your-region を AWS リージョンに置き換えてください。

VPC ネットワーク ACL インバウンドルールを確認する

ネットワーク ACL ルールを確認するには、次の手順を実行します。

  1. Amazon VPC コンソールを開きます。
  2. ナビゲーションペインで [ネットワーク ACL] を選択します。
  3. DB サブネットに関連付けられているネットワーク ACL を選択します。
  4. [インバウンドルール] タブを選択します。
  5. 次の設定のルールがあることを確認します。<br id=hardline_break/> タイプが PostgreSQL (5432) または [すべてのトラフィック] であること。<br id=hardline_break/> ソースがクライアントの IP アドレス範囲または 0.0.0.0/0 であること。

ネットワーク ACL ルールを追加するには、「ルールを追加する」を参照してください。

サブネットとルーティング設定を確認する

サブネットの設定を確認するには、次の手順を実行します。

  1. Amazon RDS コンソールを開きます。
  2. ナビゲーションペインで [データベース] を選択します。
  3. お使いの Aurora PostgreSQL 互換の DB クラスターを選択します。
  4. [接続とセキュリティ] タブで、DB サブネットグループ名をメモします。
  5. サブネットグループのリンクを選択します。
  6. サブネットが正しいアベイラビリティーゾーンと VPC にあることを確認します。

ルートテーブルの設定を確認するには、「サブネット用のルートテーブルの決定」を参照してください。

データベースレベルのアクセス許可を確認する

データベースユーザーがデータベースに接続するために必要なアクセス許可を持っていることを確認します。

プライマリユーザーとして接続する

次の psql コマンドを実行します。

psql -h your-cluster-endpoint -p 5432 -U primary-username -d postgres

注: your-cluster-endpoint をクラスターエンドポイントに、primary-username をプライマリユーザー名に置き換えてください。

ユーザーのアクセス許可を確認する

プライマリユーザーとして接続したら、次の SQL クエリを実行してユーザーのアクセス許可を確認します。

すべてのデータベースユーザーを一覧表示するには、次のコマンドを実行します。

SELECT usename, usesuper, usecreatedb, useconnlimit FROM pg_user ORDER BY usename;

特定のユーザーのアクセス許可を確認するには、次のコマンドを実行します。

SELECT usename, usesuper, usecreatedb, useconnlimit FROM pg_user WHERE usename = 'your-username';

注: your-username を、アクセス許可を確認したいユーザーのユーザー名に置き換えてください。

データベースとその所有者を一覧表示するには、次のコマンドを実行します。

SELECT datname, datowner, datacl FROM pg_database WHERE datname NOT IN ('template0', 'template1');

ユーザーのアクセス許可を作成または変更する

ユーザーが存在しないか、十分なアクセス許可がない場合は、次のコマンドを実行します。

新しいユーザーを作成するには、次のコマンドを実行します。

CREATE USER your_username WITH PASSWORD 'your_password';

注: your_username を作成中のユーザーのユーザー名に、your_password を安全なパスワードに置き換えてください。

データベースに接続するアクセス許可をユーザーに付与するには、次のコマンドを実行します。

GRANT CONNECT ON DATABASE your_database_name TO your_username;

注: your_database_name をデータベース名に、your_username をアクセス許可を付与するユーザーのユーザー名に置き換えてください。

スキーマを使用するアクセス許可をユーザーに付与するには、次のコマンドを実行します。

GRANT USAGE ON SCHEMA public TO your_username;

注: your_username を、アクセス許可を付与するユーザーのユーザー名に置き換えてください。

テーブルへのアクセス許可をユーザーに付与するには、次のコマンドを実行します。

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO your_username;

注: your_username を、アクセス許可を付与するユーザーのユーザー名に置き換えてください。

接続クォータをモニタリングする

DB クラスターが最大接続クォータに達したかどうかを確認します。

現在の接続を確認する

DB クラスターに接続し、次の SQL クエリを実行します。

現在の接続数を確認するには、次のコマンドを実行します。

SELECT count(*) as current_connections FROM pg_stat_activity WHERE state = 'active';

最大接続数の設定を確認するには、次のコマンドを実行します。

SHOW max_connections;

アクティブな接続をユーザーごとに表示するには、次のコマンドを実行します。

SELECT usename, count(*) as connection_count FROM pg_stat_activity GROUP BY usename ORDER BY connection_count DESC;

max_connections パラメータを変更する

max_connections パラメータを変更するには、「Amazon Aurora の DB クラスターパラメータグループのパラメータの変更」を参照してください。

SSL/TLS 接続をテストする

Aurora PostgreSQL 互換は暗号化された接続をサポートします。暗号化された接続と暗号化されていない接続の両方をテストします。

SSL なしでテストする

SSL なしで接続をテストするには、次の psql コマンドを実行します。

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-username sslmode=disable"

注: your-cluster-endpoint をクラスターエンドポイントに、your-database をデータベース名に、your-username をユーザー名に置き換えてください。

SSL を使用してテストする

SSL を使用して接続をテストするには、次の psql コマンドを実行します。

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-username sslmode=require"

注: your-cluster-endpoint.cluster をクラスターエンドポイントに、your-database をデータベース名に、your-username をユーザー名に置き換えてください。

RDS CA 証明書をダウンロードして使用する

RDS 認証局 (CA) 証明書をダウンロードするには、次の wget コマンドを実行します。

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

証明書を使用するには、次の psql コマンドを実行します。

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-username sslmode=verify-full sslrootcert=global-bundle.pem"

注: your-cluster-endpoint をクラスターエンドポイントに、your-database をデータベース名に、your-username をユーザー名に置き換えてください。

IAM データベース認証のトラブルシューティング

AWS Identity and Access Management (IAM) データベース認証を使用する場合は、次の手順を実行してください。

認証トークンを生成する

認証トークンを生成するには、次の generate-db-auth-token AWS CLI コマンドを実行します。

aws rds generate-db-auth-token \
  --hostname your-cluster-endpoint \
  --port 5432 \
  --region your-region \
  --username your-iam-username

注: your-cluster-endpoint をクラスターエンドポイントに、your-region をリージョンに、your-iam-username を IAM データベースユーザー名に置き換えてください。

IAM 認証を使用して接続する

次の psql コマンドを実行します。

psql "host=your-cluster-endpoint port=5432 dbname=your-database user=your-iam-username password=your-generated-token"

注: your-cluster-endpoint をクラスターエンドポイントに、your-database をデータベース名に、your-iam-username を IAM 対応のユーザー名に置き換えてください。また、your-generated-token を生成したトークンに置き換えてください。

IAM ポリシーのアクセス許可を確認する

IAM ユーザーまたはロールに次のポリシーをアタッチしていることを確認してください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds-db:connect"
      ],
      "Resource": [
        "arn:aws:rds-db:region:account-id:dbuser:cluster-resource-id/your-iam-username"
      ]
    }
  ]
}

注: region をリージョンに、account-id を AWS アカウント ID に、cluster-resource-id を DB クラスターリソース ID に、your-iam-username を IAM データベースユーザー名に置き換えてください。

接続に関するトラブルシューティングの詳細については、「RDS for PostgreSQL インスタンスへの接続に関するトラブルシューティング」を参照してください。

関連情報

セキュリティグループを使用して AWS リソースへのトラフィックを制御する

ネットワークアクセスコントロールリストを使用して、サブネットのトラフィックを制御する

AWS公式更新しました 5ヶ月前
コメントはありません

関連するコンテンツ