Amazon Keyspaces での接続に関するトラブルシューティング - Amazon Keyspaces (Apache Cassandra 向け)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Keyspaces での接続に関するトラブルシューティング

接続に問題がありますか。以下は、一般的なシナリオとその解決方法です。

Amazon Keyspaces エンドポイントへの接続中のエラー

接続が失敗し、接続エラーが発生すると、さまざまなエラーメッセージが表示される可能性があります。次のセクションでは、最も一般的なシナリオを取り上げます。

cqlsh を使用して Amazon Keyspaces に接続できない

cqlsh を使用して Amazon Keyspaces エンドポイントに接続しようとすると、Connection error が発生して接続が失敗します。

cqlsh が正しく設定されていない場合、Amazon Keyspaces テーブルに接続しようとすると接続は失敗します。次のセクションでは、cqlsh を使用して接続の確立を試みた時に接続エラーが発生するという最も一般的な設定問題の例を示します。

注記

VPC から Amazon Keyspaces に接続しようとする場合は、追加のアクセス権限が必要です。VPC エンドポイントを使用して接続を正常に設定するには、インターフェイス VPC エンドポイントによる Amazon Keyspaces との接続 の手順に従ってください。

cqlsh を使って Amazon Keyspaces に接続しようとすると、接続の timed out エラーが発生します。

これは正しいポートを指定しなかった場合に発生する可能性がある問題で、発生した場合は次のエラーが表示されます。

# cqlsh cassandra.us-east-1.amazonaws.com 9140 -u "USERNAME" -p "PASSWORD" --ssl Connection error: ('Unable to connect to any servers', {'3.234.248.199': error(None, "Tried connecting to [('3.234.248.199', 9140)]. Last error: timed out")})

この問題を解決するには、接続にポート 9142 を使用しているか確認してください。

cqlsh を使ってAmazon Keyspaces に接続しようとすると、Name or service not known というエラーが発生します。

これは、使用しているエンドポイントのスペルが間違っている場合、またはそのエンドポイントが存在しない場合に発生する可能性がある問題です。以下は、エンドポイント名のスペルが間違っている場合の例です。

# cqlsh cassandra.us-east-1.amazon.com 9142 -u "USERNAME" -p "PASSWORD" --ssl Traceback (most recent call last): File "/usr/bin/cqlsh.py", line 2458, in >module> main(*read_options(sys.argv[1:], os.environ)) File "/usr/bin/cqlsh.py", line 2436, in main encoding=options.encoding) File "/usr/bin/cqlsh.py", line 484, in __init__ load_balancing_policy=WhiteListRoundRobinPolicy([self.hostname]), File "/usr/share/cassandra/lib/cassandra-driver-internal-only-3.11.0-bb96859b.zip/cassandra-driver-3.11.0-bb96859b/cassandra/policies.py", line 417, in __init__ socket.gaierror: [Errno -2] Name or service not known

パブリックエンドポイントを使用して接続している場合、この問題を解決するには、Amazon Keyspaces のサービスエンドポイント から使用可能なエンドポイントを選択し、そのエンドポイントの名前に問題がないことを確認してください。VPC エンドポイントを使用して接続する場合は、cqlsh 設定の VPC エンドポイント情報が正しいことを確認してください。

cqlsh を使用して Amazon Keyspaces に接続しようとすると、OperationTimedOut というエラーが発生します。

Amazon Keyspaces では、接続時の強力なセキュリティを確保するために、SSL を有効にする必要があります。SSL パラメータが見つからない場合は、次のエラーが表示されることがあります。

# cqlsh cassandra.us-east-1.amazonaws.com -u "USERNAME" -p "PASSWORD" Connection error: ('Unable to connect to any servers', {'3.234.248.192': OperationTimedOut('errors=Timed out creating connection (5 seconds), last_host=None',)}) #

この問題を解決するには、cqlsh 接続コマンドに次のフラグを追加してください。

--ssl

cqlsh を使用して Amazon Keyspaces に接続しようとすると、SSL transport factory requires a valid certfile to be specified というエラーが発生します。

この場合、SSL/TLS 証明書へのパスが欠落しているため、次のエラーが発生します。

# cat .cassandra/cqlshrc [connection] port = 9142 factory = cqlshlib.ssl.ssl_transport_factory # # cqlsh cassandra.us-east-1.amazonaws.com -u "USERNAME" -p "PASSWORD" --ssl Validation is enabled; SSL transport factory requires a valid certfile to be specified. Please provide path to the certfile in [ssl] section as 'certfile' option in /root/.cassandra/cqlshrc (or use [certfiles] section) or set SSL_CERTFILE environment variable. #

この問題を解決するには、コンピュータの certfile へのパスを追加します。

certfile = path_to_file/sf-class2-root.crt

cqlsh を使用して Amazon Keyspaces に接続しようとすると、No such file or directory というエラーが発生します。

これは、コンピュータの証明書ファイルへのパスが間違っている場合に発生する可能性がある問題で、発生した場合は次のエラーが表示されます。

# cat .cassandra/cqlshrc [connection] port = 9142 factory = cqlshlib.ssl.ssl_transport_factory [ssl] validate = true certfile = /root/wrong_path/sf-class2-root.crt # # cqlsh cassandra.us-east-1.amazonaws.com -u "USERNAME" -p "PASSWORD" --ssl Connection error: ('Unable to connect to any servers', {'3.234.248.192': IOError(2, 'No such file or directory')}) #

この問題を解決するには、コンピュータの certfile へのパスが正しいか確認してください。

cqlsh を使用して Amazon Keyspaces に接続しようとすると、[X509] PEM lib というエラーが発生します。

これは SSL/TLS 証明書ファイル sf-class2-root.crt が無効である場合に発生する可能性がある問題で、発生した場合は次のエラーが表示されます。

# cqlsh cassandra.us-east-1.amazonaws.com -u "USERNAME" -p "PASSWORD" --ssl Connection error: ('Unable to connect to any servers', {'3.234.248.241': error(185090057, u"Tried connecting to [('3.234.248.241', 9142)]. Last error: [X509] PEM lib (_ssl.c:3063)")}) #

この問題を解決するには、次のコマンドを使用して Starfield デジタル証明書をダウンロードしてください。sf-class2-root.crt をローカルまたはホームディレクトリに保存してください。

curl https://certs.secureserver.net/repository/sf-class2-root.crt -O

cqlsh を使用して Amazon Keyspaces に接続しようとすると、unknown SSL というエラーが発生します。

これは SSL/TLS 証明書ファイル sf-class2-root.crt が空である場合に発生する可能性がある問題で、発生した場合は次のエラーが表示されます。

# cqlsh cassandra.us-east-1.amazonaws.com -u "USERNAME" -p "PASSWORD" --ssl Connection error: ('Unable to connect to any servers', {'3.234.248.220': error(0, u"Tried connecting to [('3.234.248.220', 9142)]. Last error: unknown error (_ssl.c:3063)")}) #

この問題を解決するには、次のコマンドを使用して Starfield デジタル証明書をダウンロードしてください。sf-class2-root.crt をローカルまたはホームディレクトリに保存してください。

curl https://certs.secureserver.net/repository/sf-class2-root.crt -O

cqlsh を使用して Amazon Keyspaces に接続しようとすると、SSL: CERTIFICATE_VERIFY_FAILED というエラーが発生します。

これは SSL/TLS 証明書ファイルを検証できなかった場合に発生する可能性がある問題で、発生した場合は次のエラーが表示されます。

Connection error: ('Unable to connect to any servers', {'3.234.248.223': error(1, u"Tried connecting to [('3.234.248.223', 9142)]. Last error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727)")})

この問題を解決するには、次のコマンドを使用して証明書ファイルをダウンロードしてください。sf-class2-root.crt をローカルまたはホームディレクトリに保存してください。

curl https://certs.secureserver.net/repository/sf-class2-root.crt -O

cqlsh を使用して Amazon Keyspaces に接続しようとすると、Last error: timed out というエラーが発生します。

これは、Amazon EC2 セキュリティグループで Amazon Keyspaces のアウトバウンドルールを設定しなかった場合に発生する可能性がある問題で、発生した場合は次のエラーが表示されます。

# cqlsh cassandra.us-east-1.amazonaws.com 9142 -u "USERNAME" -p "PASSWORD" --ssl Connection error: ('Unable to connect to any servers', {'3.234.248.206': error(None, "Tried connecting to [('3.234.248.206', 9142)]. Last error: timed out")}) #

この問題の原因が ではなく Amazon EC2 インスタンスの設定であることを確認するにはcqlsh、 を使用してキースペースへの接続を試みます。例えば AWS CLI、次のコマンドを使用します。

aws keyspaces list-tables --keyspace-name 'my_keyspace'

このコマンドもタイムアウトすると、Amazon EC2 インスタンスが正しく設定されません。

Amazon Keyspaces にアクセスするための十分なアクセス許可があることを確認するには、 を使用して AWS CloudShell に接続しますcqlsh。その接続が確立された場合は、Amazon EC2 インスタンスを設定する必要があります。

この問題を解決するには、Amazon EC2 インスタンスに Amazon Keyspaces へのトラフィックを許可するアウトバウンドルールがあることを確認します。そうでない場合は、EC2 インスタンスの新しいセキュリティグループを作成し、Amazon Keyspaces リソースへのアウトバウンドトラフィックを許可するルールを追加する必要があります。Amazon Keyspaces へのトラフィックを許可するようにアウトバウンドルールを更新するには、Type ドロップダウンメニューから CQLSH/CASSANDRA を選択します。

アウトバウンドトラフィックルールを使用して新しいセキュリティグループを作成したら、インスタンスに追加する必要があります。インスタンスを選択し、アクション セキュリティ セキュリティグループの変更 を選択します。新しいセキュリティグループをアウトバウンドルールに追加しますが、デフォルトのグループも引き続き使用できるようにします。

EC2 アウトバウンドルールを表示および編集する方法の詳細については、Amazon EC2」を参照してください。

cqlsh を使用して Amazon Keyspaces に接続しようとすると、Unauthorized というエラーが発生します。

これは、IAM ユーザーポリシーで Amazon Keyspaces のアクセス許可が欠如している場合に発生する可能性がある問題で、発生した場合は次のエラーが表示されます。

# cqlsh cassandra.us-east-1.amazonaws.com 9142 -u "testuser-at-12345678910" -p "PASSWORD" --ssl Connection error: ('Unable to connect to any servers', {'3.234.248.241': AuthenticationFailed('Failed to authenticate to 3.234.248.241: Error from server: code=2100 [Unauthorized] message="User arn:aws:iam::12345678910:user/testuser has no permissions."',)}) #

この問題を解決するには、IAM ユーザー testuser-at-12345678910 が Amazon Keyspaces へのアクセス許可を取得しているか確認してください。Amazon Keyspaces へのアクセスを許可する IAM ポリシーの例については、「Amazon Keyspaces のアイデンティティベースポリシーの例」を参照してください。

IAM アクセスに関するトラブルシューティングガイダンスについては、「Amazon Keyspaces のアイデンティティとアクセスに関するトラブルシューティング」を参照してください。

cqlsh を使用して Amazon Keyspaces に接続しようとすると、Bad credentials というエラーが発生します。

これは、ユーザー名またはパスワードが間違っている場合に発生する可能性がある問題で、発生した場合は次のエラーが表示されます。

# cqlsh cassandra.us-east-1.amazonaws.com 9142 -u "USERNAME" -p "PASSWORD" --ssl Connection error: ('Unable to connect to any servers', {'3.234.248.248': AuthenticationFailed('Failed to authenticate to 3.234.248.248: Error from server: code=0100 [Bad credentials] message="Provided username USERNAME and/or password are incorrect"',)}) #

この問題を解決するには、コードの USERNAME (ユーザー名) と PASSWORD (パスワード) が、サービス固有の認証情報を生成したときに取得したユーザー名とパスワードと一致しているか確認してください。

重要

cqlsh を使用して接続を試みると引き続きエラーが表示される場合は、--debug オプションでコマンドを再実行し、 AWS Supportへの連絡時に詳細な出力を含めてください。

Cassandra クライアントドライバーを使用して Amazon Keyspaces に接続することができない

次のセクションでは、Cassandra クライアントドライバーとの接続時に発生する最も一般的なエラーを示します。

DataStax Java ドライバーを使用して Amazon Keyspaces テーブルに接続しようとしていますが、NodeUnavailableExceptionエラーが表示されます。

リクエストが試行された接続が切断されると、次のエラーが発生します。

[com.datastax.oss.driver.api.core.NodeUnavailableException: No connection was available to Node(endPoint=vpce-22ff22f2f22222fff-aa1bb234.cassandra.us-west-2.vpce.amazonaws.com/11.1.1111.222:9142, hostId=1a23456b-c77d-8888-9d99-146cb22d6ef6, hashCode=123ca4567)]

この問題を解決するには、ハートビート値を見つけ、それが大きい場合は 30 秒に下げます。

advanced.heartbeat.interval = 30 seconds

次に、関連するタイムアウトを探し、値が少なくとも 5 秒に設定されていることを確認します。

advanced.connection.init-query-timeout = 5 seconds

ドライバーと SigV4 プラグインを使用して Amazon Keyspaces に接続しようとすると、AttributeError というエラーが発生します。

認証情報が正しく設定されていない場合は、次のエラーが発生します。

cassandra.cluster.NoHostAvailable: (‘Unable to connect to any servers’, {‘44.234.22.154:9142’: AttributeError(“‘NoneType’ object has no attribute ‘access_key’“)})

この問題を解決するには、SigV4 プラグインの使用時に IAM ユーザーまたはロールに関連付けられた認証情報を渡すことになっているか確認します。SigV4 プラグインには次の認証情報が必要です。

  • AWS_ACCESS_KEY_ID – IAM ユーザーまたはロールに関連付けられた AWS アクセスキーを指定します。

  • AWS_SECRET_ACCESS_KEY - アクセスキーに関連付けられるシークレットキーを指定します。これは、基本的にアクセスキーの「パスワード」です。

アクセスキーと SigV4 プラグインの詳細については、「Amazon Keyspaces AWS 認証情報を作成、設定する方法」を参照してください。

ドライバーを使用して Amazon Keyspaces テーブルに接続しようとすると、PartialCredentialsError というエラーが発生します。

AWS_SECRET_ACCESS_KEY が欠落している場合、次のエラーが発生する可能性があります。

cassandra.cluster.NoHostAvailable: (‘Unable to connect to any servers’, {‘44.234.22.153:9142’: PartialCredentialsError(‘Partial credentials found in config-file, missing: aws_secret_access_key’)})

この問題を解決するには、SigV4 プラグインを使用する場合に AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY の両方を渡すことになっているか確認してください。アクセスキーと SigV4 プラグインの詳細については、「Amazon Keyspaces AWS 認証情報を作成、設定する方法」を参照してください。

ドライバーを使用して Amazon Keyspaces テーブルに接続しようとすると、Invalid signature というエラーが発生します。

これは、間違った認証情報を使用した場合に発生する可能性がある問題で、発生した場合は次のエラーが表示されます。

cassandra.cluster.NoHostAvailable: (‘Unable to connect to any servers’, {‘44.234.22.134:9142’: AuthenticationFailed(‘Failed to authenticate to 44.234.22.134:9142: Error from server: code=0100 [Bad credentials] message=“Authentication failure: Invalid signature”’)})

この問題を解決するには、渡す認証情報が、Amazon Keyspaces にアクセスするように設定した IAM ユーザーまたはロールに関連付けられていることか確認してください。アクセスキーと SigV4 プラグインの詳細については、「Amazon Keyspaces AWS 認証情報を作成、設定する方法」を参照してください。

VPC エンドポイント接続が正しく機能しない

VPC エンドポイントを使用して Amazon Keyspaces に接続しようとすると、トークンマップエラーが発生するか、スループットが低下します。

これは、VPC エンドポイント接続が正しく設定されていない場合に発生する可能性があります。

この問題を解決するには、以下の設定の詳細を確認してください。Amazon Keyspaces のインターフェイス VPC エンドポイント経由で接続を設定する step-by-step 方法については、「」を参照してくださいインターフェイス VPC エンドポイントによる Amazon Keyspaces との接続

  1. Amazon Keyspaces への接続に使用する IAM エンティティに、次の例に示すようにユーザーテーブルへの読み取り/書き込みアクセス権と、システムテーブルへの読み取りアクセス権があることを確認します。

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "cassandra:Select", "cassandra:Modify" ], "Resource":[ "arn:aws:cassandra:us-east-1:111122223333:/keyspace/mykeyspace/table/mytable", "arn:aws:cassandra:us-east-1:111122223333:/keyspace/system*" ] } ] }
  2. Amazon Keyspaces への接続に使用する IAM エンティティに、次の例に示すように、Amazon EC2 インスタンスの VPC エンドポイント情報にアクセスするために必要な読み取り許可があることを確認します。

    { "Version":"2012-10-17", "Statement":[ { "Sid":"ListVPCEndpoints", "Effect":"Allow", "Action":[ "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcEndpoints" ], "Resource":"*" } ] }
    注記

    管理ポリシー AmazonKeyspacesReadOnlyAccess_v2AmazonKeyspacesFullAccess には、Amazon Keyspaces が Amazon EC2 インスタンスにアクセスして、使用可能なインターフェイス VPC エンドポイントに関する情報を読み取るためのアクセス権限が設定されています。

    VPC エンドポイントの詳細については、「Amazon Keyspaces 用インターフェイス VPC エンドポイントの使用」を参照してください。

  3. Java ドライバーの SSL 設定が、この例のようにホスト名の検証を false に設定していることを確認します。

    hostname-validation = false

    エージェント設定の詳細については、「ステップ 2: ドライバーを設定する」を参照してください。

  4. VPC エンドポイントが正しく設定されていることを確認するには、VPC から次のステートメントを実行します。

    注記

    ローカルの開発者環境や Amazon Keyspaces CQL エディタを使用してこの設定を確認することはできません。これらはパブリックエンドポイントを使用するためです。

    SELECT peer FROM system.peers;

    出力はこの例のようになります。VPC のセットアップと AWS リージョンに応じて、プライベート IP アドレスを持つ 2~6 個のノードを返します。

    peer --------------- 192.0.2.0.15 192.0.2.0.24 192.0.2.0.13 192.0.2.0.7 192.0.2.0.8 (5 rows)

cassandra-stress を使用して接続することができない

cassandra-stress コマンドを使用して Amazon Keyspaces に接続しようとすると、SSL context というエラーが発生します。

これは、Amazon Keyspaces に接続しようとしたのに trustStore が正しく設定されていない場合に発生します。Amazon Keyspaces では、クライアントとの安全な接続を確保するために Transport Layer Security (TLS) を使用する必要があります。

この場合は次のエラーが表示されます。

Error creating the initializing the SSL Context

この問題を解決するには、このトピック 開始する前に の指示に従って trustStore をセットアップしてください。

trustStore の設定が完了すると、次のコマンドを使用して接続できるようになります。

./cassandra-stress user profile=./profile.yaml n=100 "ops(insert=1,select=1)" cl=LOCAL_QUORUM -node "cassandra.eu-north-1.amazonaws.com" -port native=9142 -transport ssl-alg="PKIX" truststore="./cassandra_truststore.jks" truststore-password="trustStore_pw" -mode native cql3 user="user_name" password="password"

IAM アイデンティティを使用して接続することができない

IAM アイデンティティを使用して Amazon Keyspaces に接続しようとすると、Unauthorized というエラーが発生します。

これは、ポリシーを実装せず、ユーザーに必要なアクセス許可を付与していない状態で、IAM アイデンティティ (IAM ユーザーなど) を使用して Amazon Keyspaces テーブルに接続しようとした場合に発生する問題です。

この場合は次のエラーが表示されます。

Connection error: ('Unable to connect to any servers', {'3.234.248.202': AuthenticationFailed('Failed to authenticate to 3.234.248.202: Error from server: code=2100 [Unauthorized] message="User arn:aws:iam::1234567890123:user/testuser has no permissions."',)})

この問題を解決するには、IAM ユーザーのアクセス許可を確認してください。ほとんどのドライバーで接続が構築されるときにシステムのキースペース/テーブルが読み取られるため、標準的なドライバーで接続する場合には、最低条件として、ユーザーはそのシステムテーブルへの SELECT アクセス権を取得しておく必要があります。

例えば、Amazon Keyspaces システムおよびユーザーテーブルへのアクセスを許可する IAM ポリシーについては、「Amazon Keyspaces テーブルへのアクセス」を参照してください。

IAM に特化したトラブルシューティングセクションを確認するには、「Amazon Keyspaces のアイデンティティとアクセスに関するトラブルシューティング」を参照してください。

cqlsh を使ってデータをインポートしようとすると、Amazon Keyspaces テーブルへの接続が失われる

cqlsh を使用して Amazon Keyspaces にデータをアップロードしようとすると、接続エラーが発生します。

サーバーから cqlsh クライアントに何らかの種類のエラーが 3 回連続で送信されると、Amazon Keyspaces への接続が失敗します。cqlsh クライアントで処理が失敗すると、次のメッセージが表示されます。

Failed to import 1 rows: NoHostAvailable - , will retry later, attempt 3 of 100

このエラーを解決するには、インポートするデータが Amazon Keyspaces のテーブルスキーマと一致していることを確認する必要があります。インポートファイルで解析エラーが発生していないか確認してください。INSERT ステートメントを使用してエラーを切り離すことで、1 行のデータの使用を試すことができます。

クライアントにより接続の再確立が自動的に試行されます。