Solutions Architect

Serverless e contêineres

Tecnologias serverless e orquestração de contêineres fazem parte da tarefa 3.2 de Design High-Performing Architectures, 24% do conteúdo pontuado: quem gerencia os servidores, quão rápido escala e quanto custa.

Lambda

AWS Lambda

Página oficial

Executa código em resposta a eventos, sem servidores para gerenciar. Feito para tarefas curtas que não guardam estado entre invocações.

Pontos-chave

  • Memória e CPU: de 128 MB a 10.240 MB, em passos de 1 MB. A CPU é alocada na proporção da memória, e 1.769 MB equivalem a 1 vCPU. Mais memória é a principal alavanca para funções limitadas por CPU ou rede.
  • Timeout: até 900 segundos (15 minutos) por invocação.
  • Payloads: 6 MB para requisição e resposta síncronas, 1 MB para eventos assíncronos. Variáveis de ambiente somam até 4 KB.
  • Empacotamento: .zip de até 50 MB compactado e 250 MB descompactado com layers, ou imagem de contêiner de até 10 GB. /tmp de 512 MB a 10.240 MB.
  • Layers: até 5 por função, extraídas em /opt, para compartilhar bibliotecas entre funções. Só para funções .zip, não para imagens de contêiner.
  • Ajuste: o AWS Lambda Power Tuning e o AWS Compute Optimizer ajudam a escolher a memória.

Na prova

"Função limitada por CPU está lenta" -> aumente a memória (a CPU acompanha). "O processamento leva 40 minutos" -> não é Lambda, use ECS no Fargate ou AWS Batch. "A mesma biblioteca em muitas funções" -> layers.

Concorrência

Lambda concurrency

Página oficial

Concorrência é a média de requisições por segundo vezes a duração média. As funções de uma Região dividem 1.000 execuções simultâneas por padrão, uma cota que pode ser aumentada.

Pontos-chave

  • Reserved concurrency: uma fatia do pool que é ao mesmo tempo o mínimo garantido e o máximo da função. Protege funções críticas ou limita uma que sobrecarregaria um recurso a jusante. Sem custo.
  • Provisioned concurrency: ambientes de execução pré-inicializados que respondem sem cold start. Tem custo adicional e pode seguir agenda ou utilização via Application Auto Scaling.
  • Limites: cada função escala até 1.000 ambientes de execução a cada 10 segundos. O Lambda mantém 100 unidades sem reserva, então só 900 das 1.000 padrão podem ser reservadas. As requisições por segundo ficam limitadas a 10 vezes a concorrência.
  • SnapStart: tira um snapshot do ambiente inicializado ao publicar uma versão e retoma a partir dele, com inicialização que pode ficar abaixo de 1 segundo. Java 11+, Python 3.12+ e .NET 8+. Gratuito no Java, com cobrança de cache e restauração nos demais.
  • Limites do SnapStart: só em versões publicadas e sem combinar com provisioned concurrency, EFS ou /tmp acima de 512 MB.

Na prova

"Cold start inaceitável em uma API sensível a latência" -> provisioned concurrency (ou SnapStart para Java, Python, .NET). "Uma função derruba o banco de dados" -> reserved concurrency como teto.

Página oficial

Os serviços ou empurram eventos para o Lambda por triggers, ou o Lambda os consulta por um event source mapping que lê em lotes.

Pontos-chave

  • Triggers (push): S3, SNS, API Gateway e outros invocam a função assim que o evento acontece. O trigger é configurado e guardado no serviço de origem.
  • Event source mappings (poll): pollers do Lambda leem SQS, Kinesis, DynamoDB, Amazon MSK, Kafka autogerenciado, Amazon MQ e DocumentDB e invocam a função com lotes de registros.
  • Lotes: um lote fecha ao atingir o batch size, a batching window (0 a 300 segundos) ou 6 MB de payload. Lotes maiores diluem o custo de cada invocação e aumentam o throughput.
  • Pelo menos uma vez: mappings podem processar um registro mais de uma vez, então o handler precisa ser idempotente. Em erro, lotes de stream são reprocessados e o shard pausa para manter a ordem.
  • Provisioned mode: pollers dedicados com mínimo e máximo para mappings de SQS, Amazon MSK e Kafka, quando a latência precisa ser constante. Tem custo adicional.

Na prova

"Processar mensagens SQS com Lambda em lotes" -> event source mapping. "Rodar código quando um objeto chega ao S3" -> trigger de S3 event notification. "Duplicatas estragaram o resultado" -> torne o handler idempotente.

ECS ou EKS

Amazon ECS and Amazon EKS

Página oficial

Os dois orquestram contêineres em EC2, Fargate ou no ambiente local. A escolha depende de você querer ou não Kubernetes.

Pontos-chave

  • Amazon ECS: orquestrador nativo da AWS, sem control plane para operar. A task definition é a planta, a task a executa e o service mantém o número desejado de tasks rodando.
  • Amazon EKS: control plane Kubernetes gerenciado e certificado como conformante. Reaproveita manifests, ferramentas e conhecimento de Kubernetes e mantém as cargas portáveis.
  • EKS Auto Mode: a AWS também gerencia os nós, incluindo provisionamento, escolha de instância, escala e patches do sistema operacional.
  • Escala: o Service Auto Scaling do ECS muda o número de tasks, e o Cluster Auto Scaling muda as instâncias EC2 registradas no cluster.
  • Custo: a orquestração do ECS não tem cobrança adicional. O EKS cobra por cluster, além da computação.

Na prova

"Time já usa Kubernetes e quer um control plane gerenciado" -> EKS. "Orquestração de contêineres nativa da AWS com o menor esforço" -> ECS, em geral no Fargate.

ECS ou EKS

CritérioECS e EKS
APIECS: conceitos nativos da AWS. EKS: Kubernetes padrão.
Control planeECS: nada para operar ou atualizar. EKS: gerenciado pela AWS, mas você acompanha as versões do Kubernetes.
CapacidadeAmbos: EC2, Fargate e opções locais (ECS Anywhere, EKS Anywhere, EKS Hybrid Nodes).
Melhor paraECS: menor esforço operacional na AWS. EKS: conhecimento, ferramentas ou portabilidade de Kubernetes.

Fargate ou EC2

AWS Fargate

Página oficial

A capacidade por baixo do ECS ou do EKS. O Fargate roda cada task sem servidores para gerenciar, e o launch type EC2 roda tasks em instâncias que você gerencia.

Pontos-chave

  • Fargate: você define CPU e memória por task, e cada task tem seu próprio limite de isolamento, sem compartilhar kernel, CPU, memória ou interface de rede. Cobrança por segundo de vCPU, memória e armazenamento, com mínimo de 1 minuto no Linux.
  • Tamanhos de task: de 0,25 vCPU com 512 MiB até 32 vCPU com 244 GB no Linux. 20 GB de armazenamento efêmero estão incluídos.
  • Rede: sempre no modo awsvpc, com uma interface de rede por task, então os target groups do load balancer usam o target type ip.
  • Fargate Spot: até 70% de desconto para tasks ECS que toleram interrupção, com aviso de 2 minutos. Só Linux.
  • Launch type EC2: você gerencia instâncias, AMIs e capacidade do cluster e, em troca, tem GPUs, contêineres privilegiados e qualquer tipo de instância, nada disso suportado no Fargate.

Na prova

"Rodar contêineres sem gerenciar nem aplicar patches em servidores" -> Fargate. "Contêineres precisam de GPU ou modo privilegiado" -> launch type EC2. "Jobs em contêiner baratos e interrompíveis" -> Fargate Spot.

Capacidade Fargate ou EC2

AspectoFargate e EC2
ServidoresFargate: nenhum para gerenciar. EC2: você escolhe, corrige e escala as instâncias.
CobrançaFargate: vCPU, memória e armazenamento por task. EC2: por instância, usada ou não.
IsolamentoFargate: um limite de isolamento por task. EC2: as tasks dividem a instância.
RecursosFargate: sem GPU, sem modo privilegiado. EC2: GPUs, modo privilegiado, qualquer tipo de instância.
Página oficial

O Amazon ECR guarda as imagens que ECS, EKS e Lambda baixam. Levar uma aplicação para contêineres começa por gerar uma imagem e enviá-la ao ECR.

Pontos-chave

  • Registry: repositórios privados com permissões baseadas em recurso no IAM, mais o ECR Public. Imagens Docker, imagens OCI e artefatos OCI.
  • Image scanning: scan on push para encontrar vulnerabilidades de software em cada imagem nova.
  • Lifecycle policies: regras que limpam imagens sem uso, testáveis antes de valerem.
  • Replicação e cache: replicação entre Regiões e entre contas, e regras de pull through cache que mantêm imagens de registries externos no seu registry privado.
  • Conteinerização: empacote a aplicação e suas dependências em uma imagem, envie ao ECR, descreva-a em uma task definition ou pod spec e rode no Fargate ou no EC2. A mesma imagem roda igual em todo ambiente.
  • Pull privado: tasks em subnets privadas baixam imagens do ECR por um interface VPC endpoint, sem NAT gateway.

Na prova

"Guardar e escanear imagens e copiá-las para uma Região de DR" -> ECR com replicação. "Tasks Fargate em subnets privadas não conseguem baixar imagens" -> adicione um interface endpoint do ECR ou um NAT gateway.

Contêineres locais

ECS Anywhere and EKS Anywhere

Página oficial

Os mesmos orquestradores podem gerenciar servidores no seu data center, para dados que precisam ficar no local ou para uma migração gradual.

Pontos-chave

  • ECS Anywhere: registra servidores ou VMs locais como instâncias externas de um cluster ECS (launch type EXTERNAL) por meio do SSM Agent. Cobrança por instância registrada por hora.
  • Limites do ECS Anywhere: sem balanceamento de carga, sem service discovery, sem modo awsvpc e sem volumes EFS. Melhor para cargas que geram tráfego de saída ou processam dados.
  • EKS Anywhere: cria e opera clusters Kubernetes na sua infraestrutura (VMware vSphere, bare metal, Nutanix, AWS Snow), inclusive sem conexão com a internet. Open source e gratuito, com Enterprise Subscriptions opcionais.
  • EKS Distro: a distribuição Kubernetes usada pelo Amazon EKS e a base do EKS Anywhere.
  • EKS Hybrid Nodes: servidores locais e de borda que entram como nós de um cluster Amazon EKS.

Na prova

"Rodar contêineres no local, gerenciados pelo console do ECS" -> ECS Anywhere. "Kubernetes em um data center desconectado" -> EKS Anywhere. "Serviço local precisa receber tráfego por load balancer" -> ECS Anywhere não serve bem.

Escolhendo o modelo

Containers or serverless

Página oficial

A maioria dos projetos mistura os dois. O que decide é o tempo de execução, o controle sobre o runtime, o formato do tráfego e o esforço operacional que o time aguenta.

Pontos-chave

  • Lambda: tráfego orientado a eventos ou imprevisível, tarefas abaixo de 15 minutos, pagamento por requisição e duração, sem sistema operacional ou runtime para gerenciar.
  • Fargate: serviços ou jobs longos em contêiner sem servidores para gerenciar, com qualquer linguagem ou binário dentro da imagem.
  • ECS ou EKS no EC2: GPUs, tipos de instância específicos, acesso privilegiado ou controle total dos hosts.
  • Desacoplamento: coloque SQS, SNS ou EventBridge entre os componentes para que cada camada escale sozinha pela própria métrica.
  • AWS Serverless Application Repository: publica e implanta aplicações serverless reutilizáveis, definidas em templates AWS SAM, compartilhadas publicamente ou com contas específicas. Sem custo além dos recursos implantados.

Na prova

"Tráfego imprevisível, sem servidores, pagar só quando roda" -> Lambda. "Serviço em contêiner rodando 24/7 sem gerenciar hosts" -> ECS no Fargate. "Reaproveitar um app serverless publicado entre contas" -> Serverless Application Repository.