CCCPaste

teste bucket s3

import boto3
from botocore.exceptions import NoCredentialsError, ClientError

# === CONFIGURAÇÕES AWS ===
AWS_ACCESS_KEY = "SEU_ACCESS_KEY"
AWS_SECRET_KEY = "SEU_SECRET_KEY"
AWS_REGION = "us-east-1"

# === CONFIGURAÇÕES DO ARQUIVO E BUCKET ===
BUCKET_NAME = "meu-bucket-privado"
ARQUIVO_LOCAL = "exemplo.txt"           # arquivo local a ser enviado
ARQUIVO_NO_S3 = "uploads/exemplo.txt"   # caminho do arquivo dentro do bucket

# === INICIALIZA CLIENTE S3 ===
s3 = boto3.client(
    's3',
    aws_access_key_id=AWS_ACCESS_KEY,
    aws_secret_access_key=AWS_SECRET_KEY,
    region_name=AWS_REGION
)

def criar_bucket():
    """Cria o bucket se não existir"""
    try:
        # Verifica se o bucket já existe
        s3.head_bucket(Bucket=BUCKET_NAME)
        print(f"ℹ️ Bucket '{BUCKET_NAME}' já existe.")
    except ClientError as e:
        # Se não existir, cria o bucket privado
        if e.response['Error']['Code'] == '404':
            print(f"🪣 Criando bucket '{BUCKET_NAME}'...")
            s3.create_bucket(
                Bucket=BUCKET_NAME,
                CreateBucketConfiguration={'LocationConstraint': AWS_REGION}
            )
            print(f"✅ Bucket '{BUCKET_NAME}' criado com sucesso.")
        else:
            print(f"❌ Erro ao verificar/criar bucket: {e}")

def upload_arquivo():
    """Faz upload de um arquivo local para o S3"""
    try:
        s3.upload_file(ARQUIVO_LOCAL, BUCKET_NAME, ARQUIVO_NO_S3)
        print(f"✅ Upload concluído: {ARQUIVO_LOCAL} → s3://{BUCKET_NAME}/{ARQUIVO_NO_S3}")
    except FileNotFoundError:
        print("❌ Arquivo local não encontrado.")
    except NoCredentialsError:
        print("❌ Credenciais AWS inválidas.")
    except ClientError as e:
        print(f"❌ Erro no upload: {e}")

def download_arquivo():
    """Baixa um arquivo do S3"""
    destino = "baixado_" + ARQUIVO_LOCAL
    try:
        s3.download_file(BUCKET_NAME, ARQUIVO_NO_S3, destino)
        print(f"✅ Download concluído: s3://{BUCKET_NAME}/{ARQUIVO_NO_S3} → {destino}")
    except ClientError as e:
        if e.response['Error']['Code'] == "404":
            print("❌ Arquivo não encontrado no bucket.")
        else:
            print(f"❌ Erro no download: {e}")

def gerar_url_temporaria():
    """Gera uma URL temporária para download (válida por 1h)"""
    try:
        url = s3.generate_presigned_url(
            'get_object',
            Params={'Bucket': BUCKET_NAME, 'Key': ARQUIVO_NO_S3},
            ExpiresIn=3600
        )
        print(f"🔗 URL temporária (1h): {url}")
    except Exception as e:
        print(f"❌ Erro ao gerar URL temporária: {e}")

if __name__ == "__main__":
    criar_bucket()
    upload_arquivo()
    download_arquivo()
    gerar_url_temporaria()