Introducao ao AWS S3 - Fundamentos de armazenamento em nuvem

Iniciante | 50 min leitura | 2024.12.20

Documentação Oficial

O que voce vai aprender neste tutorial

  • Conceitos basicos do S3 (bucket, objeto, regiao)
  • Criacao e gerenciamento de buckets
  • Upload e download de objetos
  • Controle de acesso (IAM, politicas de bucket)
  • Hospedagem de sites estaticos
  • Operacoes com AWS CLI/SDK

O que e Amazon S3

Amazon S3 (Simple Storage Service) e um servico de armazenamento de objetos fornecido pela AWS. Possui durabilidade de 99.999999999% (onze noves) e pode armazenar com seguranca qualquer tipo de dado como imagens, videos, backups, etc.

Caracteristicas do S3

CaracteristicaDescricao
EscalabilidadeCapacidade ilimitada com escalonamento automatico
DurabilidadeAlta durabilidade de 99.999999999%
Disponibilidade99.99% de disponibilidade (classe Standard)
Custo-beneficioPagamento por uso
SegurancaCriptografia e controle de acesso completos

Pre-requisitos

  • Conta AWS
  • AWS CLI instalado

Step 1: Configuracao do AWS CLI

Primeiro, instale o AWS CLI e configure as credenciais.

# Instalacao do AWS CLI (macOS)
brew install awscli

# Instalacao do AWS CLI (Linux)
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

# Verificar instalacao
aws --version
# aws-cli/2.x.x Python/3.x.x ...

Configure as credenciais. Gere uma chave de acesso no console do IAM.

# Configuracao de credenciais
aws configure
# AWS Access Key ID: YOUR_ACCESS_KEY
# AWS Secret Access Key: YOUR_SECRET_KEY
# Default region name: ap-northeast-1
# Default output format: json

# Verificar configuracao
aws sts get-caller-identity
# {
#     "UserId": "AIDAXXXXXXXXXXXXXXXXX",
#     "Account": "123456789012",
#     "Arn": "arn:aws:iam::123456789012:user/your-user"
# }

Step 2: Criacao de bucket

O nome do bucket S3 deve ser globalmente unico.

# Criar bucket (regiao de Toquio)
aws s3 mb s3://my-tutorial-bucket-2024 --region ap-northeast-1

# Verificar lista de buckets
aws s3 ls
# 2024-12-20 10:00:00 my-tutorial-bucket-2024

Regras de nomenclatura de bucket

  • 3 a 63 caracteres
  • Apenas letras minusculas, numeros e hifens
  • Inicio e fim com caractere alfanumerico
  • Hifens consecutivos nao permitidos
  • Formato de endereco IP nao permitido
# Verificar detalhes do bucket especificando a regiao
aws s3api get-bucket-location --bucket my-tutorial-bucket-2024
# {
#     "LocationConstraint": "ap-northeast-1"
# }

Step 3: Operacoes com objetos

Upload

# Upload de arquivo unico
aws s3 cp local-file.txt s3://my-tutorial-bucket-2024/

# Upload para caminho especifico (prefixo)
aws s3 cp local-file.txt s3://my-tutorial-bucket-2024/documents/

# Upload de diretorio (recursivo)
aws s3 cp ./local-folder s3://my-tutorial-bucket-2024/folder/ --recursive

# Verificar upload
aws s3 ls s3://my-tutorial-bucket-2024/
# 2024-12-20 10:05:00       1234 local-file.txt

Download

# Download de arquivo unico
aws s3 cp s3://my-tutorial-bucket-2024/file.txt ./downloaded-file.txt

# Download de diretorio
aws s3 cp s3://my-tutorial-bucket-2024/folder/ ./local-folder/ --recursive

Sincronizacao (sync)

O comando sync transfere apenas as diferencas, sendo eficiente.

# Sincronizacao Local → S3
aws s3 sync ./local-folder s3://my-tutorial-bucket-2024/folder/

# Sincronizacao S3 → Local
aws s3 sync s3://my-tutorial-bucket-2024/folder/ ./local-folder/

# Refletir arquivos excluidos (opcao --delete)
aws s3 sync ./local-folder s3://my-tutorial-bucket-2024/folder/ --delete

# Excluir arquivos especificos
aws s3 sync ./local-folder s3://my-tutorial-bucket-2024/folder/ \
  --exclude "*.log" \
  --exclude ".git/*"

Exclusao

# Excluir objeto unico
aws s3 rm s3://my-tutorial-bucket-2024/file.txt

# Excluir todos sob um prefixo (recursivo)
aws s3 rm s3://my-tutorial-bucket-2024/folder/ --recursive

# Excluir tudo dentro do bucket
aws s3 rm s3://my-tutorial-bucket-2024 --recursive

# Excluir o bucket (deve estar vazio)
aws s3 rb s3://my-tutorial-bucket-2024

# Excluir bucket forcadamente (incluindo conteudo)
aws s3 rb s3://my-tutorial-bucket-2024 --force

Step 4: Controle de acesso

Existem varios metodos de controle de acesso no S3.

Politica de bucket

A politica de bucket define permissoes de acesso em formato JSON.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket/public/*"
        }
    ]
}
# Aplicar politica de bucket
aws s3api put-bucket-policy \
  --bucket my-tutorial-bucket-2024 \
  --policy file://bucket-policy.json

# Verificar politica de bucket
aws s3api get-bucket-policy --bucket my-tutorial-bucket-2024

# Excluir politica de bucket
aws s3api delete-bucket-policy --bucket my-tutorial-bucket-2024

Bloqueio de acesso publico

Por seguranca, o acesso publico e bloqueado por padrao.

# Verificar configuracao de bloqueio de acesso publico
aws s3api get-public-access-block --bucket my-tutorial-bucket-2024

# Configurar bloqueio de acesso publico
aws s3api put-public-access-block \
  --bucket my-tutorial-bucket-2024 \
  --public-access-block-configuration \
  "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"

URL pre-assinada (Presigned URL)

Voce pode gerar uma URL que permite acesso temporario a um objeto.

# Gerar URL pre-assinada valida por 1 hora (para download)
aws s3 presign s3://my-tutorial-bucket-2024/private-file.txt --expires-in 3600

# Exemplo de saida:
# https://my-tutorial-bucket-2024.s3.amazonaws.com/private-file.txt?...

Step 5: Hospedagem de site estatico

Voce pode hospedar arquivos estaticos como HTML no S3.

# Habilitar hospedagem de site estatico
aws s3 website s3://my-website-bucket \
  --index-document index.html \
  --error-document error.html

Exemplo de index.html

<!DOCTYPE html>
<html lang="pt-BR">
<head>
  <meta charset="UTF-8">
  <title>Hospedagem Estatica S3</title>
</head>
<body>
  <h1>Hello from S3!</h1>
  <p>Esta pagina esta hospedada no Amazon S3.</p>
</body>
</html>
# Upload de arquivos
aws s3 cp index.html s3://my-website-bucket/
aws s3 cp error.html s3://my-website-bucket/

# Especificar Content-Type explicitamente
aws s3 cp index.html s3://my-website-bucket/ --content-type "text/html"

Configure a politica de bucket para publicacao.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-website-bucket/*"
        }
    ]
}

Endpoint do site: http://my-website-bucket.s3-website-ap-northeast-1.amazonaws.com

Step 6: Operacoes com SDK (JavaScript)

Exemplo de operacao do S3 a partir do Node.js.

# Instalacao do AWS SDK v3
npm install @aws-sdk/client-s3
// s3-example.js
import {
  S3Client,
  PutObjectCommand,
  GetObjectCommand,
  ListObjectsV2Command
} from '@aws-sdk/client-s3';

// Inicializacao do cliente S3
const s3Client = new S3Client({ region: 'ap-northeast-1' });

// Upload de objeto
async function uploadFile(bucket, key, body) {
  const command = new PutObjectCommand({
    Bucket: bucket,
    Key: key,
    Body: body,
    ContentType: 'text/plain',
  });

  const response = await s3Client.send(command);
  console.log('Upload successful:', response);
  return response;
}

// Obter objeto
async function getFile(bucket, key) {
  const command = new GetObjectCommand({
    Bucket: bucket,
    Key: key,
  });

  const response = await s3Client.send(command);
  // Converter stream para string
  const body = await response.Body.transformToString();
  return body;
}

// Listar objetos
async function listFiles(bucket, prefix = '') {
  const command = new ListObjectsV2Command({
    Bucket: bucket,
    Prefix: prefix,
  });

  const response = await s3Client.send(command);
  return response.Contents || [];
}

// Exemplo de execucao
const bucket = 'my-tutorial-bucket-2024';

await uploadFile(bucket, 'test.txt', 'Hello, S3!');
const content = await getFile(bucket, 'test.txt');
console.log('Content:', content);

const files = await listFiles(bucket);
files.forEach(file => console.log(file.Key, file.Size));

Classes de armazenamento

Voce pode escolher a classe de armazenamento apropriada de acordo com o uso.

ClasseUsoTempo de recuperacao
StandardDados acessados frequentementeImediato
Intelligent-TieringPadrao de acesso desconhecidoImediato
Standard-IAAcesso infrequenteImediato
Glacier InstantArquivo (recuperacao imediata)Imediato
Glacier FlexibleArquivoMinutos a horas
Glacier Deep ArchiveArquivo de longo prazo12 horas
# Upload especificando classe de armazenamento
aws s3 cp file.txt s3://my-bucket/ --storage-class STANDARD_IA

Resumo

AWS S3 e um armazenamento de objetos escalavel e de alta durabilidade. Pontos principais:

  • Bucket: Container que armazena dados (nome globalmente unico)
  • Objeto: Combinacao de arquivo e metadados
  • Controle de acesso: Configuracao detalhada com IAM, politicas de bucket, ACL
  • Hospedagem estatica: Publicacao simples de sites
  • Classes de armazenamento: Escolha o equilibrio entre custo e tempo de recuperacao
← Voltar para a lista