Diagnóstico e Solução de Problemas do SDK

Esta seção trata dos erros mais comuns que podem ocorrer com os SDKs do OCI e como diagnosticá-los e solucioná-los.

Erros de Timeout

Erros de timeout ocorrem quando uma solicitação não recebe uma resposta do servidor dentro do período de timeout configurado. Esses erros podem acontecer por vários motivos e são gerados de maneira distinta, dependendo do SDK:
  • SDK Java: Um BmcException é gerado com um código de status de -1. Essa exceção também tem um campo de timeout com um valor true.
  • SDK do Go: A mensagem de erro retornada contém "(Client.Timeout exceeded while awaiting headers)".
  • SDK do .NET: Uma exceção System.Threading.Tasks.TaskCanceledException é gerada.
  • SDK do TypeScript: O erro contém "ETIMED".
  • SDK Ruby: Um NetworkError é gerado com um código de status 0.
  • SDK do Python: Uma exceção ConnectTimeout é gerada com uma mensagem contendo "ConnectTimeoutError" ou uma exceção RequestException é gerada com uma mensagem contendo "Read timed out".
Solucionando Problemas de Sugestões
  1. Você atualizou o SDK?
    • Em caso afirmativo, tente reverter para a versão original usada quando o código estava funcionando.
      • Se a versão original funcionar, fique com a versão de trabalho e continue na Etapa 2 usando a nova versão (não a de trabalho) do SDK.
      • Se a versão original do SDK não funcionar mais, continue na Etapa 2.
    • Se a versão do SDK não tiver sido alterada, verifique se houve outras alterações de código desde que funcionou da última vez.
      • Se tiver havido alterações de código, tente reverter essas alterações e tente novamente o código de trabalho original.
        • Se o código de trabalho original parar de funcionar, continue na Etapa 2.
        • Se o código de trabalho original funcionar, o problema foi causado pela alteração do código.
      • Se não tiver havido alterações de código desde que ele funcionou da última vez, continue na Etapa 2.
  2. Ocorre o timeout quando você envia a mesma solicitação a outra região do OCI pela mesma máquina?
    • Em caso negativo, o timeout foi proveniente do serviço. Entre em contato com o suporte e esteja pronto para fornecer o opc-request-id da solicitação com falha.
    • Se a solicitação ainda falhar com um timeout, continue na Etapa 3.
  3. Tente a mesma operação em outra ferramenta ou SDK, como a CLI do OCI ou curl. O problema de timeout ainda ocorre?
    • Em caso negativo, entre em contato com o suporte ou crie um problema no Github.
    • Em caso afirmativo, o problema é com o serviço ou com a rede. Verifique a conectividade de rede ou entre em contato com o suporte para obter ajuda.
  4. Outras possíveis causas:
    1. Um erro de timeout pode ocorrer se a velocidade da sua Internet não for alta o suficiente para enviar todo o conteúdo do corpo da solicitação dentro do período de timeout configurado. Verifique sua conexão com a internet e as configurações de timeout.
    2. Verifique as configurações da rede local e proxy para se certificar de que o nome do host possa ser resolvido.

Erros de SSL

Se você receber um erro de certificado SSL (geralmente gerado como um erro CERTIFICATE_VERIFY_FAILED), talvez estejam faltando certificados adicionais que a operação exige.

Solucionando Problemas de Sugestões

A CLI do OCI e cada SDK do OCI têm métodos exclusivos para especificar certificações no código.

CLI

export REQUESTS_CA_BUNDLE=path_to_cert_bundle_file

Java

Importar certificados CA para a Área de Armazenamento de Chaves Java:
  1. Importe um certificado para o keychain do Mac OS da Apple:
    sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" ~/workspaces/trustroots/root-ca.crt
  2. Importar um Certificado para o Armazenamento Confiável JRE (Java Runtime Environment):
    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 o OCI. NET SDK, você precisa confiar no arquivo de certificado no nível do SO:

Mac OS

  1. No aplicativo Acesso às Chaves em seu Mac, selecione o Login ou o keychain do Sistema.

  2. Arraste o arquivo de certificado para o aplicativo Acesso às Chaves.

  3. Se for solicitado que você forneça um nome e uma senha, digite o nome e a senha de um usuário administrador neste computador.

Centos/RHEL/Oracle Linux

  1. Copie o arquivo .crt para /etc/pki/ca-trust/source/anchors em sua máquina

  2. Execute update-ca-trust extract

Debian/Ubuntu

  1. Copie o arquivo .crt para /usr/local/share/ca-certificates/ em sua máquina

  2. Execute update-ca-certificates

Janelas

  1. Clique na caixa de pesquisa na barra de tarefas ou no Menu Iniciar e digite "mmc" para iniciar o Console de Gerenciamento Microsoft.
  2. Clique no menu Arquivo e, em seguida, clique em Adicionar/Remover Snap-In.
  3. Clique em Certificados em Snap-ins Disponíveis e clique em Adicionar.
  4. Clique em OK
  5. Clique em Conta do Compute e, em seguida, clique no botão Próximo.
  6. Clique em Computador Local
  7. Clique em Finalizar.
  8. Faça duplo clique em Certificados (Computador Local) no menu em árvore e, em seguida, clique em Armazenamento de Autoridades de Certificação de Raiz Confiável.
  9. Clique em Todas as Tarefas no menu pop-up e selecione Importar.
  10. Siga as instruções para localizar e importar seu certificado.

Erros de Configuração ou Autenticação

Os SDKs do OCI usam um arquivo de configuração para autenticação em máquinas locais. Consulte Arquivo de Configuração do SDK e da CLI para obter mais informações.

Este é um exemplo de arquivo de configuração:
[DEFAULT]
            user=ocid1.user.oc1..<example>
            fingerprint=<example fingerprint>
            key_file=~/.oci/oci_api_key.pem
            tenancy=ocid1.tenancy.oc1..<example>
Solucionando Problemas de Sugestões
  • Se você receber uma mensagem de erro semelhante a "não encontrou uma configuração adequada para o usuário", certifique-se de ter um arquivo de configuração válido.
  • Se você estiver usando a autorização do controlador de instâncias ou do controlador de recursos, verifique se está executando no ambiente correto e se o serviço IMDS está ativado. Para obter mais informações sobre métodos de autenticação, consulte Métodos de Autenticação do SDK.