O blog da AWS

Testando funções do AWS Lambda com o AWS SAM remote invoke

Por Eric Johnson

 

Os desenvolvedores estão aproveitando a arquitetura orientada a eventos (EDA) para criar grandes aplicativos distribuídos. Para criar esses aplicativos, os desenvolvedores estão usando serviços gerenciados como AWS Lambda, AWS Step Functions e Amazon EventBridge para lidar com computação, orquestração e coreografia. Como esses serviços são executados na nuvem, os desenvolvedores também estão procurando maneiras de testar na nuvem. Com isso em mente, o AWS SAM está adicionando um novo recurso à CLI do AWS SAM chamado invocação remotaO AWS SAM Remote Invoke permite que os desenvolvedores invoquem uma função Lambda na nuvem da AWS a partir de seu ambiente de desenvolvimento. O recurso tem várias opções para identificar a função Lambda a ser invocada, o evento de carga e o tipo de saída

Usando invocação remota

Para testar o recurso de invocação remota, há um aplicativo chamado AWS SAM que possui duas funções do AWS Lambda. O TranslateFunction pega uma string de texto e a traduz para o idioma de destino usando o serviço de AI/ML Amazon Translate. O StreamFunction gera dados em um formato de streaming. Para executar essas demonstrações, certifique-se de instalar a CLI mais recente do AWS SAM.

Para implantar o aplicativo, siga estas etapas:

  1. Clone o repositório:
    git clone https://github.com/aws-samples/aws-sam-remote-invoke-example
  2. Vá para o diretório raiz do repositório:
    cd aws-sam-remote-invoke-example
  3. Crie os artefatos do AWS Lambda (use a opção —use-container) para garantir que o Python 3.10 e o Node 18 estejam presentes. Se ambos estiverem configurados em sua máquina, você pode ignorar esse sinalizador):
    sam build --use-container
  4. Implante o aplicativo em sua conta da AWS:
    sam deploy --guided
  5. Nomeie o aplicativo como “remote-test” e escolha todos os padrões.

Agora, o AWS SAM pode invocar remotamente as funções do Lambda implantadas com esse aplicativo. Use o comando a seguir para testar a função TranslateFunction:

sam remote invoke --stack-name remote-test --event '{"message":"I am testing the power of remote invocation", "target-language":"es"}' TranslateFunction

Essa é uma maneira rápida de testar um pequeno evento. No entanto, os desenvolvedores geralmente lidam com cargas grandes e complexas. A função de invocação remota do AWS SAM também permite que um evento seja passado como um arquivo. Use o comando a seguir para testar:

sam remote invoke --stack-name remote-test --event-file './events/translate-event.json' TranslateFunction

Com qualquer um desses métodos, o AWS SAM retorna a resposta da função Lambda como se ela tivesse sido chamada de um serviço como o Amazon API Gateway. No entanto, o AWS SAM também oferece a capacidade de obter a resposta retornada pelo kit de desenvolvimento de software (SDK) do Python, boto3. Esse formato fornece informações adicionais, como a versão que você invocou, se alguma nova tentativa foi tentada e muito mais. Para recuperar essa saída, execute a invocação com o parâmetro adicional —output com o valor de json.

sam remote invoke --stack-name remote-test --event '{"message": "I am testing the power of remote invocation", "target-language": "es"}' --output json TranslateFunction

Full output from SDK

Saída completa do SDK

Também é possível invocar funções do Lambda que não foram criadas no AWS SAM. Usando o nome de uma função do Lambda, o AWS SAM pode invocar remotamente qualquer função do Lambda que você tenha permissão para invocar. Quando você implantou o aplicativo de amostra, o AWS SAM imprime o nome da função Lambda no console. Use o comando a seguir para imprimir a saída novamente:

sam list stack-outputs --stack-name remote-test

Usando a saída para o translateFunctionName, execute:

sam remote invoke --event '{"message": "Testing direct access of the function", "target-language": "fr"}' <TranslateFunctionName>

Recentemente, o Lambda adicionou suporte a respostas de streaming de funções do Lambda. As funções de streaming não esperam até que toda a resposta esteja disponível antes de responderem ao cliente. Para mostrar isso, o StreamFunction gera vários trechos de texto e os envia por um período de tempo.

Para invocar a função, execute:

sam remote invoke --stack-name remote-test StreamFunction

Estendendo a chamada remota

Os SDKs da AWS oferecem opções diferentes ao invocar funções do Lambda por meio do serviço Lambda. Nos bastidores, o AWS SAM está usando o boto3 para potencializar a funcionalidade de invocação remota. Para fazer uso completo das opções do SDK para invocação de funções do Lambda, o AWS SAM oferece um sinalizador de parâmetros que pode ser usado várias vezes.

Por exemplo, talvez você queira executar uma invocação somente como simulação. Esse tipo de invocação testa a capacidade do Lambda de invocar a função com base em fatores como valores variáveis e permissões adequadas. O comando tem a seguinte formato:

sam remote invoke --stack-name remote-test --event '{"message": "I am testing the power of remote invocation", "target-language": "es"}' --parameter InvocationType=DryRun --output json TranslateFunction

Em um segundo exemplo, quero invocar uma versão específica da função Lambda:

sam remote invoke --stack-name remote-test --event '{"message": "I am testing the power of remote invocation", "target-language": "es"}' --parameter Qualifier='$LATEST' TranslateFunction

Se você precisar das duas opções:

sam remote invoke --stack-name remote-test --event '{"message": "I am testing the power of remote invocation", "target-language": "es"}' --parameter InvocationType=DryRun --parameter Qualifier='$LATEST' --output json TranslateFunction

Logging

Ao desenvolver aplicativos distribuídos, o log é uma ferramenta essencial para rastrear o estado de uma solicitação em microsserviços desacoplados. O AWS SAM oferece a funcionalidade sam logs para ajudar a visualizar registros e rastreamentos agregados do Amazon CloudWatch e do AWS X-Ray, respectivamente. No entanto, ao testar funções individuais, os desenvolvedores querem logs contextuais indicados para uma invocação específica. A nova função de invocação remota fornece esses logs por padrão. Retornando à translateFunction, execute o seguinte comando novamente:

sam remote invoke --stack-name remote-test --event '{"message": "I am testing the power of remote invocation", "target-language": "es"}' TranslateFunction

Logging response from remote invoke

Registrando o log da invocação remota

A invocação remota retorna a resposta da função Lambda, qualquer registro de dentro da função Lambda, seguida pelo relatório final do serviço Lambda sobre a própria invocação.

Combinação de invocação remota com o AWS SAM Accelerate

Os desenvolvedores estão constantemente se esforçando para eliminar a complexidade e o atrito e melhorar a velocidade e a agilidade no pipeline de desenvolvimento. Para ajudar os desenvolvedores serverless a atingir esse objetivo, a equipe do AWS SAM lançou um recurso chamado AWS SAM Accelerate. O AWS SAM Accelerate é uma série de recursos que movem a depuração e os testes da máquina local para a nuvem.

Para mostrar como o AWS SAM Accelerate e o Remote Invoke podem funcionar juntos, siga estas etapas:

  1. Em um terminal separado, inicie o processo de sincronização do AWS SAM com a opção watch:
    sam sync --stack-name remote-test --use-container --watch
  2. Em uma segunda janela ou guia, execute a função de invocação remota:
    sam remote invoke --stack-name remote-test --event-file './events/translate-event.json' TranslateFunction

A combinação dessas duas opções fornece um ambiente robusto de deploy automático e teste. Durante as iterações do código na função Lambda, sempre que você salva o arquivo, o AWS SAM sincroniza o código e todas as dependências com a nuvem. Conforme necessário, a invocação remota é então executada para verificar se o código funciona conforme o esperado, com o registro fornecido para cada execução

Conclusão

Os desenvolvedores serverless estão procurando a maneira mais eficiente de testar seus aplicativos na nuvem da AWS. Eles querem invocar uma função do AWS Lambda rapidamente sem precisar simular segurança, serviços externos ou outras variáveis de ambiente. Este blog mostra como usar o novo recurso de invocação remota do AWS SAM para fazer exatamente isso.

Esta postagem mostra como invocar a função Lambda, alterar o tipo e a localização da carga útil e alterar o formato de saída. Ele explica o uso desse recurso em conjunto com os recursos do AWS SAM Accelerate para agilizar o processo de desenvolvimento e teste sem servidor.

Para obter mais recursos de aprendizado sem servidor, visite Serverless Land.

 

Este artigo foi traduzido do Blog da AWS em Inglês.


Sobre o autor

Eric Johnson

 

 

 

 

Tradutor

Daniel Abib é Enterprise Solution Architect na AWS, com mais de 25 anos trabalhando com gerenciamento de projetos, arquiteturas de soluções escaláveis, desenvolvimento de sistemas e CI/CD, microsserviços, arquitetura Serverless & Containers e segurança. Ele trabalha apoiando clientes corporativos, ajudando-os em sua jornada para a nuvem.

https://www.linkedin.com/in/danielabib/