S3 features pra dev: presigned URLs, multipart e events
- ⬜🗃️ DynamoDB pra dev: partition key, GSI e Streams(AWS Developer Associate (DVA-C02))
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Presigned URL upload
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
const s3 = new S3Client({ region: 'us-east-1' });
// Server: gera URL
export async function uploadUrl(key: string) {
const cmd = new PutObjectCommand({
Bucket: 'uploads',
Key: key,
ContentType: 'image/jpeg',
});
return getSignedUrl(s3, cmd, { expiresIn: 600 }); // 10min
}
// Client: usa URL
await fetch(url, {
method: 'PUT',
body: file,
headers: { 'Content-Type': 'image/jpeg' },
});- → 1. pede permissão
- → 2. gera URL assinada
- → 3. devolve a URL
- → 4. PUT direto no S3
- → 5. dispara evento
- → 6. processa
- Fora da AWS
- Rede e entrega
- Compute
- Armazenamento
- Integração de apps
Seis passos, e o essencial é o quarto: o arquivo vai do cliente direto ao S3. Qualquer alternativa em que o upload atravessa a Lambda esbarra no limite de payload e paga o tráfego duas vezes.
- O cliente pede permissão, não envia o arquivo. A primeira chamada só solicita autorização. Nenhum byte do arquivo passa pelo API Gateway — o que evita o limite de payload de 10 MB e o custo de trafegar o arquivo duas vezes.
- A Lambda assina com a permissão DELA. A URL assinada carrega a autoridade da role da função, com validade curta e escopo de uma operação num objeto. O cliente nunca recebe credencial da AWS.
- O upload vai direto ao S3. PUT do navegador para o bucket. Escala sem sobrecarregar seu backend, e arquivo de gigabytes deixa de ser problema — com multipart, para os muito grandes.
- O bucket continua privado. Não há acesso público em momento nenhum. É por isso que este padrão é a resposta certa em vez de "torne o bucket público para o cliente enviar".
- O evento fecha o ciclo. ObjectCreated dispara o processamento assíncrono: thumbnail, verificação, indexação. O cliente não espera por isso — ele já recebeu o 200 do S3.
Onde isso entra no exame
Espere questões sobre presigned URL — quem assina define a permissão, e o link não pode conceder mais do que o signatário tem —, multipart obrigatório acima de 5 GB, e qual classe de armazenamento atende ao requisito descrito. Consistência forte de leitura-após-escrita é padrão desde 2020: descarte alternativas que falem em "eventual".
Um app móvel precisa enviar vídeos de até 4 GB. O backend é uma Lambda atrás do API Gateway. Qual arquitetura?
Durabilidade + features
- Versioning: mantém versions antigas, protege de delete acidental.
- Object Lock: WORM (write once read many), compliance (SEC, HIPAA).
- Lifecycle rules: move pra IA/Glacier após N dias, delete após M.
- Cross-Region Replication: async replication pra DR.
- Transfer Acceleration: upload via CloudFront edge (rápido pra remote clients).
- Encryption: SSE-S3 (AWS-managed), SSE-KMS (sua CMK), SSE-C (cliente fornece chave).
S3 é o objeto storage mais usado do mundo por um motivo: barato, durável (11 noves), event-driven nativo. Domine que resolve ~30% de problemas de arquitetura serverless.
Perguntas frequentes
❓ Para que serve uma URL assinada?
❓ Quando usar envio em várias partes?
❓ Como reagir a um arquivo novo no armazenamento?
Fixando
Um presigned URL de download foi gerado com validade de 1 hora. O usuário compartilhou o link. O que acontece?
Qual evento do S3 dispara processamento assíncrono após um upload concluído?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…