Amazon DVA-C02: Serverless e AWS Lambda — Guia de estudos
Faz parte do AWS Developer Associate DVA-C02 — Guia de estudos. Pratique com respostas verificadas no centro de exames da Amazon, ou faça testes cronometrados no ExamRoll.io.
Versões, aliases, layers e empacotamento
Versões do Lambda são snapshots imutáveis de código e configuração criados com a API PublishVersion (por exemplo, boto3.client(’lambda’).publish_version(FunctionName=‘MyFunc’)). Use versões para fornecer releases reproduzíveis e, em seguida, crie aliases (boto3.client(’lambda’).create_alias ou update_alias) como ponteiros estáveis que também podem carregar uma configuração de roteamento para dividir o tráfego entre versões para rollouts graduais. Layers (camadas) fornecem uma maneira de compartilhar bibliotecas nativas ou pacotes de runtime comuns; publish_layer_version permite que você anexe dependências (ex: binários compilados) separadamente do pacote da sua função, para que os builds sejam menores e os cold starts mais rápidos. Para o empacotamento, prefira arquivos zip pequenos para deploys rápidos (ou uploads para o S3 para artefatos maiores) e adote imagens de contêiner quando precisar de binários grandes ou runtimes personalizados; docker build + aws lambda create-function –package-type Image registrará imagens armazenadas no ECR (imagens de contêiner suportam tamanhos muito maiores). Armadilhas comuns incluem embutir credenciais em variáveis de ambiente, exceder os limites de tamanho do pacote de implantação e esquecer que as layers são versionadas e imutáveis: atualize as dependências publicando uma nova versão da layer e atualizando a configuração da função. Para rollbacks programáticos, atualize o alias para apontar para uma versão anterior (boto3.client(’lambda’).update_alias(FunctionName=‘MyFunc’, Name=‘prod’, FunctionVersion=‘3’)) para minimizar o impacto operacional.
Ambiente de execução, ajuste de performance e mitigação de cold-start
A CPU do Lambda escala com a memória, então a melhoria de cargas de trabalho limitadas por CPU (CPU-bound) é normalmente feita aumentando a configuração de MemorySize (via UpdateFunctionConfiguration) em vez de alterar um controle de CPU separado; meça com o AWS X-Ray e métricas do CloudWatch para encontrar o ponto ideal entre duração e custo. Cold starts são influenciados pelo tamanho do pacote, código de inicialização, uso de rede VPC (latência de anexo da ENI) e o runtime da linguagem; mitigue reduzindo a inicialização, movendo bibliotecas pesadas para layers, usando Provisioned Concurrency (put_provisioned_concurrency_config) ou usando imagens de contêiner com entrypoints otimizados. Para funções anexadas a uma VPC, evite picos de cold-start usando VPC endpoints para S3/DynamoDB ou o RDS Proxy para limitar a rotatividade de conexões (connection churn) e os custos do NAT Gateway; garanta que a execution role do Lambda inclua a política gerenciada AWSLambdaVPCAccessExecutionRole e que as subnets tenham espaço de endereços IP adequado para as ENIs. Esteja ciente de armadilhas como timeouts síncronos: defina o timeout da função como sendo menor que o das dependências downstream para garantir que os chamadores de saída vejam um modelo de falha consistente, e use tokens de idempotência para retentativas, pois serviços como SQS, SNS e Kinesis entregam com semântica de “pelo menos uma vez” (at-least-once).
Acesso à VPC, armazenamento efêmero e controles de segurança
Quando você coloca um Lambda em uma VPC, você deve configurar os IDs de sub-rede (subnet IDs) e os security groups na configuração da função; a função então usa ENIs nessas subnets e precisa de caminhos de rede para serviços externos. Para alcançar o S3 ou DynamoDB sem um NAT, crie VPC endpoints (Gateway para S3, Interface endpoints para muitos serviços). Para bancos de dados, prefira o RDS Proxy para fazer o pool de conexões e reduzir a criação de conexões em rajadas (bursty). O diretório /tmp fornece armazenamento efêmero para o ambiente de execução e é gravável durante a invocação; configure um armazenamento efêmero maior se necessário (configuração EphemeralStorage), mas projete para funções stateless (sem estado) sempre que possível. Proteja segredos armazenando-os no AWS Secrets Manager ou no Parameter Store (SSM) e concedendo à role do Lambda o menor privilégio (least privilege); busque os segredos no cold start usando boto3.client(‘secretsmanager’).get_secret_value(SecretId=arn) ou use variáveis de ambiente criptografadas com uma chave KMS especificada no KMSKeyArn da função. Erros comuns de desenvolvedores incluem a falta de VPC endpoints, levando a timeouts, embutir chaves em texto plano (plaintext) no código e esquecer de rotacionar ou armazenar segredos em cache de forma eficiente para evitar throttling nas chamadas da API do Secrets Manager.
Integrações de eventos, tratamento de erros, testes locais e estratégias de implantação
O Lambda se integra nativamente com muitas fontes de eventos: notificações de eventos do S3, DynamoDB Streams, Kinesis, SQS e API Gateway. Para fontes de stream, ajuste o tamanho do lote (batch size) e o parallelizationFactor, monitore o IteratorAge e trate falhas parciais, pois o Lambda tentará reexecutar lotes com falha e pode bloquear o processamento subsequente quando os erros persistem. Para invocações assíncronas, use DLQs ou Destinations para capturar falhas (configure a invocação assíncrona com destinos onFailure/onSuccess). Funções acionadas pelo S3 devem se proteger contra invocações recursivas ao gravar de volta no mesmo bucket, verificando as chaves dos objetos ou usando tags de objeto. Testes locais são mais bem executados com a AWS SAM CLI (sam build; sam local invoke; sam local start-api) ou com runtimes Lambda em contêineres; testes unitários podem usar moto ou mocking local, mas testes de integração devem ser executados em recursos AWS reais em contas de teste efêmeras. As implantações devem usar funções versionadas + aliases e desvio de tráfego (traffic shifting) através do CodeDeploy ou UpdateAlias com um RoutingConfig para realizar implantações canary ou lineares; implemente hooks PreTraffic e PostTraffic para verificação. Armadilhas comuns incluem ignorar a idempotência para novas tentativas, não tratar respostas parciais de BatchGetItem (verifique UnprocessedKeys) e usar IAM roles de execução com permissões excessivamente amplas.
Problema Prático: Cenário de Caso de Uso
Cenário: A PhotoSpot Inc executa uma função Lambda em Python que processa imagens enviadas para o S3, grava metadados no DynamoDB e chama uma API de otimização de imagem de terceiros. A função precisa de um desempenho rápido de cold-start, credenciais de API seguras, rollbacks seguros e acesso a um RDS Proxy hospedado em uma VPC para enriquecimento de metadados.
Desafio: Reduzir a latência de cold-start para uploads visíveis ao usuário, proteger e rotacionar a chave da API de terceiros e permitir rollbacks seguros sem tempo de inatividade (zero-downtime) e desvio de tráfego controlado.
Abordagem Recomendada:
- Crie e publique releases imutáveis: use a AWS CLI ou o boto3 para atualizar o código, depois
undefined
e crie/atualize o alias
undefined
. 2. Mitigue os cold starts: configure Provisioned Concurrency para o alias
undefined
e mova bibliotecas nativas pesadas para uma camada (layer) publicada (
undefined
). 3. Proteja as credenciais: armazene a chave da API de terceiros no AWS Secrets Manager, conceda à role do Lambda o menor privilégio (least-privilege) e busque-a no cold start com
undefined
em vez de incorporar segredos no código ou em variáveis de ambiente em texto plano. 4. VPC e gerenciamento de conexões: coloque a função em sub-redes privadas com security groups, use o RDS Proxy para acesso ao banco de dados para evitar tempestades de conexões (connection storms) e crie um VPC endpoint para o S3 para que as leituras de imagem não exijam um NAT.
Justificativa: O uso de versões e aliases com desvio de tráfego (traffic shifting) permite rollouts seguros e rollback imediato ao reapontar um alias. A Provisioned Concurrency e as camadas (layers) reduzem a latência de inicialização, enquanto o Secrets Manager centraliza a rotação de credenciais e minimiza a exposição de segredos. O RDS Proxy e os VPC endpoints diminuem a latência e o custo operacional ao reduzir a rotatividade de conexões (connection churn) e a dependência de NAT.
Todos os domínios · Amazon API Gateway e 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 →