O blog da AWS
Testando funções do AWS Lambda com o AWS SAM remote invoke
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:
- Clone o repositório:
- Vá para o diretório raiz do repositório:
- 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):
- Implante o aplicativo em sua conta da AWS:
- 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:
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:
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.
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:
Usando a saída para o translateFunctionName, execute:
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:
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:
Em um segundo exemplo, quero invocar uma versão específica da função Lambda:
Se você precisar das duas opções:
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:
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:
- Em um terminal separado, inicie o processo de sincronização do AWS SAM com a opção watch:
- Em uma segunda janela ou guia, execute a função de invocação remota:
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.