Pular para o conteúdo

3. Lambda quebrada

Seu progresso

Fica salvo só neste navegador.

A dúvida: “O que esse erro quer dizer, e como eu descubro sozinho?”

Você vai quebrar uma função de propósito, ler o erro e usar a IA para aprender a investigar, e não só para receber a resposta pronta.

Tempo Cerca de 1 hora
Custo Normalmente zero: o nível gratuito do Lambda inclui 1 milhão de requisições por mês
Sem conta AWS? Faz os passos 1 a 3 no seu computador, só com Python
Você leva Um jeito de ler logs que serve em qualquer sistema

Olhe a função, em lambda_function.py:

def lambda_handler(event, context):
nome = event["nome"]
return {"statusCode": 200, "body": json.dumps({"mensagem": f"Oi, {nome}!"})}

Anote: o que acontece se ela receber um evento vazio, {}? E qual código de status você espera ver?

Baixe os arquivos lambda_function.py e rodar_local.py e rode:

Janela do terminal
python3 rodar_local.py '{}'
KeyError: 'nome'

Agora com um evento certo:

Janela do terminal
python3 rodar_local.py '{"nome": "Ana"}'
Você é meu tutor. Estou aprendendo a ler erros e NÃO quero a correção pronta.
Este é meu código: [cole a função]
Este é o erro: [cole o erro]
1. Me diga em qual linha olhar e o que essa linha espera receber.
2. Me faça uma pergunta que me ajude a achar a causa sozinho.
3. Só depois que eu responder, compare a minha resposta com a sua.

Quando entender a causa, corrija você mesmo. Por exemplo: o que a função deveria fazer quando nome não vem?

Pule se ainda não tem conta. Na CloudShell, região us-east-1:

Janela do terminal
B=https://raw.githubusercontent.com/fernando-moretes/aws-builder-workshops/main/missoes/03-lambda-quebrada
curl -sO $B/lambda_function.py
curl -sO $B/politica-confianca.json
zip f.zip lambda_function.py
CONTA=$(aws sts get-caller-identity --query Account --output text)
aws iam create-role --role-name missao3-role \
--assume-role-policy-document file://politica-confianca.json
aws iam attach-role-policy --role-name missao3-role \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
sleep 15
aws lambda create-function --function-name missao3 --runtime python3.13 \
--handler lambda_function.lambda_handler \
--role arn:aws:iam::$CONTA:role/missao3-role --zip-file fileb://f.zip
aws lambda wait function-active-v2 --function-name missao3

Chame a função com um evento vazio:

Janela do terminal
aws lambda invoke --function-name missao3 --cli-binary-format raw-in-base64-out \
--payload '{}' resposta.json
cat resposta.json

Esta foi a resposta real no nosso teste:

{ "StatusCode": 200, "FunctionError": "Unhandled" }
{"errorMessage": "'nome'", "errorType": "KeyError"}

Olhe o detalhe: o status é 200, e mesmo assim a função falhou. O 200 diz que a chamada ao serviço Lambda funcionou. O erro da sua função está em FunctionError. Quem olha só o status acha que deu tudo certo.

Espere uns 15 segundos e leia os logs:

Janela do terminal
aws logs tail /aws/lambda/missao3 --since 10m --format short
[ERROR] KeyError: 'nome'
File "/var/task/lambda_function.py", line 5, in lambda_handler
nome = event["nome"]
REPORT ... Duration: 52.74 ms Memory Size: 128 MB Max Memory Used: 32 MB

Pergunte à sua IA, sem mostrar esta página:

Chamei uma função Lambda pela AWS CLI e o StatusCode voltou 200.
Isso quer dizer que a minha função rodou sem erro? Cite a documentação.

Ela percebeu a diferença? O link que ela citou confirma? Abra e anote. A documentação da API Invoke diz, com todas as letras: “The status code in the API response doesn’t reflect function errors”.

Rode tudo e confira que nada sobrou:

Janela do terminal
aws lambda delete-function --function-name missao3
aws iam detach-role-policy --role-name missao3-role \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
aws iam delete-role --role-name missao3-role
aws logs delete-log-group --log-group-name /aws/lambda/missao3
aws lambda list-functions --query "Functions[?FunctionName=='missao3'].FunctionName"

A última linha precisa mostrar [].

Campo Exemplo do que anotar
Tema Minha Lambda respondeu 200 e estava quebrada
Público Quem está aprendendo a ler logs
Problema Confiar só no código de status
Objetivo Encontrar um erro pelo log, sem pedir a resposta pronta
Evidências Sua hipótese, a saída real, o log e o que a IA acertou ou errou

Continue em Do teste ao artigo.

Em 06/11/2026, a função, as saídas acima e a limpeza rodaram em uma conta real com a AWS CLI, em us-east-1 e Python 3.13. Os nomes usados no teste foram diferentes, com prefixo próprio, e nada sobrou na conta. Os comandos não foram executados dentro da CloudShell.

Fontes, consultadas em 06/11/2026: API Invoke, preço do Lambda e CloudShell.

Projeto independente de comunidade de Fernando Azevedo, AWS Community Builder. Não é material oficial da AWS nem tem o endosso dela. AWS e nomes relacionados são marcas da Amazon.com, Inc. ou de suas afiliadas. Licença MIT.