SDK-Fehlerbehebung
In diesem Abschnitt werden häufig auftretende Fehler bei den OCI-SDKs sowie Methoden zu deren Behebung aufgeführt.
Timeoutfehler
- Java-SDK: Eine
BmcException
wird mit dem Statuscode -1 ausgelöst. Diese Ausnahme enthält auch ein Timeoutfeld mit dem Werttrue
. - Go-SDK: Die zurückgegebene Fehlermeldung enthält "
(Client.Timeout exceeded while awaiting headers)
." - .NET-SDK: Die Ausnahme
System.Threading.Tasks.TaskCanceledException
wird ausgelöst. - TypeScript-SDK: Der Fehler enthält "
ETIMED
". - Ruby-SDK: Ein
NetworkError
wird mit dem Statuscode0
ausgelöst. - Python-SDK: Entweder wird die Ausnahme
ConnectTimeout
mit einer Meldung ausgelöst, die "ConnectTimeoutError
" enthält, oder die AusnahmeRequestException
wird mit einer Meldung ausgelöst, die "Read timed out
" enthält.
- Haben Sie das SDK aktualisiert?
- Falls ja, versuchen Sie, die Originalversion wiederherzustellen, die verwendet wurde, als der Code noch funktionierte.
- Wenn die Originalversion funktioniert, verwenden Sie sie weiterhin, und fahren Sie mit Schritt 2 mit der neuen (nicht funktionierenden) Version des SDK fort.
- Wenn die Originalversion des SDK nicht mehr funktioniert, fahren Sie mit Schritt 2 fort.
- Wenn die SDK-Version nicht geändert wurde, prüfen Sie, ob seit dem letzten Mal, als sie noch funktionsfähig war, andere Codeänderungen vorgenommen wurden.
- Falls Änderungen am Code vorgenommen wurden, versuchen Sie, diese Änderungen rückgängig zu machen, und testen Sie den ursprünglich funktionierenden Code erneut.
- Wenn der ursprünglich funktionierende Code nicht mehr funktioniert, fahren Sie mit Schritt 2 fort.
- Wenn der ursprünglich funktionierende Code funktioniert, wurde das Problem durch die Codeänderung verursacht.
- Wenn seit dem letzten Mal, als der Code funktionierte, keine Codeänderungen vorgenommen wurden, fahren Sie mit Schritt 2 fort.
- Falls Änderungen am Code vorgenommen wurden, versuchen Sie, diese Änderungen rückgängig zu machen, und testen Sie den ursprünglich funktionierenden Code erneut.
- Falls ja, versuchen Sie, die Originalversion wiederherzustellen, die verwendet wurde, als der Code noch funktionierte.
- Tritt der Timeout auf, wenn Sie dieselbe Anforderung von demselben Rechner an eine andere OCI-Region senden?
- Falls nein, wird der Timeout durch den Service verursacht. Wenden Sie sich an den Support, und halten Sie
opc-request-id
für die nicht erfolgreiche Anforderung bereit. - Wenn die Anforderung immer noch nicht erfolgreich verläuft und einen Timeout ausgibt, fahren Sie mit Schritt 3 fort.
- Falls nein, wird der Timeout durch den Service verursacht. Wenden Sie sich an den Support, und halten Sie
- Versuchen Sie, denselben Vorgang mit einem anderen Tool oder SDK wie der OCI-CLI oder curl auszuführen. Tritt das Timeoutproblem noch auf?
- Wenn nicht, wenden Sie sich an den Support, oder erstellen Sie ein Problem auf GitHub.
- Wenn ja, wird das Problem entweder durch den Service oder das Netzwerk verursacht. Prüfen Sie die Netzwerkkonnektivität, oder wenden Sie sich an den Support.
- Weitere mögliche Ursachen:
- Ein Timeoutfehler kann auftreten, wenn Ihre Internetgeschwindigkeit zu niedrig ist, um den gesamten Inhalt des Anforderungsbodys innerhalb des konfigurierten Timeoutzeitraums zu senden. Prüfen Sie die Einstellungen für die Internetverbindung und den Timeout.
- Prüfen Sie die lokalen Netzwerk- und Proxyeinstellungen, um sicherzustellen, dass der Hostname aufgelöst werden kann.
SSL-Fehler
Wenn ein SSL-Zertifikatsfehler auftritt (häufig als Fehler CERTIFICATE_VERIFY_FAILED
ausgelöst), fehlen möglicherweise zusätzliche Zertifikate, die der Vorgang erfordert.
Vorschläge zur Fehlerbehebung
Die OCI-CLI und jedes OCI-SDK verfügen über eindeutige Methoden, um Zertifizierungen im Code anzugeben.
CLI
export REQUESTS_CA_BUNDLE=path_to_cert_bundle_file
Java
- Zertifikate in den Apple Mac OS-Schlüsselbund importieren:
sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" ~/workspaces/trustroots/root-ca.crt
- Zertifikate in den Java Runtime Environment (JRE) Truststore importieren:
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")
}
# 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
# 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',
}
export NODE_EXTRA_CA_CERTS=<path_to_cert>
.NET
Für das OCI-.NET-SDK müssen Sie der Zertifikatsdatei auf Betriebssystemebene vertrauen:
Mac OS
-
Wählen Sie in der Schlüsselbundverwaltung auf dem Mac entweder den Anmelde- oder den Systemschlüsselbund aus.
-
Ziehen Sie die Zertifikatsdatei auf die Schlüsselbundverwaltung.
-
Wenn Sie zur Eingabe eines Namens und Kennworts aufgefordert werden, geben Sie den Namen und das Kennwort für einen Administratorbenutzer auf diesem Computer ein.
Centos/RHEL/Oracle Linux
-
Kopieren Sie die .crt-Datei in
/etc/pki/ca-trust/source/anchors
auf dem Rechner. -
Führen Sie
update-ca-trust extract
aus.
Debian/Ubuntu
-
Kopieren Sie die .crt-Datei in
/usr/local/share/ca-certificates/
auf dem Rechner. -
Führen Sie
update-ca-certificates
aus.
Fenster
- Klicken Sie in der Taskleiste oder im Startmenü auf das Suchfeld, und geben Sie "mmc" ein, um die Microsoft Management Console zu starten.
- Klicken Sie auf das Menü Datei und dann auf Snap-In hinzufügen/entfernen.
- Klicken Sie unter Verfügbare Snap-Ins auf Zertifikate und dann auf Hinzufügen.
- Klicken Sie auf OK
- Klicken Sie auf Computerkonto, und klicken Sie dann auf Weiter.
- Klicken Sie auf Lokaler Computer
- Klicken Sie auf Fertigstellen.
- Doppelklicken Sie im Baummenü auf Zertifikate (Lokaler Computer), und klicken mit der rechten Maustaste auf Speicher für vertrauenswürdige Stammzertifizierungsstellen.
- Klicken Sie im Popup-Menü auf Alle Aufgaben, und wählen Sie Importieren aus.
- Befolgen Sie die Anweisungen zum Suchen und Importieren des Zertifikats.
Konfigurations- oder Authentifizierungsfehler
Die OCI-SDKs verwenden eine Konfigurationsdatei zur Authentifizierung auf lokalen Rechnern. Weitere Informationen finden Sie unter SDK- und CLI-Konfigurationsdatei.
[DEFAULT]
user=ocid1.user.oc1..<example>
fingerprint=<example fingerprint>
key_file=~/.oci/oci_api_key.pem
tenancy=ocid1.tenancy.oc1..<example>
- Wenn eine Fehlermeldung wie "Did not find a proper configuration for user" angezeigt wird, stellen Sie sicher, dass eine gültige Konfigurationsdatei vorhanden ist.
- Wenn Sie die Instanz-Principal- oder Resource-Principal-Autorisierung verwenden, prüfen Sie, ob Sie in der richtigen Umgebung arbeiten und ob der IMDS-Service aktiviert ist. Weitere Informationen zu Authentifizierungsmethoden finden Sie unter SDK-Authentifizierungsmethoden.