Solución de problemas de SDK

En esta sección se tratan los errores más comunes que se pueden producir con los SDK de OCI y cómo solucionarlos.

Errores de timeout

Los errores de timeout se producen cuando una solicitud no recibe una respuesta del servidor dentro del período de timeout configurado. Estos errores se pueden producir por varios motivos y de forma diferente en función del SDK:
  • SDK de Java: se devuelve BmcException con el código de estado -1. Esta excepción también tiene un campo de timeout con el valor true.
  • SDK de Go: el mensaje de error devuelto contiene "(Client.Timeout exceeded while awaiting headers)".
  • SDK de .NET: se devuelve System.Threading.Tasks.TaskCanceledException.
  • SDK de TypeScript: el error contiene "ETIMED".
  • SDK de Ruby: se devuelve NetworkError con el código de estado 0.
  • SDK de Python: se devuelve la excepción ConnectTimeout con un mensaje que contiene "ConnectTimeoutError", o se devuelve RequestException con un mensaje que contiene "Read timed out".
Sugerencias de resolución de problemas
  1. ¿Ha actualizado el SDK?
    • Si es así, intente revertirlo a la versión original utilizada cuando funcionaba el código.
      • Si la versión original funciona, mantenga la versión que funciona y continúe con el paso 2 utilizando la nueva versión (que no funciona) del SDK.
      • Si la versión original del SDK ya no funciona, continúe con el paso 2.
    • Si la versión del SDK no ha cambiado, compruebe si se han producido otros cambios de código desde que funcionó por última vez.
      • Si ha habido cambios de código, intente revertir esos cambios y vuelva a intentar el código original de funcionamiento.
        • Si el código original de funcionamiento deja de funcionar, continúe con el paso 2.
        • Si el código original funciona, significa que la incidencias la ha causado el cambio de código.
      • Si no se ha producido ningún cambio de código desde que funcionó por última vez, continúe con el paso 2.
  2. ¿Se produce el timeout si envía la misma solicitud a una región de OCI diferente desde la misma máquina?
    • Si no es así, el timeout proviene del servicio. Póngase en contacto con los servicios de soporte y prepárese para proporcionar el identificador opc-request-id de la solicitud con fallos.
    • Si la solicitud sigue fallando con un timeout, continúe con el paso 3.
  3. Intente la misma operación desde otra herramienta o SDK, como la CLI de OCI o curl. ¿Se sigue produciendo la incidencia de timeout?
    • Si no es así, póngase en contacto con los servicios de soporte o cree una incidencia en Github.
    • Si es el caso, quiere decir que la incidencia es con el servicio o la red. Consulte la conectividad de red o póngase en contacto con los servicios de soporte para obtener ayuda.
  4. Otras causas posibles:
    1. Es posible que se produzca un error de timeout si la velocidad de Internet no es lo suficientemente rápida como para enviar todo el contenido del cuerpo de la solicitud dentro del período de timeout configurado. Compruebe la configuración de timeout y la conexión a Internet.
    2. Compruebe la configuración de proxy y la red local para asegurarse de que el nombre de host se puede resolver.

Errores de SSL

Si recibe un error de certificado SSL (con frecuencia se genera como un error CERTIFICATE_VERIFY_FAILED), es posible que le falten certificados adicionales que requiera la operación.

Sugerencias de resolución de problemas

La CLI de OCI y cada SDK de OCI tienen métodos únicos para especificar certificaciones en el código.

CLI

export REQUESTS_CA_BUNDLE=path_to_cert_bundle_file

Java

Importe certificados de CA al almacén de claves Java:
  1. Importe un certificado en el llavero de Apple Mac OS:
    sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" ~/workspaces/trustroots/root-ca.crt
  2. Importe un certificado al almacén de confianza de 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
Ir
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

Para el SDK para .NET de OCI, debe confiar en el archivo de certificado en el nivel del sistema operativo:

Mac OS

  1. En la aplicación Keychain Access de Mac, seleccione el llavero de conexión o del sistema.

  2. Arrastre el archivo de certificado a la aplicación Keychain Access.

  3. Si se le solicita que proporcione un nombre y una contraseña, escriba el nombre y la contraseña de un usuario administrador en esta computadora.

Centos/RHEL/Oracle Linux

  1. Copie el archivo .crt a /etc/pki/ca-trust/source/anchors en su máquina

  2. Ejecute update-ca-trust extract

Debian/Ubuntu

  1. Copie el archivo .crt a /usr/local/share/ca-certificates/ en su máquina

  2. Ejecute update-ca-certificates

Ventanas

  1. Haga clic en el cuadro de búsqueda de la barra de tareas o en el menú de inicio y escriba "mmc" para iniciar Microsoft Management Console.
  2. Haga clic en el menú Archivo y, a continuación, en Agregar o quitar complemento.
  3. Haga clic en Certificados en Complementos disponibles y, a continuación, haga clic en Agregar.
  4. Haga clic en Aceptar
  5. Haga clic en Cuenta de equipo y, a continuación, haga clic en el botón Siguiente.
  6. Haga clic en Equipo local.
  7. Haga clic en Finalizar.
  8. Haga doble clic en la opción Certificados (equipo local) en el menú de árbol y, a continuación, haga clic con el derecho en el Almacén de autoridades de certificación raíz de confianza.
  9. Haga clic en el Todas las tareas en el menú emergente y, a continuación, seleccione Importar.
  10. Siga las instrucciones para buscar e importar el certificado.

Errores de configuración o autenticación

Los SDK de OCI utilizan un archivo de configuración para autenticarse en las máquinas locales. Consulte Archivo de configuración de SDK y CLI para obtener más información.

Este es un archivo de configuración de ejemplo:
[DEFAULT]
            user=ocid1.user.oc1..<example>
            fingerprint=<example fingerprint>
            key_file=~/.oci/oci_api_key.pem
            tenancy=ocid1.tenancy.oc1..<example>
Sugerencias de resolución de problemas
  • Si aparece un mensaje de error similar a "did not find a good configuration for user", asegúrese de que tiene un archivo de configuración válido.
  • Si utiliza la autorización de principal de instancia o de entidad de recurso, compruebe que la está ejecutando en el entorno correcto y que el servicio IMDS está activado. Para obtener más información sobre los métodos de autenticación, consulte Métodos de autenticación de SDK.