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
- 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 valortrue
. - 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 estado0
. - SDK de Python: se devuelve la excepción
ConnectTimeout
con un mensaje que contiene "ConnectTimeoutError
", o se devuelveRequestException
con un mensaje que contiene "Read timed out
".
- ¿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.
- Si ha habido cambios de código, intente revertir esos cambios y vuelva a intentar el código original de funcionamiento.
- Si es así, intente revertirlo a la versión original utilizada cuando funcionaba el código.
- ¿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.
- 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
- 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.
- Otras causas posibles:
- 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.
- 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 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
- 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
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
Para el SDK para .NET de OCI, debe confiar en el archivo de certificado en el nivel del sistema operativo:
Mac OS
-
En la aplicación Keychain Access de Mac, seleccione el llavero de conexión o del sistema.
-
Arrastre el archivo de certificado a la aplicación Keychain Access.
-
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
-
Copie el archivo .crt a
/etc/pki/ca-trust/source/anchors
en su máquina -
Ejecute
update-ca-trust extract
Debian/Ubuntu
-
Copie el archivo .crt a
/usr/local/share/ca-certificates/
en su máquina -
Ejecute
update-ca-certificates
Ventanas
- 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.
- Haga clic en el menú Archivo y, a continuación, en Agregar o quitar complemento.
- Haga clic en Certificados en Complementos disponibles y, a continuación, haga clic en Agregar.
- Haga clic en Aceptar
- Haga clic en Cuenta de equipo y, a continuación, haga clic en el botón Siguiente.
- Haga clic en Equipo local.
- Haga clic en Finalizar.
- 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.
- Haga clic en el Todas las tareas en el menú emergente y, a continuación, seleccione Importar.
- 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.
[DEFAULT]
user=ocid1.user.oc1..<example>
fingerprint=<example fingerprint>
key_file=~/.oci/oci_api_key.pem
tenancy=ocid1.tenancy.oc1..<example>
- 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.