AWS Admin

S3 Avançado: Replication, Object Lock, Intelligent Tiering e S3 Select na Prática Já leu

S3 Replication: Garantindo Disponibilidade e Conformidade S3 Replication permite copiar objetos automaticamente entre buckets, em regiões iguais ou diferentes. Existem dois tipos: CRR (Cross-Region Replication) para disaster recovery e SRR (Same-Region Replication) para conformidade e processamento distribuído. A replicação opera em tempo real ou quase real, replicando apenas objetos novos ou modificados após a ativação da regra. Para configurar replication, você precisa criar uma regra de replicação que especifique o bucket de destino, a função IAM com permissões adequadas e filtros opcionais. Objetos deletados no bucket origem não são deletados automaticamente no destino, a menos que você configure Delete Marker Replication. Observe que versioning deve estar habilitado em ambos os buckets. Object Lock: Proteção Contra Exclusão Acidental Object Lock implementa modelo WORM (Write Once Read Many), impedindo que objetos sejam deletados ou modificados por um período definido. Existem dois modos: Governance (administradores podem contornar com permissão especial) e Compliance (impossível contornar mesmo com root access). É essencial para conformidade regulatória

S3 Replication: Garantindo Disponibilidade e Conformidade

S3 Replication permite copiar objetos automaticamente entre buckets, em regiões iguais ou diferentes. Existem dois tipos: CRR (Cross-Region Replication) para disaster recovery e SRR (Same-Region Replication) para conformidade e processamento distribuído. A replicação opera em tempo real ou quase real, replicando apenas objetos novos ou modificados após a ativação da regra.

Para configurar replication, você precisa criar uma regra de replicação que especifique o bucket de destino, a função IAM com permissões adequadas e filtros opcionais. Objetos deletados no bucket origem não são deletados automaticamente no destino, a menos que você configure Delete Marker Replication. Observe que versioning deve estar habilitado em ambos os buckets.

import boto3
from botocore.exceptions import ClientError

s3 = boto3.client('s3')

def enable_replication(source_bucket, dest_bucket, role_arn):
    replication_config = {
        'Role': role_arn,
        'Rules': [
            {
                'ID': 'ReplicateAll',
                'Status': 'Enabled',
                'Priority': 1,
                'Filter': {'Prefix': ''},
                'Destination': {
                    'Bucket': f'arn:aws:s3:::{dest_bucket}',
                    'ReplicationTime': {
                        'Status': 'Enabled',
                        'Time': {'Minutes': 15}
                    },
                    'Metrics': {
                        'Status': 'Enabled',
                        'EventThreshold': {'Minutes': 15}
                    }
                }
            }
        ]
    }

    try:
        s3.put_bucket_replication(
            Bucket=source_bucket,
            ReplicationConfiguration=replication_config
        )
        print(f"Replicação ativada: {source_bucket} → {dest_bucket}")
    except ClientError as e:
        print(f"Erro: {e}")

enable_replication('meu-bucket-origem', 'meu-bucket-destino', 'arn:aws:iam::123456789:role/s3-replication')

Object Lock: Proteção Contra Exclusão Acidental

Object Lock implementa modelo WORM (Write Once Read Many), impedindo que objetos sejam deletados ou modificados por um período definido. Existem dois modos: Governance (administradores podem contornar com permissão especial) e Compliance (impossível contornar mesmo com root access). É essencial para conformidade regulatória como HIPAA e FINRA.

A retenção é baseada em duas estratégias: retention period (tempo fixo) e legal hold (indefinido até liberação explícita). Um objeto pode ter ambas simultaneamente. Object Lock deve ser habilitado na criação do bucket e não pode ser desativado depois. Versioning é obrigatório quando Object Lock está ativo.

import boto3
from datetime import datetime, timedelta

s3 = boto3.client('s3')

def put_object_with_retention(bucket, key, file_path, days=30):
    retention_date = (datetime.utcnow() + timedelta(days=days)).isoformat() + 'Z'

    with open(file_path, 'rb') as f:
        s3.put_object(
            Bucket=bucket,
            Key=key,
            Body=f.read(),
            ObjectLockMode='COMPLIANCE',
            ObjectLockRetainUntilDate=retention_date,
            ObjectLockLegalHoldStatus='ON'
        )
    print(f"Objeto protegido até {retention_date} com legal hold ativo")

def list_object_retention(bucket, key):
    response = s3.get_object_retention(Bucket=bucket, Key=key)
    print(f"Modo: {response['Retention']['Mode']}")
    print(f"Até: {response['Retention']['RetainUntilDate']}")

put_object_with_retention('meu-bucket-lock', 'documento-compliance.pdf', '/caminho/local.pdf', days=7)
list_object_retention('meu-bucket-lock', 'documento-compliance.pdf')

Intelligent Tiering: Otimização Automática de Custos

Intelligent Tiering monitora padrões de acesso e move automaticamente objetos entre camadas de armazenamento sem overhead operacional. Começa na camada Frequent Access, migra para Infrequent Access após 30 dias de inatividade, Archive Access após 90 dias e Deep Archive após 180 dias. Você paga uma pequena taxa de monitoramento, mas economiza significativamente com objetos raramente acessados.

Configure Intelligent Tiering com days thresholds personalizados e automatic deletion para arquivos antigos. A transição é transparente e não requer intervenção manual. Ideal para buckets com padrões de acesso imprevisíveis ou que crescem continuamente, como logs de aplicação ou backups.

import boto3

s3 = boto3.client('s3')

def enable_intelligent_tiering(bucket):
    tiering_config = {
        'Id': 'AutoTieringPolicy',
        'Filter': {'Prefix': 'logs/'},
        'Status': 'Enabled',
        'Tierings': [
            {
                'Days': 30,
                'AccessTier': 'ARCHIVE_ACCESS'
            },
            {
                'Days': 90,
                'AccessTier': 'DEEP_ARCHIVE'
            }
        ]
    }

    s3.put_bucket_intelligent_tiering_configuration(
        Bucket=bucket,
        IntelligentTieringConfigurationId='AutoTieringPolicy',
        IntelligentTieringConfiguration=tiering_config
    )
    print(f"Intelligent Tiering configurado no bucket: {bucket}")

enable_intelligent_tiering('meu-bucket-dados')

S3 Select: Consultas SQL Eficientes em Objetos

S3 Select permite executar consultas SQL diretamente em arquivos armazenados no S3 (CSV, JSON, Parquet) sem precisar baixar o arquivo inteiro. Reduz latência, largura de banda e processamento, transferindo apenas os dados necessários. Ideal para analytics, processamento de logs e extração de subconjuntos de dados grandes.

Suporta sintaxe SQL padrão (SELECT, WHERE, JOIN entre objetos) e retorna resultados em JSON ou CSV. O custo é baseado em dados scaneados, não em dados retornados, então otimizar suas queries com WHERE clauses apropriadas é fundamental.

import boto3
import json

s3 = boto3.client('s3')

def query_s3_select(bucket, key, sql_query):
    response = s3.select_object_content(
        Bucket=bucket,
        Key=key,
        ExpressionType='SQL',
        Expression=sql_query,
        InputSerialization={
            'CSV': {
                'FileHeaderInfo': 'USE',
                'Comments': '#',
                'AllowQuotedRecordDelimiter': True
            }
        },
        OutputSerialization={'JSON': {}}
    )

    result = []
    for event in response['Payload']:
        if 'Records' in event:
            records = event['Records']['Payload'].decode('utf-8')
            result.append(records)

    return ''.join(result)

sql = "SELECT nome, valor FROM s3object WHERE valor > 100"
resultado = query_s3_select('meu-bucket', 'dados.csv', sql)
print(resultado)

Conclusão

Dominar esses quatro pilares transforma sua arquitetura S3. Replication garante alta disponibilidade e conformidade regulatória; Object Lock protege dados críticos contra modificação; Intelligent Tiering otimiza custos automaticamente sem gerenciamento manual; S3 Select acelera análises eliminando transferências desnecessárias. Combine essas técnicas conforme seu caso de uso: datasets críticos usam replication + object lock, big data usa intelligent tiering + select, compliance absoluto demanda object lock com deep archive.

Referências


Artigos relacionados