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
- 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 valortrue
. - 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 status0
. - SDK do Python: Uma exceção
ConnectTimeout
é gerada com uma mensagem contendo "ConnectTimeoutError
" ou uma exceçãoRequestException
é gerada com uma mensagem contendo "Read timed out
".
- 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.
- Se tiver havido alterações de código, tente reverter essas alterações e tente novamente o código de trabalho original.
- Em caso afirmativo, tente reverter para a versão original usada quando o código estava funcionando.
- 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.
- Em caso negativo, o timeout foi proveniente do serviço. Entre em contato com o suporte e esteja pronto para fornecer o
- 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.
- Outras possíveis causas:
- 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.
- 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
- 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
- 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
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 o OCI. NET SDK, você precisa confiar no arquivo de certificado no nível do SO:
Mac OS
-
No aplicativo Acesso às Chaves em seu Mac, selecione o Login ou o keychain do Sistema.
-
Arraste o arquivo de certificado para o aplicativo Acesso às Chaves.
-
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
-
Copie o arquivo .crt para
/etc/pki/ca-trust/source/anchors
em sua máquina -
Execute
update-ca-trust extract
Debian/Ubuntu
-
Copie o arquivo .crt para
/usr/local/share/ca-certificates/
em sua máquina -
Execute
update-ca-certificates
Janelas
- Clique na caixa de pesquisa na barra de tarefas ou no Menu Iniciar e digite "mmc" para iniciar o Console de Gerenciamento Microsoft.
- Clique no menu Arquivo e, em seguida, clique em Adicionar/Remover Snap-In.
- Clique em Certificados em Snap-ins Disponíveis e clique em Adicionar.
- Clique em OK
- Clique em Conta do Compute e, em seguida, clique no botão Próximo.
- Clique em Computador Local
- Clique em Finalizar.
- 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.
- Clique em Todas as Tarefas no menu pop-up e selecione Importar.
- 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.
[DEFAULT]
user=ocid1.user.oc1..<example>
fingerprint=<example fingerprint>
key_file=~/.oci/oci_api_key.pem
tenancy=ocid1.tenancy.oc1..<example>
- 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.