Skip to content

Roteiro Básico: Criação de Bucket S3 na AWS e Envio de Fotos

1. Criar um Bucket S3

  1. Acesse o AWS Management Console.
  2. Procure por S3 e clique em Create bucket.
  3. Defina um nome único para o bucket e selecione a região desejada.
  4. Mantenha as configurações padrão ou ajuste conforme necessário.
  5. Clique em Create bucket.

2. Configurar Permissões (opcional)

  • Para acesso público, ajuste as permissões em Permissions > Bucket Policy.
  • Para acesso privado, mantenha as configurações padrão.

No acesso público, você pode configurar o bucket para permitir que qualquer pessoa visualize ou baixe os arquivos armazenados nele. Isso é útil para compartilhar fotos ou outros arquivos com um grande público sem a necessidade de autenticação. No entanto, é importante ter cuidado ao configurar o acesso público, pois isso pode expor seus dados a riscos de segurança. Certifique-se de revisar as permissões e considerar o uso de políticas de bucket para restringir o acesso apenas aos arquivos necessários.

No acesso privado, o bucket é configurado para que apenas usuários autenticados com as permissões adequadas possam acessar os arquivos armazenados nele. Isso é ideal para proteger dados sensíveis ou privados, garantindo que apenas pessoas autorizadas possam visualizar ou baixar os arquivos. Com o acesso privado, você pode controlar quem tem acesso ao seu conteúdo e manter a segurança dos seus dados na AWS.

3. Enviar Fotos pelo Console

  1. Acesse o bucket criado.
  2. Clique em Upload.
  3. Selecione as fotos desejadas e clique em Upload.

4. Enviar Fotos via AWS CLI

Como instalar o aws cli? Para instalar o AWS CLI, siga as instruções abaixo:
  • Windows: Baixe o instalador MSI do AWS CLI aqui e execute-o.
  • macOS: Use o Homebrew para instalar o AWS CLI:

brew install awscli
- Linux: Use o comando curl para baixar e instalar o AWS CLI:

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip  
sudo ./aws/install

Como logar no aws cli? Para configurar o AWS CLI, siga os passos abaixo:

  1. Configure suas credenciais AWS:

    aws configure
    

  2. Insira as informações solicitadas:

  3. AWS Access Key ID: Sua chave de acesso (obtida no IAM)
  4. AWS Secret Access Key: Sua chave secreta (obtida no IAM)
  5. Default region name: Região padrão (ex: us-east-1, sa-east-1)
  6. Default output format: Formato de saída (json, text, table)

  7. Verificar a configuração:

    aws sts get-caller-identity
    

  8. Configuração alternativa usando perfis:

    aws configure --profile nome-do-perfil
    

  9. Usar um perfil específico:

    aws s3 ls --profile nome-do-perfil
    

Importante: Para obter suas credenciais, acesse o AWS IAM Console, crie um usuário com as permissões necessárias e gere as chaves de acesso.### Como logar no aws cli? Para configurar o AWS CLI, siga os passos abaixo:

  1. Envie uma foto:
        aws s3 cp caminho/da/foto.jpg s3://nome-do-bucket/
    

5. Enviar Fotos via Código Python (boto3)

  • Passo 1: Instalar o boto3 (execute no terminal) ````sh

pip install boto3

```

  • Passo 2: Importar as bibliotecas necessárias

python import boto3 from botocore.exceptions import NoCredentialsError, ClientError import os - Passo 3: Configurar o cliente S3

```python

Certifique-se de que suas credenciais AWS estão configuradas (aws configure)

s3_client = boto3.client('s3') ```

  • Passo 4: Definir as variáveis do bucket e arquivo

python bucket_name = 'nome-do-seu-bucket' # Substitua pelo nome do seu bucket local_file_path = 'caminho/para/sua/foto.jpg' # Caminho local da foto s3_file_name = 'fotos/minha-foto.jpg' # Nome que o arquivo terá no S3

  • Passo 5: Função para verificar se o arquivo existe localmente

`python def verificar_arquivo_existe(caminho_arquivo): if not os.path.exists(caminho_arquivo): print(f"Erro: O arquivo {caminho_arquivo} não foi encontrado.") return False return True

  • Passo 6: Função para fazer upload da foto

```python def enviar_foto_s3(arquivo_local, bucket, nome_s3): try: # Verificar se o arquivo existe if not verificar_arquivo_existe(arquivo_local): return False

    # Fazer upload do arquivo
    s3_client.upload_file(arquivo_local, bucket, nome_s3)
    print(f"Sucesso: {arquivo_local} foi enviado para s3://{bucket}/{nome_s3}")
    return True

except FileNotFoundError:
    print(f"Erro: O arquivo {arquivo_local} não foi encontrado.")
    return False
except NoCredentialsError:
    print("Erro: Credenciais AWS não encontradas. Execute 'aws configure' primeiro.")
    return False
except ClientError as e:
    print(f"Erro do cliente AWS: {e}")
    return False
except Exception as e:
    print(f"Erro inesperado: {e}")
    return False

Passo 7: Executar o upload

if name == "main": # Enviar uma única foto sucesso = enviar_foto_s3(local_file_path, bucket_name, s3_file_name)

# Passo 8: Exemplo para enviar múltiplas fotos
fotos_para_enviar = [
    {'local': 'foto1.jpg', 's3': 'fotos/foto1.jpg'},
    {'local': 'foto2.jpg', 's3': 'fotos/foto2.jpg'},
    {'local': 'foto3.jpg', 's3': 'fotos/foto3.jpg'}
]

for foto in fotos_para_enviar:
    enviar_foto_s3(foto['local'], bucket_name, foto['s3'])

Passo 9: Função adicional para listar arquivos no bucket

def listar_arquivos_bucket(bucket): try: response = s3_client.list_objects_v2(Bucket=bucket) if 'Contents' in response: print(f"Arquivos no bucket {bucket}:") for obj in response['Contents']: print(f" - {obj['Key']} (Tamanho: {obj['Size']} bytes)") else: print(f"O bucket {bucket} está vazio.") except ClientError as e: print(f"Erro ao listar arquivos: {e}")

Passo 10: Função para definir metadados da foto (opcional)

def enviar_foto_com_metadados(arquivo_local, bucket, nome_s3, metadados=None): try: extra_args = {} if metadados: extra_args['Metadata'] = metadados

    s3_client.upload_file(arquivo_local, bucket, nome_s3, ExtraArgs=extra_args)
    print(f"Foto enviada com metadados: {arquivo_local} -> s3://{bucket}/{nome_s3}")

except Exception as e:
    print(f"Erro ao enviar foto com metadados: {e}")

Exemplo de uso com metadados

metadados_exemplo = { 'photographer': 'João Silva', 'location': 'São Paulo', 'date': '2024-01-15' } ```

  • Enviar_foto_com_metadados('minha_foto.jpg', bucket_name, 'fotos/minha_foto.jpg', metadados_exemplo)

```python import boto3

s3 = boto3.client('s3') s3.upload_file('caminho/da/foto.jpg', 'nome-do-bucket', 'foto.jpg') ```

Dica: Nunca compartilhe suas credenciais AWS.