Skip to main content

Problemas com Upload via SDK Boto3

Versões afetadas

  • boto3: 1.36.* (incompatível)
  • boto3: 1.35.99 ou menor (funcional)

Problema

A versão 1.36.* da SDK Boto3 apresenta incompatibilidades com o Object Storage, resultando em falhas ao realizar uploads de arquivos. Mesmo com credenciais corretas e validadas o seguinte erro pode aparecer ao realizar funções de uploads com boto3.

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the PutObject operation: Credentials or specified url is malformed.

Diagnóstico

  1. O problema ocorre apenas na versão 1.36.*?

    • Sim, o erro desaparece ao fazer downgrade para a versão 1.35.99 ou anterior.
  2. O erro está diretamente relacionado ao upload de arquivos?

    • Sim, a falha ocorre ao chamar métodos de upload, como upload_file.
  3. A falha afeta todas as versões do Boto3?

    • Não, apenas versões 1.36.* apresentam esse problema.
  4. A Magalu Cloud possui recomendações específicas sobre a versão do Boto3?

    • Sim, conforme a documentação, a Magalu Cloud oferece suporte até a versão 1.35.99 da biblioteca Boto3. Recomenda-se a utilização dessa versão para garantir a compatibilidade.

Solução

A solução imediata é fazer downgrade do Boto3 para a versão 1.35.99 ou menor, garantindo a compatibilidade com o Object Storage.

Passo 1: Verificar a versão do Boto3 instalada

Execute o seguinte comando para conferir a versão atual:

pip show boto3

Se o retorno for 1.36.*, prossiga para o downgrade.

Passo 2: Fazer downgrade do Boto3

Para reverter para a versão 1.35.99, execute:

pip install boto3==1.35.99

Caso precise garantir que nenhuma versão problemática seja instalada no futuro, utilize:

pip install "boto3<1.36.0"

Isso evita upgrades automáticos para versões com o erro.

Passo 3: Confirmar que o downgrade foi bem-sucedido

Após a reinstalação, valide a versão do Boto3 novamente:

pip show boto3

O resultado deve exibir 1.35.99 ou uma versão inferior.

Passo 4: Testar o upload novamente

Execute o código de upload para confirmar que o problema foi resolvido:

import boto3

s3 = boto3.client('s3', endpoint_url='https://<Region URL>', aws_access_key_id='<magalu_access_key_id>', aws_secret_access_key='<secret_access_key>')

try:
s3.upload_file('meuarquivo.txt', 'meu-bucket', 'meuarquivo.txt')
print("Upload bem-sucedido!")
except Exception as e:
print(f"Erro ao fazer upload: {e}")

Substituir <Region URL>, <magalu_access_key_id> e <secret_access_key> pelos valores corretos de suas credenciais.

Se o upload for concluído sem erros, a correção foi aplicada com sucesso.

Conclusão

A versão 1.36.* do Boto3 não é compatível com o Object Storage da Magalu Cloud, afetando operações de upload. A solução recomendada é utilizar Boto3 versão 1.35.99 ou menor, conforme a documentação. Para evitar futuras incompatibilidades, recomenda-se impedir a atualização para versões superiores utilizando pip install "boto3<1.36.0".