Quando faço upload ou download de objetos no meu bucket do Amazon Simple Storage Service (Amazon S3), recebo um dos seguintes erros: ConnectionResetError, Connection Aborted ou Connection reset by peer.
Resolução
Você recebe erros de redefinição de conexão porque sua aplicação não consegue estabelecer uma conexão com os endpoints do Amazon S3. Isso pode ocorrer devido ao fechamento da conexão ou ao fato de as conexões ficarem inativas quando os recursos do S3 são acessados. Esses erros ocorrem devido a problemas com a camada da aplicação ou do cliente, com o caminho da rede ou com qualquer recurso intermediário. Para identificar a causa raiz do problema, você deve descobrir o componente que está causando o erro.
Teste a conectividade
Para testar a conectividade, execute os comandos a seguir para verificar se sua máquina consegue estabelecer uma conexão com o S3 por HTTP ou HTTPS.
$ telnet mybucket.s3.REGION-CODE.amazonaws.com 80
$ telnet mybucket.s3.REGION-CODE.amazonaws.com 443
Ignore a validação SSL
Inclua o parâmetro --no-verify-ssl em sua solicitação para ignorar a validação SSL. Esse parâmetro impede que os certificados SSL sejam validados. No entanto, a solicitação passa pela porta 443. Essa abordagem ajuda você a isolar problemas relacionados à validação de SSL.
Analise o tráfego de rede
Faça uma captura de pacote para analisar o tráfego de rede entre sua máquina e o Amazon S3. Analise a captura de pacote para determinar se o cliente ou servidor emite o sinalizador RST.
- Se sua rede emitir o sinalizador RST, anote o endereço IP e o processo quando o sinalizador RST for lançado. Os processos incluem pesquisa de DNS, handshake TCP, handshake SSL e transferência de dados.
- Se sua rede emitir o sinalizador RST durante um handshake SSL, certifique-se de que sua máquina confia no certificado retornado pela Amazon.
Conexão de depuração
Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está usando a versão mais recente da AWS CLI.
Execute o comando cp da AWS CLI na máquina em que você recebeu o erro para tentar se conectar ao bucket do Amazon S3. Inclua o sinalizador --debug no comando:
aws s3 cp/sync SOURCE_FILE_PATH/SOURCE_FILE_NAME DESTINATION --debug
Analise os cabeçalhos da solicitação, o método de solicitação e a resposta. Se o problema for intermitente e algumas solicitações forem bem-sucedidas, verifique se há diferenças entre uma solicitação bem-sucedida e uma malsucedida.
Verifique a saída do comando para verificar se um proxy no ambiente de rede causa o erro. A saída indica um erro de proxy ou falha na conexão de proxy para erros que ocorrem devido a um proxy HTTP. Se um proxy SSL causou o erro, você verá um dos erros de redefinição da conexão quando o handshake SSL tentar ser estabelecido.
Verifique o HTTP Keep-Alive
Ative o HTTP Keep-Alive em sua máquina para que ela use uma única conexão TCP para permanecer aberta para várias solicitações e respostas HTTP. Execute o comando a seguir para verificar se o TCP Keep-Alive está ativado:
curl -Iv s3.amazonaws.com 2>&1 | grep -i 'connection #0'
Quando o TCP Keep-Alive está ativado, a saída mostra a seguinte string:
Connection #0 to host s3.amazonaws.com left intact
Verifique os recursos intermediários
Recursos intermediários, como gateway NAT, firewall ou balanceador de carga, podem fechar a conexão prematuramente quando esses recursos sofrem alta utilização. Além disso, eles podem fechar a conexão prematuramente e marcá-la como inativa quando os dados não são gravados de ou para a rede por um período de tempo.