SDK-Fehlerbehebung

In diesem Abschnitt werden häufig auftretende Fehler bei den OCI-SDKs sowie Methoden zu deren Behebung aufgeführt.

Timeoutfehler

Timeoutfehler treten auf, wenn eine Anforderung innerhalb des konfigurierten Timeoutzeitraums keine Antwort vom Server erhält. Diese Fehler können aus verschiedenen Gründen auftreten und werden je nach SDK unterschiedlich ausgelöst:
  • Java-SDK: Eine BmcException wird mit dem Statuscode -1 ausgelöst. Diese Ausnahme enthält auch ein Timeoutfeld mit dem Wert true.
  • 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 Statuscode 0 ausgelöst.
  • Python-SDK: Entweder wird die Ausnahme ConnectTimeout mit einer Meldung ausgelöst, die "ConnectTimeoutError" enthält, oder die Ausnahme RequestException wird mit einer Meldung ausgelöst, die "Read timed out" enthält.
Vorschläge zur Fehlerbehebung
  1. 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.
  2. 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.
  3. 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.
  4. Weitere mögliche Ursachen:
    1. 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.
    2. 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

CA-Zertifikate in den Java Keystore importieren:
  1. 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
  2. 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
Los
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

Für das OCI-.NET-SDK müssen Sie der Zertifikatsdatei auf Betriebssystemebene vertrauen:

Mac OS

  1. Wählen Sie in der Schlüsselbundverwaltung auf dem Mac entweder den Anmelde- oder den Systemschlüsselbund aus.

  2. Ziehen Sie die Zertifikatsdatei auf die Schlüsselbundverwaltung.

  3. 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

  1. Kopieren Sie die .crt-Datei in /etc/pki/ca-trust/source/anchors auf dem Rechner.

  2. Führen Sie update-ca-trust extract aus.

Debian/Ubuntu

  1. Kopieren Sie die .crt-Datei in /usr/local/share/ca-certificates/ auf dem Rechner.

  2. Führen Sie update-ca-certificates aus.

Fenster

  1. Klicken Sie in der Taskleiste oder im Startmenü auf das Suchfeld, und geben Sie "mmc" ein, um die Microsoft Management Console zu starten.
  2. Klicken Sie auf das Menü Datei und dann auf Snap-In hinzufügen/entfernen.
  3. Klicken Sie unter Verfügbare Snap-Ins auf Zertifikate und dann auf Hinzufügen.
  4. Klicken Sie auf OK
  5. Klicken Sie auf Computerkonto, und klicken Sie dann auf Weiter.
  6. Klicken Sie auf Lokaler Computer
  7. Klicken Sie auf Fertigstellen.
  8. Doppelklicken Sie im Baummenü auf Zertifikate (Lokaler Computer), und klicken mit der rechten Maustaste auf Speicher für vertrauenswürdige Stammzertifizierungsstellen.
  9. Klicken Sie im Popup-Menü auf Alle Aufgaben, und wählen Sie Importieren aus.
  10. 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.

Dies ist ein Beispiel für eine Konfigurationsdatei:
[DEFAULT]
            user=ocid1.user.oc1..<example>
            fingerprint=<example fingerprint>
            key_file=~/.oci/oci_api_key.pem
            tenancy=ocid1.tenancy.oc1..<example>
Vorschläge zur Fehlerbehebung
  • 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.