このページは機械翻訳したものです。

SDKのトラブルシューティング

この項では、OCI SDKで発生する可能性がある最も一般的なエラーと、それらをトラブルシューティングする方法について説明します。

タイムアウト・エラー

タイムアウト・エラーは、リクエストが構成済のタイムアウト期間内にサーバーからレスポンスを取得しない場合に発生します。これらのエラーの発生理由は多数あり、SDKに応じて生成される方法も異なります:
  • Java SDK: ステータス・コード-1でBmcExceptionがスローされます。この例外には、true値を持つタイムアウト・フィールドもあります。
  • Go SDK: 返されるエラー・メッセージには"(Client.Timeout exceeded while awaiting headers)"が含まれます。
  • .NET SDK: System.Threading.Tasks.TaskCanceledExceptionがスローされます。
  • TypeScript SDK: エラーには"ETIMED"が含まれます。
  • Ruby SDK: ステータス・コード0NetworkErrorがスローされます。
  • Python SDK: ConnectTimeout例外が"ConnectTimeoutError"を含むメッセージとともにスローされるか、RequestExceptionが"Read timed out"を含むメッセージとともにスローされます。
トラブルシューティングの推奨事項
  1. SDKを更新しましたか。
    • その場合は、コードが動作していたときに使用していた元のバージョンに戻してみてください。
      • 元のバージョンが動作する場合は、その動作しているバージョンをそのまま使用し、新しい(動作していない) SDKバージョンを使用してステップ2に進みます。
      • 元のバージョンのSDKが動作しなくなった場合は、ステップ2に進みます。
    • SDKバージョンが変更されていない場合は、最後に動作していたときから他にコードが変更されていないか確認します。
      • コードが変更されている場合は、それらの変更を元に戻して、動作していた元のコードを再試行してください。
        • 動作していた元のコードが動作しなくなった場合は、ステップ2に進みます。
        • 動作していた元のコードで問題なく動作する場合、問題が発生した原因はコードの変更です。
      • 前回動作していたときからコードが変更されていない場合は、ステップ2に進みます。
  2. 同じマシンから同じリクエストを別のOCIリージョンに送信すると、タイムアウトが発生しますか。
    • そうでない場合、タイムアウトが発生した原因はサービスです。サポートに連絡し、失敗したリクエストのopc-request-idを提供できるように準備してください。
    • まだリクエストがタイムアウトで失敗する場合は、ステップ3に進みます。
  3. OCI CLIやcurlなど、別のツールまたはSDKから同じ操作を試行してください。まだタイムアウトの問題が発生しますか。
    • 発生しない場合は、サポートに連絡するか、Githubで問題を作成してください。
    • 発生する場合、問題はサービスまたはネットワークに関連しています。ネットワーク接続を確認するか、サポートにお問い合せください。
  4. 考えられるその他の原因:
    1. インターネット速度が構成済のタイムアウト期間内にリクエスト本文のコンテンツをすべて送信するのに十分でない場合、タイムアウト・エラーが発生することがあります。インターネット接続とタイムアウトの設定を確認してください。
    2. ローカル・ネットワークとプロキシの設定を確認して、ホスト名を解決できることを確認します。

SSLエラー

SSL証明書エラー(CERTIFICATE_VERIFY_FAILEDエラーとして生成されることが多い)を受け取った場合、操作に必要な追加の証明書が欠落している可能性があります。

トラブルシューティングの推奨事項

OCI CLIと各OCI SDKには、コードで証明書を指定する固有の方法があります。

CLI

export REQUESTS_CA_BUNDLE=path_to_cert_bundle_file

Java

JavaキーストアにCA証明書をインポートします:
  1. Apple Mac OSキーチェーンに証明書をインポートします:
    sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" ~/workspaces/trustroots/root-ca.crt
  2. Java Runtime Environment (JRE)トラストストアに証明書をインポートします:
    export JAVA_HOME="$(/usr/libexec/java_home)"
                        sudo keytool -importcert -alias missioncontrol-root-ca -file ~/workspaces/trustroots/root-ca.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
移動
pool := x509.NewCertPool()
            //readCertPem reads the pem files to a []byte
            pool.AppendCertsFromPEM(readCertPem())
            //install the certificates to the client
            if h, ok := client.HTTPClient.(*http.Client); ok {
            tr := &http.Transport{TLSClientConfig: &tls.Config{RootCAs:pool}}
            h.Transport = tr
            } else {
            panic("the client dispatcher is not of http.Client type. can not patch the tls config")
            }
Python
# There are two ways of trusting certs
            
            # 1. Pass the certs directly to a client
            object_storage = oci.object_storage.ObjectStorageClient(config)
            object_storage.base_client.session.verify = 'path_to_cert_bundle_file'
            
            # 2. Set the environment variable "REQUESTS_CA_BUNDLE"
            export REQUESTS_CA_BUNDLE=path_to_cert_bundle_file
Ruby
# Take identity client as an example
            # Refer to this link: https://ruby-doc.org/stdlib-2.4.1/libdoc/net/http/rdoc/Net/HTTP.html for a complete list of variables to configure
            identity = OCI::Identity::IdentityClient.new
            identity.api_client.request_option_overrides = {
            # Sets path of a CA certification file in PEM format.
            # The file can contain several CA certificates.
            :ca_file => 'PATH_TO_CA_FILE',
            # Sets path of a CA certification directory containing certifications in PEM format.
            :ca_path => 'PATH_TO_CA_DIR',
            }
TypeScript
export NODE_EXTRA_CA_CERTS=<path_to_cert>

.NET

OCI .NET SDKの場合は、OSレベルで証明書ファイルを信頼する必要があります:

Mac OS

  1. MacのKeychain Accessアプリケーションで、「Login」または「System」キーチェーンを選択します。

  2. 証明書ファイルをKeychain Accessアプリケーションにドラッグします。

  3. 名前とパスワードの入力を求められた場合は、このコンピュータの管理者ユーザーの名前とパスワードを入力します。

Centos/RHEL/Oracle Linux

  1. .crtファイルをマシンの/etc/pki/ca-trust/source/anchorsにコピーします

  2. update-ca-trust extractを実行します

Debian/Ubuntu

  1. .crtファイルをマシンの/usr/local/share/ca-certificates/にコピーします

  2. update-ca-certificatesを実行します

Windows

  1. タスクバーまたはスタート・メニューの検索ボックスをクリックし、「mmc」と入力してMicrosoft管理コンソールを起動します。
  2. 「ファイル」メニューをクリックし、「スナップインの追加と削除」を選択します。
  3. 「使用可能なスナップイン」の下の「証明書」をクリックし、「追加」を選択します。
  4. 「OK」をクリックします
  5. 「コンピュータ・アカウント」をクリックし、「次へ」ボタンをクリックします。
  6. 「ローカル コンピュータ」をクリックします
  7. 「終了」をクリックします。
  8. ツリー・メニューで「証明書(ローカル コンピュータ)」をダブルクリックし、「信頼されたルート証明機関ストア」を右クリックします。
  9. ポップアップ・メニューで「すべてのタスク」をクリックし、「インポート」を選択します。
  10. 手順に従って証明書を検索し、インポートします。

構成または認証のエラー

OCI SDKは、構成ファイルを使用してローカル・マシンでの認証を行います。詳細は、SDKおよびCLIの構成ファイルを参照してください。

これは構成ファイルの例です:
[DEFAULT]
            user=ocid1.user.oc1..<example>
            fingerprint=<example fingerprint>
            key_file=~/.oci/oci_api_key.pem
            tenancy=ocid1.tenancy.oc1..<example>
トラブルシューティングの推奨事項
  • 「ユーザーに適切な構成が見つからない」のようなエラー・メッセージが表示された場合は、有効な構成ファイルがあることを確認します。
  • インスタンス・プリンシパル認可またはリソース・プリンシパル認可を使用している場合は、正しい環境で実行していること、およびIMDSサービスが有効になっていることを確認します。認証方法の詳細は、SDKの認証方法を参照してください。