As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Introdução aos testes com sam local invoke
Use o subcomando Command Line Interface AWS Serverless Application Model (AWS SAMCLI) sam local invoke
para iniciar localmente uma invocação única de uma função AWS Lambda.
-
Para obter uma introdução à CLI do AWS SAM, consulte O que é o CLI do AWS SAM?
-
Para obter uma lista de opções de comando
sam local invoke
, consulte sam local invoke. -
Para obter um exemplo de uso do
sam local invoke
durante um fluxo de trabalho de desenvolvimento típico, consulte Etapa 7: (opcional) Teste seu aplicativo localmente.
Para usar o sam local invoke
, instale o AWS SAM CLI fazendo o seguinte:
Antes de usar sam local invoke
, recomendamos uma compreensão básica do seguinte:
Invocar uma função do Lambda localmente
Quando você executa sam local invoke
, AWS SAM CLI pressupõe que seu diretório de trabalho atual seja o diretório raiz do seu projeto. O AWS SAM CLI, primeiro procurará um arquivo template.[yaml|yml]
dentro de uma subpasta .aws-sam
. Se não for encontrado, o AWS SAM CLI procurará um arquivo template.[yaml|yml]
em seu diretório de trabalho atual.
Invocar uma função do Lambda localmente
-
No diretório raiz do seu projeto, execute o seguinte:
$
sam local invoke
<options>
-
Se seu aplicativo contiver mais de uma função, forneça o ID lógico da função. Veja um exemplo a seguir:
$
sam local invoke
HelloWorldFunction
-
O AWS SAM CLI constrói sua função em um contêiner local Docker. Em seguida, ele invoca sua função e gera a resposta da sua função.
Veja um exemplo a seguir:
$
sam local invoke
Invoking app.lambda_handler (python3.9) Local image is out of date and will be updated to the latest runtime. To skip this, pass in the parameter --skip-pull-image Building image.................................................................................................................... Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Version: $LATEST END RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df REPORT RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Init Duration: 1.09 ms Duration: 608.42 ms Billed Duration: 609 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}%
Gerenciar logs do
Ao usar sam local invoke
, a saída de tempo de execução da função do Lambda (por exemplo, registros) é enviada para stderr
e o resultado da função do Lambda é enviado para stdout
.
Veja a seguir um exemplo de uma função do Lambda básica:
def handler(event, context): print("some log") # this goes to stderr return "hello world" # this goes to stdout
Você pode salvar essas saídas padrão. Veja um exemplo a seguir:
$
sam local invoke 1> stdout.log
...$
cat stdout.log
"hello world"$
sam local invoke 2> stderr.log
...$
cat stderr.log
Invoking app.lambda_handler (python3.9) Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Version: $LATEST some log END RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 REPORT RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Init Duration: 0.91 ms Duration: 589.19 ms Billed Duration: 590 ms Memory Size: 128 MB Max Memory Used: 128 MB
Você pode usar essas saídas padrão para automatizar ainda mais seus processos de desenvolvimento local.
Opções
Passe eventos personalizados para invocar a função do Lambda
Para passar um evento para a função do Lambda, use a opção --event
. Veja um exemplo a seguir:
$
sam local invoke --event
events/s3.json S3JsonLoggerFunction
Você pode criar eventos com o subcomando sam local generate-event
. Para saber mais, consulte Introdução aos testes com sam local generate-event.
Passe variáveis de ambiente ao invocar sua função do Lambda
Se sua função do Lambda usa variáveis de ambiente, você pode passá-las durante o teste local com a opção --env-vars
. Essa é uma ótima maneira de testar uma função do Lambda localmente com serviços da aplicação que já estão implantados na nuvem. Veja um exemplo a seguir:
$
sam local invoke --env-vars
locals.json
Especificar um modelo ou função
Para especificar um modelo para o AWS SAM CLI para referência, use a opção --template
. Os AWS SAM CLI carregarão apenas esse modelo AWS SAM e os recursos para os quais ele aponta.
Para invocar uma função de um aplicativo ou pilha aninhada, forneça o ID lógico do aplicativo ou da pilha junto com o ID lógico da função. Veja um exemplo a seguir:
$
sam local invoke
StackLogicalId/FunctionLogicalId
Testar uma função do Lambda no seu projeto Terraform
Use a opção --hook-name
de testar localmente as funções do Lambda em seus projetos Terraform. Para saber mais, consulte Usando o AWS SAM CLI with Terraform para depuração e teste locais.
Veja um exemplo a seguir:
$
sam local invoke --hook-name terraform --beta-features
Práticas recomendadas
Se seu aplicativo tiver um diretório .aws-sam
executando sam build
, certifique-se de executar o sam build
sempre que atualizar o código da função. Em seguida, execute o sam local invoke
para testar localmente seu código de função atualizado.
O teste local é uma ótima solução para desenvolvimento e teste rápidos antes da implantação na nuvem. No entanto, os testes locais não validam tudo, como permissões entre seus recursos na nuvem. Tanto quanto possível, teste seus aplicativos na nuvem. Recomendamos usar o sam sync para acelerar seus fluxos de trabalho de testes na nuvem.
Exemplos
Gere um evento de amostra do Amazon API Gateway e use-o para invocar uma função do Lambda localmente
Primeiro, geramos uma carga útil de evento de API HTTP do API Gateway e a salvamos em nossa pasta events
.
$
sam local generate-event
apigateway http-api-proxy > events/apigateway_event.json
Em seguida, modificamos nossa função do Lambda para retornar um valor de parâmetro do evento.
def lambda_handler(event, context): print("HelloWorldFunction invoked") return { "statusCode": 200, "body": json.dumps({ "message": event['queryStringParameters']['parameter2'], }), }
Em seguida, invocamos localmente nossa função do Lambda e fornecemos nosso evento personalizado.
$
sam local invoke --event
Invoking app.lambda_handler (python3.9) Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST some log END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Init Duration: 1.63 ms Duration: 564.07 ms Billed Duration: 565 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"value\"}"}%events/apigateway_event.json
Passe variáveis de ambiente ao invocar uma função do Lambda localmente
Esse aplicativo tem uma função do Lambda que usa uma variável de ambiente para o nome de uma tabela do Amazon DynamoDB. Este é um exemplo da função definida no modelo AWS SAM:
AWSTemplateFormatVersion: 2010-09-09 Transform: AWS::Serverless-2016-10-31 ... Resources: getAllItemsFunction: Type: AWS::Serverless::Function Properties: Handler: src/get-all-items.getAllItemsHandler Description: get all items Policies: - DynamoDBReadPolicy: TableName: !Ref SampleTable Environment: Variables: SAMPLE_TABLE: !Ref SampleTable ...
Queremos testar localmente nossa função do Lambda enquanto ela interage com nossa tabela do DynamoDB na nuvem. Para fazer isso, criamos nosso arquivo de variáveis de ambiente e o salvamos no diretório raiz do nosso projeto como locals.json
. O valor fornecido aqui SAMPLE_TABLE
faz referência à nossa tabela do DynamoDB na nuvem.
{ "getAllItemsFunction": { "SAMPLE_TABLE": "dev-demo-SampleTable-1U991234LD5UM98" } }
Em seguida, executamos sam local invoke
e passamos nossas variáveis de ambiente com a opção --env-vars
.
$
sam local invoke
Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST some log END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Init Duration: 1.63 ms Duration: 564.07 ms Billed Duration: 565 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode":200,"body":"{}"}getAllItemsFunction
--env-varslocals.json
Saiba mais
Para obter uma lista de todas as opções sam local invoke
, consulte sam local invoke.
Para uma demonstração do uso sam local
, consulte AWS SAM para desenvolvimento local. Testando recursos Nuvem AWS de ambientes de desenvolvimento local