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
-
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.
-
O erro está diretamente relacionado ao upload de arquivos?
- Sim, a falha ocorre ao chamar métodos de upload, como
upload_file
.
- Sim, a falha ocorre ao chamar métodos de upload, como
-
A falha afeta todas as versões do Boto3?
- Não, apenas versões 1.36.* apresentam esse problema.
-
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"
.