Amazon Redshift クラスターの接続に関する問題をトラブルシューティングしたいです。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
直近に、Amazon Redshift クラスターをリサイズしたりスナップショットから復元したりした場合
直近に Amazon Redshift クラスターをリサイズしたり、スナップショットから復元したりした場合は、クラスターのサブネットを確認します。スナップショットのリサイズまたは復元よりも前の時点から、同じサブネットでクラスターを起動する必要があります。
直近には、Amazon Redshift クラスターのリサイズまたは復元を行っていない場合は、ネットワーク構成を確認します。ネットワーク構成は、以前のサブネットと新しいサブネットの両方で同じである必要があります。
Amazon Redshift クラスターがパブリックサブネットに配置されている場合
パブリックサブネットに配置された Amazon Redshift クラスターに接続を試みる場合は、クラスターが [パブリックアクセス可能] に設定されていることを確認してください。「パブリックアクセス可能」オプションの詳細については、「仮想プライベートクラウド (VPC) の Redshift リソース」を参照してください。
ルートテーブルにインターネットゲートウェイがアタッチされていることを確認します。
Amazon Redshift クラスターへの接続をテストするには、telnet コマンドを実行します。
telnet cluster_endpoint cluster_port
注: cluster-endpoint と cluster-port を実際の値に置き換えてください。
Amazon Redshift クラスターがプライベートサブネットに配置されている場合
Amazon Redshift クラスターがプライベートサブネットに配置されている場合は、NAT ゲートウェイをパブリックサブネットのルートテーブルにアタッチする必要があります。NAT ゲートウェイにより、プライベートサブネットのクラスターはインターネットに接続できます。クラスターは、パブリックアクセス可能に設定されていないことを確認してください。
クライアントが Amazon Redshift クラスターのリーダーノードに割り当てられたプライベート IP アドレスに到達できることを確認するには、dig コマンドを実行します。
dig cluster_endpoint
注: cluster-endpoint を実際のクラスターエンドポイントに置き換えてください。
Amazon Redshift クラスターへの接続をテストするには、telnet コマンドを実行します。
telnet cluster_endpoint cluster_port
注: cluster-endpoint と cluster-port を実際の値に置き換えてください。
Telnet を正常に実行できないか、Amazon Redshift クラスターに依然としてアクセスできない場合
telnet コマンドの出力が Amazon Redshift クラスターに接続できないことを示す場合は、次の条件を確認してください。
- セキュリティグループのインバウンドルールは、Amazon Redshift を TCP ポート 5439 で許可していること。
- セキュリティグループのインバウンドルールには、Amazon Redshift クラスターへの接続に使用する CIDR 範囲または IP アドレスが含まれること。
出力は Amazon Redshift クラスターに正常に接続できることを示していても、クラスターに依然としてアクセスできない場合は、ネットワークのファイアウォールを確認してください。ファイアウォールが Amazon Redshift のポート 5439 をブロックしている可能性があります。
「Invalid operation connection」エラー
Amazon Redshift クラスターにおいて、すべての接続で SSL の有効化が必須である場合、次の接続エラーが発生する可能性があります。
"Error: [Amazon](500310) Invalid operation: no pg_hba.conf entry for host "::ffff:205.xxx.xxx.xxx", user "username", database "dbname", SSL off;"
require_ssl が true に設定されているかどうかを確認するには、次の手順を実行します。
- Amazon Redshift コンソールを開きます。
- ナビゲーションペインで [構成] を選択します。
- [ワークロード管理] を選択します。
- Amazon Redshift クラスターに関連付けるパラメータグループを変更します。
- (オプション) AWS CLI コマンド describe-cluster-parameters を実行し、SSL 構成を確認します。
aws redshift describe-cluster-parameters --parameter-group-name exampleparametergroupname
SSL 構成が true に設定されている場合は、require_ssl をデフォルトパラメータ値である false に変更します。SSL 構成を変更するには、Amazon Redshift クラスターに関連付けられているパラメータグループを編集します。パラメータグループは、Amazon Redshift コンソールの [パラメータ] タブで編集できます。
ただし、ユースケースまたは環境で SSL 接続が必要な場合は、接続文字列に必須の SSL パラメータが含まれていることを確認してください。
例:
jdbc:redshift://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev?ssl=true
「Fatal connection」エラー
Amazon Redshift クラスターに大量の開いている接続が存在する場合、次のエラーが発生する可能性があります。
"Error: FATAL: connection limit [500]/[2000] exceeded for user"
このエラーメッセージが示すように、Amazon Redshift において、dc2.large ノードタイプの最大接続制限は 500 です。dc2.8xlarge、ra3.xlplus、ra3.4xlarge、ra3.16xlarge ノードでは、最大接続制限は 2,000 です。
Amazon Redshift クラスターで開いている接続の数を確認するには、次の手順を実行します。
-
Amazon CloudWatch コンソールを開きます。
-
Amazon CloudWatch Logs エントリで DatabaseConnections メトリクスを見つけます。
-
STL_CONNECTION_LOG テーブルを参照し、開いている接続数を確認します。
select recordtime, username, dbname, remotehost, remoteportfrom stl_connection_log
where event = 'initiating session'
and pid not in
(select pid from stl_connection_log
where event = 'disconnecting session')
order by 1 desc;
-
STV_SESSIONS テーブルには、Amazon Redshift でのアクティブユーザーセッションに関する情報が表示されます。
select * from stv_sessions;
開いている接続数が多い場合は、次のいずれかの手順を実行します。
「Connection refused」エラー
Amazon Redshift クラスターが接続を確立できない場合、次の Connection Refused エラーが発生する場合があります。
"Error: amazon 500150 error setting/closing connection: operation timed out/ connection refused."
Amazon Redshift クラスターへのアクセスを試行した際、アクセス許可の問題が原因で、上記のエラーが発生する可能性があります。この接続エラーを解決するには、次のいずれかの手順を実行します。
関連情報
Amazon Redshift のプライベートクラスターでパブリックアクセスを許可する方法を教えてください
Amazon Redshift クラスターに接続できない原因を教えてください