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
| Caracteristica | Descricao |
|---|---|
| Escalabilidade | Capacidade ilimitada com escalonamento automatico |
| Durabilidade | Alta durabilidade de 99.999999999% |
| Disponibilidade | 99.99% de disponibilidade (classe Standard) |
| Custo-beneficio | Pagamento por uso |
| Seguranca | Criptografia 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.
| Classe | Uso | Tempo de recuperacao |
|---|---|---|
| Standard | Dados acessados frequentemente | Imediato |
| Intelligent-Tiering | Padrao de acesso desconhecido | Imediato |
| Standard-IA | Acesso infrequente | Imediato |
| Glacier Instant | Arquivo (recuperacao imediata) | Imediato |
| Glacier Flexible | Arquivo | Minutos a horas |
| Glacier Deep Archive | Arquivo de longo prazo | 12 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
Links de referencia
- Documentacao oficial do Amazon S3
- Referencia de comandos S3 do AWS CLI
- AWS SDK for JavaScript v3
- Precos do S3