O boto3 é o SDK oficial da Amazon para trabalhar com S3 em Python. Ele permite gerenciar objetos no armazenamento: enviar e baixar arquivos, listar objetos, trabalhar com metadados, realizar uploads multipart e gerar URLs pré-assinadas.
Para instalar o boto3, use o pip:
pip install boto3
Após a instalação, a biblioteca estará pronta para uso no seu código Python.
Ao usar o boto3, as credenciais de acesso podem ser configuradas de várias formas.
Ao usar a AWS CLI, um diretório .aws com arquivos de configuração é criado automaticamente no diretório home do usuário. Se necessário, você pode criar esse diretório e os arquivos manualmente, sem instalar a AWS CLI.
O arquivo ~/.aws/credentials deve conter o seguinte:
[default]
aws_access_key_id = <ACCESS_KEY>
aws_secret_access_key = <SECRET_KEY>
E o ~/.aws/config:
[default]
output = json
endpoint_url = https://s3.hmstorage.net
region = us-2
Se você usar o perfil default, nenhuma configuração adicional é necessária no código; o boto3 carregará essas configurações automaticamente.
Você também pode fornecer as credenciais de acesso por meio de variáveis de ambiente:
export AWS_ACCESS_KEY_ID=<ACCESS_KEY>
export AWS_SECRET_ACCESS_KEY=<SECRET_KEY>
As credenciais podem ser passadas diretamente ao criar o cliente S3:
import boto3
s3 = boto3.client(
"s3",
aws_access_key_id="<ACCESS_KEY>",
aws_secret_access_key="<SECRET_KEY>",
endpoint_url="https://s3.hmstorage.net",
region_name="us-2"
)
Essa abordagem não é recomendada para produção, pois as chaves de acesso ficam armazenadas diretamente no código-fonte.
Se houver vários perfis configurados em ~/.aws/config e ~/.aws/credentials, você pode especificar explicitamente o perfil desejado ao criar uma sessão:
import boto3
session = boto3.Session(profile_name="myprofile")
s3 = session.client("s3")
Isso é útil quando a mesma base de código é usada para trabalhar com múltiplos buckets ou ambientes.
Abaixo está um exemplo que demonstra operações básicas com objetos usando o SDK. O script realiza as seguintes ações:
Antes de executar o script, crie um arquivo chamado example.txt no mesmo diretório do script.
Código de exemplo:
import boto3
import os
bucket_name = "bucket_name"
endpoint_url = "https://s3.hmstorage.net"
local_upload_path = "example.txt"
s3_key = "example.txt"
local_download_path = "downloaded_example.txt"
# Criar cliente S3
s3 = boto3.client("s3", endpoint_url=endpoint_url)
# 1. Enviar arquivo para o bucket
if os.path.exists(local_upload_path):
print(f"Uploading {local_upload_path} to the bucket...")
s3.upload_file(local_upload_path, bucket_name, s3_key)
print("Upload completed.")
else:
print(f"File {local_upload_path} not found. Skipping upload.")
# 2. Listar objetos no bucket
print("\nBucket contents:")
paginator = s3.get_paginator("list_objects_v2")
for page in paginator.paginate(Bucket=bucket_name):
for obj in page.get("Contents", []):
print(f"- {obj['Key']}")
# 3. Baixar arquivo do bucket
print(f"\nDownloading {s3_key} to {local_download_path}...")
s3.download_file(bucket_name, s3_key, local_download_path)
print("Download completed.")
# 4. Excluir arquivo do bucket
print(f"\nDeleting {s3_key} from the bucket...")
s3.delete_object(Bucket=bucket_name, Key=s3_key)
print("Deletion completed.")