Amazon SAA-C03: Analytics, Data Lake, ML e Cargas de Trabalho Especializadas — Guia de estudos

Faz parte do AWS SAA-C03 — Guia de estudos completo. Pratique com respostas verificadas no centro de exames da Amazon, ou faça testes cronometrados no ExamRoll.io.

Fundamentos de Data Lake: Lake Formation e o Glue Data Catalog

O ponto central para analytics na AWS é o AWS Glue Data Catalog — um metastore compatível com o Hive metastore que o Athena, Redshift Spectrum, EMR e Glue ETL consomem. Toda definição de tabela, partição, tipo de coluna e configuração de SerDe reside aqui, e todo mecanismo consumidor lê a partir dele. Se dois caminhos de ingestão (digamos, um crawler do Glue e uma instrução manual CREATE EXTERNAL TABLE) discordarem sobre o esquema do mesmo prefixo do S3, as consultas retornam silenciosamente resultados incorretos ou falham. O padrão correto é designar uma única autoridade por tabela: ou o crawler é o dono do esquema, ou seu job de ETL escreve via glueContext.write_dynamic_frame.from_catalog, mas nunca ambos sem uma estratégia de mesclagem. Quando o ETL em lote, a conversão para Parquet do Firehose e DDLs manuais escrevem na mesma tabela, o desvio de catálogo (catalog drift) é o assassino silencioso. Imponha um único dono por tabela, use o Glue Schema Registry para produtores de streaming e execute crawlers no modo LOG (não UPDATE_IN_DATABASE) em tabelas que pertencem a jobs de ETL para que eles exponham o desvio sem sobrescrever esquemas curados.

O AWS Lake Formation fica acima do Data Catalog e substitui o modelo de políticas de bucket IAM/S3 de granularidade grossa por uma camada de permissões no estilo de banco de dados. Em vez de conceder s3:GetObject em um prefixo, você executa GRANT SELECT ON customers.orders TO role/AnalystRole, e o Lake Formation fornece de forma transparente credenciais de curta duração quando o Athena ou o Redshift Spectrum acessam os objetos subjacentes. Seu valor real é a autorização de granularidade fina: filtragem em nível de coluna, segurança em nível de linha através de filtros de dados e controle de acesso baseado em tags (LF-Tags) que escalam para milhares de tabelas. Uma plataforma de varejo com PII (Informações de Identificação Pessoal) em uma tabela customers pode conceder aos analistas acesso a customer_id, region, signup_date enquanto bloqueia email e ssn — aplicado em tempo de consulta, sem a necessidade de proliferação de views.

A configuração canônica para um data lake governado:

1. Register S3 locations with Lake Formation (removes IAMAllowedPrincipals default).
2. Create databases and let Glue crawlers populate tables.
3. Define LF-Tags (e.g., Classification=PII, Domain=Sales).
4. Grant tag-based permissions to IAM principals.
5. Point Athena/Redshift/QuickSight at the catalog — permissions flow through.

Os blueprints do Lake Formation são templates de workflow pré-construídos que conectam crawlers, jobs e triggers para ingerir dados de fontes JDBC ou do S3 para um data lake curado — reduzindo o que seriam dezenas de recursos do Glue configurados manualmente a um fluxo guiado por um assistente (wizard).

Um erro frequente é tentar aplicar restrições em nível de coluna apenas no QuickSight. O QuickSight possui segurança em nível de linha e coluna vinculada a datasets, mas protege apenas a superfície do QuickSight — qualquer pessoa com acesso direto ao Athena ou S3 contorna essa proteção. O controle em nível de coluna deve ser aplicado na camada de dados (permissões do Lake Formation ou separando fisicamente as colunas durante o ETL), e o QuickSight herda essa postura através de sua IAM role.

Athena: SQL Serverless Sobre o S3

O Athena é um mecanismo Presto/Trino serverless e com pagamento por consulta que lê diretamente do Amazon S3. Sem cluster para provisionar, sem etapa de ETL necessária antes de consultar e sem custo quando ocioso — você paga apenas pelos bytes escaneados (normalmente $5/TB). Isso torna o Athena a escolha canônica para análise ad-hoc de arquivos que já estão no S3, sejam logs de aplicação em JSON, exportações em CSV ou tabelas de fatos em Parquet. O Athena precisa de um esquema e de um layout de partição, que residem no Glue Data Catalog.

Como o Athena cobra por terabyte escaneado, o formato de armazenamento tem um impacto desproporcional no custo e na latência. As duas alavancas são o formato e o particionamento:

Converter JSON ou CSV brutos em Parquet particionado e com compressão Snappy é quase sempre a primeira alavanca de custo a ser acionada. Combinado com o pushdown de LIMIT, o Athena atende à maioria das necessidades de análise no S3 com zero infraestrutura.

Um padrão de custo-benefício para uma tabela de “leituras” armazenada como Parquet particionado:

CREATE EXTERNAL TABLE readings (
  station_id string,
  reading_ts timestamp,
  temp_c    double
)
PARTITIONED BY (dt string)
STORED AS PARQUET
LOCATION 's3://weather-lake/readings/'
TBLPROPERTIES ('has_encrypted_data'='true');

SELECT station_id, AVG(temp_c) OVER (
         PARTITION BY station_id
         ORDER BY reading_ts
         ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_avg
FROM readings
WHERE dt = '2024-03-11';

Pular o crawler é um erro comum. Sem uma entrada no catálogo, ou você escreve DDLs CREATE EXTERNAL TABLE manuais (frágeis à medida que os esquemas evoluem) ou usa soluções improvisadas de schema-on-read que escaneiam todos os arquivos. Pior, sem MSCK REPAIR TABLE ou projeção de partição, o Athena escaneia o prefixo inteiro em cada consulta. Os crawlers do Glue detectam novas partições de forma agendada e atualizam o catálogo atomicamente.

Athena em dados criptografados no S3. O Athena suporta SSE-S3, SSE-KMS e CSE-KMS, mas apenas se o chamador tiver as permissões corretas do KMS e o workgroup ou o cliente estiver configurado para o modo de criptografia em uso. Para CSE-KMS, o arquivo é criptografado no lado do cliente antes do upload; o principal do IAM que executa a consulta precisa de kms:Decrypt e kms:GenerateDataKey na CMK, e a política da chave deve corresponder. Um modo de falha comum: carregar Parquet com CSE-KMS, conceder à role do Athena apenas permissões de leitura do S3 e, em seguida, receber erros opacos como AccessDenied ou HIVE_CANNOT_OPEN_SPLIT — o objeto é legível, mas o texto cifrado não pode ser desembrulhado. Outro erro frequente é registrar a tabela com o modo de criptografia errado (SSE-KMS nas propriedades da tabela quando os objetos foram escritos com CSE-KMS); o Athena tenta a descriptografia no lado do servidor durante o GetObject e a carga útil (payload) retorna como texto cifrado bruto que falha nas verificações de número mágico (magic-number) do Parquet.

As consultas federadas do Athena permitem unir dados do S3 com armazenamentos operacionais (DynamoDB, RDS) sem mover os dados. Reserve o Athena para análises ad-hoc orientadas à leitura; use jobs do Glue para a modelagem agendada de zonas curadas.

Glue Crawlers, ETL Jobs e Job Bookmarks

Os crawlers do Glue varrem caminhos do S3, inferem o esquema (incluindo chaves de partição da estrutura de diretórios, como year=2024/month=01/) e registram ou atualizam tabelas no catálogo. Eles são a resposta low-code para o problema “colocamos arquivos no S3, torne-os consultáveis”. Agende um crawler para rodar de hora em hora em um bucket de recebimento (landing bucket) e o Athena verá imediatamente as novas partições.

aws glue create-crawler \
  --name logs-crawler \
  --role AWSGlueServiceRole-Logs \
  --database-name analytics_db \
  --targets '{"S3Targets":[{"Path":"s3://acme-logs/app/"}]}' \
  --schedule "cron(0 * * * ? *)"

Os jobs de ETL do Glue (Spark, Python shell ou Ray) cuidam da parte de transformação. O Glue é serverless — você paga por DPU-hora com um mínimo de um minuto — e o tempo de execução escala os workers automaticamente. O padrão dominante é a entrada de CSV/JSON e a saída de Parquet particionado:

import sys
from awsglue.context import GlueContext
from pyspark.context import SparkContext

glueContext = GlueContext(SparkContext.getOrCreate())
df = glueContext.create_dynamic_frame.from_catalog(
    database="raw", table_name="reports_csv")
glueContext.write_dynamic_frame.from_options(
    frame=df,
    connection_type="s3",
    connection_options={"path": "s3://curated/reports/",
                        "partitionKeys": ["report_date"]},
    format="parquet",
    format_options={"compression": "snappy"})

A característica operacional crítica é o job bookmark: o Glue persiste o estado sobre quais arquivos ou partições ele já processou, para que as execuções subsequentes leiam apenas os dados novos. Esquecer de habilitar os bookmarks significa que cada execução reprocessará todo o conjunto de dados desde o início, inflando o custo e o tempo de execução linearmente e, muitas vezes, produzindo saídas duplicadas. Os bookmarks são habilitados por job e devem ser combinados com opções de origem que os suportem (fontes S3 através do leitor Glue DynamicFrame suportam; leituras Spark arbitrárias não). Os bookmarks exigem um argumento transformation_ctx em cada fonte e o uso de job.init(...) / job.commit() para delimitar o processo:

job = Job(glueContext)
job.init(args['JOB_NAME'], args)   # bookmark state loaded

datasource = glueContext.create_dynamic_frame.from_catalog(
    database="analytics_db",
    table_name="app_logs",
    transformation_ctx="datasource"   # required for bookmarking
)
# ... transforms ...
job.commit()                          # bookmark state persisted

Para conversão de formato pura, sem lógica, a opção de menor esforço geralmente é um crawler do Glue nos dados brutos mais um job do Glue criado no editor visual (ou uma receita do DataBrew) — nenhum código Spark é necessário. Clusters EMR personalizados ou conversores Lambda adicionam uma sobrecarga operacional que o modelo serverless do Glue elimina.

Um job diário típico que organiza dados do S3 e carrega no Redshift Serverless:

# Glue 4.0 PySpark: S3 raw -> curated -> Redshift Serverless
df = glueContext.create_dynamic_frame.from_catalog(
        database="raw", table_name="orders").toDF()
df = df.filter("order_status <> 'CANCELLED'") \
       .withColumn("order_date", to_date("order_ts"))

glueContext.write_dynamic_frame.from_jdbc_conf(
    frame       = DynamicFrame.fromDF(df, glueContext, "out"),
    catalog_connection = "redshift-serverless-conn",
    connection_options = {"dbtable": "fact_orders", "database": "analytics"},
    redshift_tmp_dir   = "s3://stg/redshift-tmp/")

Glue Security Configurations e ETL Multi-Tenant

Crawlers e jobs do Glue precisam da mesma consciência sobre criptografia que o Athena. As security configurations (configurações de segurança) do Glue são pacotes nomeados que especificam como os alvos do S3, os logs do CloudWatch e os job bookmarks são criptografados — incluindo CSE-KMS com uma CMK específica. Um job associado a uma security configuration descriptografa de forma transparente a entrada CSE-KMS e criptografa as saídas da mesma maneira, desde que a IAM role do job tenha permissões no KMS para as chaves referenciadas.

Para ETL multi-tenant — uma plataforma SaaS processando os dados de cada cliente com a CMK daquele cliente — o padrão correto é uma security configuration por cliente (ou um parâmetro de job selecionando a CMK) mais uma IAM role com escopo para aquela CMK. Processar todos os clientes através de um único job com uma única chave compartilhada anula a garantia de isolamento que o CSE-KMS se destina a fornecer.

Uma disciplina relacionada: tabelas analíticas de produção não devem ser o alvo direto de jobs ou notebooks exploratórios do Glue. Exporte um snapshot para um prefixo “analytics” no S3 e aponte o Athena ou o Spark para a cópia. Executar transformações experimentais na tabela ativa arrisca reescritas em nível de partição, corrupção de bookmarks e contenção de locks, além de borrar a fronteira de auditoria entre dados operacionais e derivados analíticos.

AWS Glue DataBrew

O DataBrew é o irmão low-code do Glue para usuários que não podem ou não devem escrever código Spark. Ele oferece uma interface no estilo de planilha com mais de 250 transformações pré-construídas (imputação, mascaramento de PII, agrupamento de outliers, parsing de datas). Seus diferenciais são as shared recipes (receitas compartilhadas) — artefatos JSON versionados que você pode publicar e reaplicar em vários projetos — e a data lineage visualization (visualização de linhagem de dados) que rastreia colunas desde os conjuntos de dados de origem, através de receitas e jobs, até os locais de saída. Escolha o DataBrew quando os analistas são donos da lógica de transformação; escolha o Glue Studio/scripts quando os engenheiros são os donos e o pipeline precisa de código personalizado, streaming ou joins complexos.

Amazon EMR: Batch Distribuído e Runtime Roles

O Amazon EMR é uma plataforma de cluster gerenciado que executa Spark, Hadoop, Hive, Presto, HBase e Flink. Seu ponto ideal (sweet spot) são cargas de trabalho em lote (batch) ou interativas, grandes e paralelizáveis, que leem conjuntos de dados em escala de petabytes no S3 e os unem a outro sistema de registro (frequentemente o Redshift) para enriquecimento. O EMR pode executar clusters transientes (iniciar, executar, terminar) ou de longa duração, e pode misturar instâncias On-Demand, Spot e Reserved por meio de instance fleets.

Um padrão canônico: um job Spark lê Parquet do S3, busca tabelas de dimensão do Redshift via UNLOAD-para-S3, une-as através dos executores e escreve a saída enriquecida de volta para o S3:

# Spark on EMR: enrich S3 events with Redshift dimensions
df_events = spark.read.parquet("s3://raw/events/dt=2024-11-01/")
df_dims = (spark.read
    .format("io.github.spark_redshift_community.spark.redshift")
    .option("url", "jdbc:redshift://cluster:5439/analytics")
    .option("dbtable", "public.customer_dim")
    .option("tempdir", "s3://staging/redshift-unload/")
    .load())

enriched = df_events.join(df_dims, "customer_id", "left")
enriched.write.mode("overwrite").partitionBy("region").parquet("s3://curated/events/")

O EMR se destaca aqui porque o Spark distribui o join por dezenas de nós, e o staging via S3 evita um gargalo single-threaded do JDBC. A armadilha é recorrer reflexivamente ao EMR sempre que dados no S3 precisam ser consultados. Para SQL ad-hoc em dezenas ou centenas de gigabytes, provisionar e ajustar um cluster Spark é pura sobrecarga operacional — dimensionamento do cluster, configuração do YARN, autoscaling, rotação de logs, aplicação de patches. O EMR só vale a pena quando o volume, o código personalizado ou a flexibilidade do motor de execução o justificam.

EMR runtime roles. Historicamente, todos os steps em um cluster herdavam o EC2 instance profile — uma única role associada aos nós subjacentes — o que significava que cada equipe compartilhando um cluster tinha a união de todas as permissões que qualquer equipe precisava. As runtime roles resolvem isso: quando um usuário submete um step, ele passa --execution-role-arn, e o EMR assume essa role durante a execução do step. A Equipe A pode ser restrita a s3://team-a/*, e a Equipe B a s3://team-b/*. O instance profile se torna uma role de bootstrap mínima que apenas busca os artefatos do cluster.

As runtime roles também são o mecanismo para bloquear o acesso ao IMDS. Quando habilitado (EMR 6.7+ com Spark/Hive no YARN), o código do usuário não consegue alcançar o serviço de metadados da instância — incluindo o IMDSv2 — porque a plataforma intercepta essas chamadas. Isso fecha o caminho de escalonamento de privilégios onde um job poderia, de outra forma, chamar http://169.254.169.254/latest/api/token e assumir o poderoso EC2 instance profile.

aws emr create-cluster \
  --release-label emr-6.15.0 \
  --applications Name=Spark Name=Hive \
  --security-configuration team-isolation-sc \
  --service-role EMR_DefaultRole \
  --ec2-attributes InstanceProfile=EMR_EC2_MinimalRole,...

aws emr add-steps --cluster-id j-XXXX \
  --steps Type=Spark,Name="TeamA-ETL",\
ActionOnFailure=CONTINUE,\
Jar=command-runner.jar,\
Args=[spark-submit,s3://team-a/jobs/etl.py] \
  --execution-role-arn arn:aws:iam::111122223333:role/TeamA-EMRRuntime

A security configuration é o que habilita a imposição da runtime role e o bloqueio do IMDS. Sem ela, assumir que as cargas de trabalho do EMR “usam automaticamente roles de privilégio mínimo” está errado — por padrão, elas compartilham o instance profile e o IMDS é acessível a partir do código do usuário.

Amazon Redshift e Redshift ML

O Redshift é um data warehouse colunar e MPP (Massively Parallel Processing) para cargas de trabalho de análise sustentadas que exigem dashboards com resposta em subsegundos, joins complexos em bilhões de linhas e latência consistente sob múltiplos usuários de BI concorrentes. Os nós RA3 desacoplam a computação do armazenamento gerenciado; o Redshift Serverless cobra em RPU-segundos com base em uma capacidade base configurada, escala sob carga e pausa quando ocioso, eliminando o problema tradicional de dimensionamento de cluster.

O Redshift participa de pipelines de análise em dois modos de enriquecimento:

O Redshift Spectrum estende isso permitindo que o SQL do Redshift consulte o S3 diretamente através do Glue Data Catalog — o mesmo catálogo que o Athena usa — que é o que faz o padrão lake-house funcionar. Ideal quando você já tem um cluster Redshift e quer fazer join de fatos do warehouse com o histórico frio no S3 sem mover os dados.

Cargas em lote (batch) usam COPY a partir do S3, paralelizadas entre os nós de computação; os arquivos devem ser divididos em partes de tamanho aproximadamente igual (um múltiplo da contagem de slices) para paralelismo:

COPY events FROM 's3://acme-lake/events/dt=2024-05-12/'
IAM_ROLE 'arn:aws:iam::111:role/RedshiftLoader'
FORMAT AS PARQUET;

A ingestão de streaming normalmente flui através do Firehose (COPY em buffer) para uma entrega sem operações (zero-ops).

O Redshift ML permite que usuários de SQL criem, treinem e invoquem modelos via CREATE MODEL:

CREATE MODEL churn_predictor
FROM (SELECT tenure, plan, monthly_spend, churned FROM customers)
TARGET churned
FUNCTION predict_churn
IAM_ROLE default
SETTINGS (S3_BUCKET 'redshift-ml-artifacts');

SELECT customer_id, predict_churn(tenure, plan, monthly_spend)
FROM customers_current;

Por baixo dos panos, o Redshift exporta o conjunto de treinamento para o S3, invoca o SageMaker Autopilot (ou um algoritmo especificado como o XGBoost) e importa o modelo compilado para inferência dentro do banco de dados. É poderoso quando os analistas já vivem em SQL, mas não substitui uma plataforma completa de ML: a movimentação de dados para o S3 e a computação de treinamento do SageMaker são cobradas separadamente, grandes conjuntos de treinamento podem gerar custos significativos de egressão e de tempo de execução do Autopilot, e não há um fluxo de trabalho integrado para feature stores, rastreamento de experimentos ou implantação A/B. Trate o Redshift ML como uma forma de inferência democratizada sobre dados do Redshift, não como um serviço de treinamento de propósito geral.

Escolhendo entre Athena e Redshift

RequisitoEscolha
SQL ad-hoc, volume imprevisível, nativo do S3Athena
Dashboards com resposta em subsegundos, joins complexos, warehouse de TB–PBRedshift
Dashboards de BI em qualquer um dos doisQuickSight por cima
Segurança em nível de coluna entre os mecanismosLake Formation
Join do warehouse com dados frios do S3 sem mover os dadosRedshift Spectrum

Ingestão de Streaming: Kinesis Data Streams, Firehose e MSK

Os três serviços de streaming da AWS resolvem problemas sobrepostos com garantias materialmente diferentes:

ServiçoOrdenaçãoConsumidoresRetençãoUso típico
Kinesis Data Streams (KDS)Por shard, estritaMúltiplos, com capacidade de replay24 h–365 dLógica customizada por registro, processamento ordenado, replay
Kinesis Data FirehoseNenhuma (batching best-effort)Apenas sinks gerenciadosNenhuma (buffer)Entrega zero-ops para S3/Redshift/OpenSearch/Splunk
Amazon MSKPor partição, estrita (Kafka)Grupos de consumidores KafkaConfigurávelEcossistemas Kafka existentes, recursos nativos do Kafka

O Kinesis Data Streams usa shards (ou o modo on-demand); registros com a mesma chave de partição vão para o mesmo shard e são consumidos em ordem. Os consumidores usam o clássico GetRecords ou o Enhanced Fan-Out (2 MB/s dedicados por consumidor). Uma função Lambda anexada como fonte de evento é invocada com lotes (batches) por shard, preservando a ordem. Esta é a escolha correta quando a lógica downstream não é trivial, quando múltiplos consumidores independentes precisam reproduzir o histórico (replay), ou quando os volumes de clickstream são enormes — por exemplo, um site gerando 30 TB/dia fluiria através do KDS para o Firehose e pousaria no S3 para análise com Athena/Spectrum.

O Kinesis Data Firehose é uma entrega gerenciada do tipo “dispare e esqueça” (fire-and-forget): ele armazena em buffer por tamanho ou tempo (ex: 5 MB / 300 segundos), opcionalmente invoca uma Lambda para transformação, opcionalmente converte JSON para Parquet/ORC usando o esquema de uma tabela do Glue, e escreve no S3, Redshift (via S3 + COPY), OpenSearch ou Splunk. Ativar a conversão para Parquet no Firehose é a maneira de baixo esforço para depositar dados de streaming em formato otimizado para consulta sem um job do Glue downstream:

Firehose delivery stream → 
  Record transformation: Lambda (optional, for enrichment) →
  Format conversion: enabled, schema from Glue table "events.raw" →
  Destination: s3://lake/events/ partitioned by !{timestamp:yyyy/MM/dd}

O Firehose não tem garantia de ordenação de ponta a ponta, não pode suportar múltiplos consumidores com capacidade de replay, e seus destinos são sinks fixos. Escolher o Firehose quando o requisito diz “processar cada registro em ordem” ou “múltiplos consumidores independentes” está errado em ambos os casos. Da mesma forma, esperar que o Firehose sozinho realize transformações complexas é uma armadilha — seu único gancho (hook) de transformação é uma Lambda invocada por lote em buffer. Qualquer coisa que envolva enriquecimento externo, agregação de múltiplos registros ou roteamento condicional deve residir nessa Lambda ou ser movida para o Managed Service for Apache Flink.

O Amazon MSK é o Apache Kafka gerenciado. Escolha-o quando você já tiver produtores/consumidores Kafka, precisar de recursos específicos do Kafka (tópicos compactados, transações, Kafka Streams, Connect) ou exigir uma vazão (throughput) além do que o Kinesis baseado em shards entrega confortavelmente.

Usar SQS ou EventBridge como um caminho de ingestão para analytics é um erro: o SQS não é ordenado por stream e não tem capacidade de replay; o EventBridge é otimizado para roteamento de eventos, não para ingestão sustentada de múltiplos MB/s.

Pesquisa em Tempo Real: KDS + Firehose + OpenSearch + QuickSight

A substituição canônica para uma pilha Elasticsearch+Logstash on-premises é:

CamadaServiço da AWS
IngestãoKinesis Data Streams
Entrega/transformaçãoFirehose (ou Lambda)
Indexação e pesquisaAmazon OpenSearch Service
DashboardsOpenSearch Dashboards ou QuickSight

O Firehose armazena em buffer os registros do stream e os entrega diretamente a um domínio OpenSearch, cuidando de novas tentativas, backup no S3 e transformação opcional com Lambda. O OpenSearch Dashboards é integrado e gratuito com o domínio e é adequado para operadores que monitoram streams em tempo real. O QuickSight complementa isso para análises voltadas para o negócio — ele consulta diretamente o Athena, Redshift, RDS e OpenSearch, e seu mecanismo colunar em memória SPICE armazena em cache conjuntos de dados processados para um desempenho de dashboard de subsegundo.

Uma divisão típica: OpenSearch Dashboards para operadores; QuickSight para executivos que consomem conjuntos de dados agregados e selecionados, originados do data lake Athena/Glue. Ambos devem receber acesso de leitura do IAM e, quando aplicável, a permissão Decrypt do KMS nas CMKs que protegem o armazenamento subjacente — caso contrário, a camada de visualização renderiza painéis vazios com erros de permissão ocultos nos logs de consulta.

Controle de Acesso do QuickSight

O QuickSight cria datasets (consultas lógicas mais campos calculados e segurança em nível de linha), depois analyses (análises) sobre os datasets e, em seguida, publica dashboards (visualizações compartilháveis somente leitura). O controle de acesso é feito em camadas e deve ser aplicado na camada correta. A armadilha é conceder acesso amplo no nível do dashboard — compartilhando com um grupo de toda a organização quando apenas um subconjunto deveria ver os dados subjacentes.

O princípio do menor privilégio no QuickSight significa:

Tornar um dashboard público ou compartilhá-lo com toda a conta contorna a intenção dos controles no nível do dataset, porque quem visualiza o dashboard herda o acesso de leitura aos dados visualizados, independentemente das permissões da fonte subjacente. Lembre-se de que a segurança em nível de coluna do QuickSight protege apenas a superfície do QuickSight; qualquer pessoa com acesso direto ao Athena ou S3 a ignora, portanto, controles sensíveis devem estar no Lake Formation ou no ETL, e não apenas no QuickSight.

As funções (roles) do QuickSight — Admin, Author, Reader — controlam o que um usuário pode fazer, o que é diferente das permissões de compartilhamento que controlam o que ele pode ver. Um Reader consome a um custo por sessão mais baixo do que uma licença de Author, então as populações de visualizadores devem ser Readers por padrão, e o acesso deve ser concedido por meio de associação a grupos, em vez de atribuição individual.

Amazon Neptune para Workloads de Grafo

O Neptune é um banco de dados de grafo gerenciado que suporta o modelo de grafo de propriedades (Gremlin, openCypher) e RDF (SPARQL). Ele é projetado especificamente para dados altamente conectados — relacionamentos sociais, redes de fraude, grafos de conhecimento, mecanismos de recomendação — onde joins recursivos em um banco de dados relacional se tornam proibitivos. Uma plataforma social com usuários, seguidores, curtidas e posts mapeia-se naturalmente para vértices e arestas, e o Neptune responde a travessias de múltiplos saltos (“amigos de amigos que curtiram X”) em milissegundos.

O Neptune Streams expõe um log ordenado e baseado em tempo de cada mutação no grafo. Uma função Lambda ou uma aplicação que consulta o stream pode reagir a mudanças — recalcular recomendações, atualizar um índice de pesquisa, acionar alertas de fraude — sem um pipeline de captura de dados de alteração (change-data-capture) personalizado. Reproduzir isso no Aurora ou DynamoDB requer travessia de grafo no nível da aplicação, além de uma estrutura de CDC separada. Quando o enunciado do problema inclui tanto “analisar relacionamentos” quanto “monitorar mudanças”, o Neptune com Streams é a combinação direta.

SageMaker: ML Personalizado de Ponta a Ponta

O SageMaker oferece o ciclo de vida completo: notebooks do Studio, trabalhos de treinamento gerenciados (com suporte a instâncias spot), Model Registry, endpoints em tempo real e serverless, transformação em lote (batch transform) e Pipelines para MLOps. Um fluxo típico envolve o upload de dados de treinamento para o S3, o lançamento de um trabalho de treinamento especificando um algoritmo integrado ou um contêiner personalizado, e o SageMaker provisiona instâncias efêmeras, transmite logs para o CloudWatch e grava o artefato do modelo de volta no S3. A implantação é uma única chamada de API:

from sagemaker.estimator import Estimator
est = Estimator(image_uri=xgb_image, role=role,
                instance_count=2, instance_type="ml.m5.xlarge",
                output_path="s3://models/xgb/")
est.fit({"train": "s3://data/train/", "validation": "s3://data/val/"})
predictor = est.deploy(initial_instance_count=1, instance_type="ml.m5.large")

Não há Kubernetes, driver de GPU ou servidor de modelo para gerenciar. Para equipes cujo requisito é “treinar e expor um modelo”, o SageMaker é quase sempre a resposta com menor sobrecarga em comparação com a implementação de inferência em ECS/EC2 por conta própria.

Os SageMaker Savings Plans comprometem com um gasto de dólar por hora em componentes elegíveis (Studio, treinamento, processamento, inferência em tempo real) por 1 ou 3 anos, gerando até 64% de desconto sobre os preços sob demanda. Eles são flexíveis entre famílias de instâncias, tamanhos, regiões e componentes — mas não cobrem Ground Truth, armazenamento ou transferência de dados. Use os Savings Plans quando o uso de ML de base for previsível; deixe o treinamento em rajadas (burst) em instâncias spot para acumular ainda mais economia.

Serviços de IA Gerenciados Versus ML Personalizado

O Amazon Rekognition (imagens/vídeo: detecção de objetos e cenas, análise facial, moderação), o Textract (OCR mais extração de formulários e tabelas) e o Comprehend (NLP: reconhecimento de entidades, análise de sentimento, detecção de PII, classificação personalizada) expõem modelos pré-treinados por meio de APIs simples. O DetectEntities do Comprehend retorna entidades tipadas, incluindo a categoria COMMERCIAL_ITEM — perfeito para extrair nomes de ingredientes de textos de receitas e alimentar uma consulta no DynamoDB, sem dados de treinamento, sem hospedagem e com preço por solicitação:

aws comprehend detect-entities \
    --language-code en \
    --text "Combine 2 cups flour, 1 tsp salt, and 3 eggs..."

O modo de falha comum é o excesso de engenharia (over-engineering) — iniciar trabalhos de treinamento do SageMaker, rotular dados com o Ground Truth e hospedar endpoints quando um serviço gerenciado já atende ao requisito por uma fração do custo operacional. O ML personalizado só se justifica quando a precisão em dados específicos do domínio é significativamente maior, quando os tipos de entidade necessários não correspondem ao esquema gerenciado (o Comprehend Custom Classification/Entity Recognition ainda é mais barato que o SageMaker puro) ou quando as restrições de latência e residência de dados exigem um modelo privado.

Armazenamento e Rede para HPC: FSx for Lustre e EFA

Cargas de trabalho de HPC fortemente acopladas — CFD, dinâmica molecular, imageamento sísmico, treinamento em larga escala — têm dois requisitos não negociáveis: comunicação entre nós com latência extremamente baixa e armazenamento compartilhado de alta vazão (throughput).

O Elastic Fabric Adapter (EFA) é uma interface de rede disponível em famílias específicas de EC2 (hpc7a, hpc6id, c6in, p4d/p5, entre outras). Ele ignora a pilha TCP/IP do kernel usando o Libfabric com OS-bypass, permitindo que o MPI e o NCCL atinjam latências de microssegundos em centenas de nós. O EFA exige que as instâncias estejam na mesma Zona de Disponibilidade e, para máxima largura de banda, em um grupo de posicionamento de cluster (cluster placement group).

O FSx for Lustre é um sistema de arquivos paralelo gerenciado que oferece centenas de GB/s de vazão e latência de submilisegundos. Ele se integra nativamente com o S3: um sistema de arquivos FSx pode ser vinculado a um bucket para que os objetos apareçam como arquivos POSIX, e os resultados gravados no Lustre podem ser exportados de volta para o S3. Implantações com SSD do tipo Persistente são adequadas para armazenamento temporário (scratch) de longa duração; o tipo Scratch2 é mais barato para dados de trabalho efêmeros.

O padrão incorreto é usar o EFS para HPC. O EFS é baseado em NFS, otimizado para muitos clientes pequenos fazendo E/S de arquivo de uso geral; ele não consegue sustentar a vazão agregada ou o IOPS de metadados que um trabalho MPI de 500 nós necessita, e seu design multi-AZ adiciona latência. Usar o ENA padrão em vez do EFA limita o MPI às latências do TCP, multiplicando várias vezes os tempos de execução com uso intensivo de allreduce. A combinação correta é usar instâncias habilitadas para EFA em um grupo de posicionamento de cluster montando o FSx for Lustre, com o S3 como armazenamento frio (cold storage) durável vinculado ao sistema de arquivos.


Bancos de Dados e Caching · Todos os domínios · Integração de Aplicações

Pratique estas questões → · Prática cronometrada no ExamRoll.io →

Pass the whole exam — not just this question

You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.

Passe no seu exame →

Navegar Amazon →

Related guides

Acesso completo

Uma assinatura. Todos os exames.

Todo plano desbloqueia pesquisa ilimitada de respostas, testes práticos, explicações de AI e a biblioteca completa de recursos — em mais de 20 idiomas.

Mensal
24.87
Just €0.83/day
Tudo incluído:
  • Pesquisa ilimitada de respostas
  • Testes práticos ilimitados
  • Explicações com AI
  • Biblioteca completa de recursos
  • Mais de 20 idiomas
  • Atualizações semanais de conteúdo
  • Recompensas e indicações
  • Suporte prioritário
Iniciar teste grátis

*Não é necessário cartão de crédito

Melhor custo-benefício
12 meses
179.87
Just €0.49/daySave 40%
Tudo incluído:
  • Pesquisa ilimitada de respostas
  • Testes práticos ilimitados
  • Explicações com AI
  • Biblioteca completa de recursos
  • Mais de 20 idiomas
  • Atualizações semanais de conteúdo
  • Recompensas e indicações
  • Suporte prioritário
Iniciar teste grátis

*Não é necessário cartão de crédito

✓ Plano gratuito incluído · ✓ Cancele a qualquer momento · ✓ Todos os planos desbloqueiam o produto completo