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: ステータス・コード
0
でNetworkError
がスローされます。 - Python SDK:
ConnectTimeout
例外が"ConnectTimeoutError
"を含むメッセージとともにスローされるか、RequestException
が"Read timed out
"を含むメッセージとともにスローされます。
トラブルシューティングの推奨事項
- SDKを更新しましたか。
- その場合は、コードが動作していたときに使用していた元のバージョンに戻してみてください。
- 元のバージョンが動作する場合は、その動作しているバージョンをそのまま使用し、新しい(動作していない) SDKバージョンを使用してステップ2に進みます。
- 元のバージョンのSDKが動作しなくなった場合は、ステップ2に進みます。
- SDKバージョンが変更されていない場合は、最後に動作していたときから他にコードが変更されていないか確認します。
- コードが変更されている場合は、それらの変更を元に戻して、動作していた元のコードを再試行してください。
- 動作していた元のコードが動作しなくなった場合は、ステップ2に進みます。
- 動作していた元のコードで問題なく動作する場合、問題が発生した原因はコードの変更です。
- 前回動作していたときからコードが変更されていない場合は、ステップ2に進みます。
- コードが変更されている場合は、それらの変更を元に戻して、動作していた元のコードを再試行してください。
- その場合は、コードが動作していたときに使用していた元のバージョンに戻してみてください。
- 同じマシンから同じリクエストを別のOCIリージョンに送信すると、タイムアウトが発生しますか。
- そうでない場合、タイムアウトが発生した原因はサービスです。サポートに連絡し、失敗したリクエストの
opc-request-id
を提供できるように準備してください。 - まだリクエストがタイムアウトで失敗する場合は、ステップ3に進みます。
- そうでない場合、タイムアウトが発生した原因はサービスです。サポートに連絡し、失敗したリクエストの
- OCI CLIやcurlなど、別のツールまたはSDKから同じ操作を試行してください。まだタイムアウトの問題が発生しますか。
- 発生しない場合は、サポートに連絡するか、Githubで問題を作成してください。
- 発生する場合、問題はサービスまたはネットワークに関連しています。ネットワーク接続を確認するか、サポートにお問い合せください。
- 考えられるその他の原因:
- インターネット速度が構成済のタイムアウト期間内にリクエスト本文のコンテンツをすべて送信するのに十分でない場合、タイムアウト・エラーが発生することがあります。インターネット接続とタイムアウトの設定を確認してください。
- ローカル・ネットワークとプロキシの設定を確認して、ホスト名を解決できることを確認します。
SSLエラー 🔗
SSL証明書エラー(CERTIFICATE_VERIFY_FAILED
エラーとして生成されることが多い)を受け取った場合、操作に必要な追加の証明書が欠落している可能性があります。
トラブルシューティングの推奨事項
OCI CLIと各OCI SDKには、コードで証明書を指定する固有の方法があります。
CLI
export REQUESTS_CA_BUNDLE=path_to_cert_bundle_file
Java
JavaキーストアにCA証明書をインポートします:
- Apple Mac OSキーチェーンに証明書をインポートします:
sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" ~/workspaces/trustroots/root-ca.crt
- 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
-
MacのKeychain Accessアプリケーションで、「Login」または「System」キーチェーンを選択します。
-
証明書ファイルをKeychain Accessアプリケーションにドラッグします。
-
名前とパスワードの入力を求められた場合は、このコンピュータの管理者ユーザーの名前とパスワードを入力します。
Centos/RHEL/Oracle Linux
-
.crtファイルをマシンの
/etc/pki/ca-trust/source/anchors
にコピーします -
update-ca-trust extract
を実行します
Debian/Ubuntu
-
.crtファイルをマシンの
/usr/local/share/ca-certificates/
にコピーします -
update-ca-certificates
を実行します
Windows
- タスクバーまたはスタート・メニューの検索ボックスをクリックし、「mmc」と入力してMicrosoft管理コンソールを起動します。
- 「ファイル」メニューをクリックし、「スナップインの追加と削除」を選択します。
- 「使用可能なスナップイン」の下の「証明書」をクリックし、「追加」を選択します。
- 「OK」をクリックします
- 「コンピュータ・アカウント」をクリックし、「次へ」ボタンをクリックします。
- 「ローカル コンピュータ」をクリックします
- 「終了」をクリックします。
- ツリー・メニューで「証明書(ローカル コンピュータ)」をダブルクリックし、「信頼されたルート証明機関ストア」を右クリックします。
- ポップアップ・メニューで「すべてのタスク」をクリックし、「インポート」を選択します。
- 手順に従って証明書を検索し、インポートします。
構成または認証のエラー 🔗
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の認証方法を参照してください。