O blog da AWS

Acelerando o desenvolvimento Serverless local com console para IDE e depuração remota para AWS Lambda

Por Brian Krygsman, um arquiteto de soluções senior na Amazon Web Services e Shridhar Pandey, gerente senior de produtos AWS Lambda na Amazon Web Services.

A experiência agradável do desenvolvedor (developer experience) é uma parte importante da criação eficiente de aplicativos Serverless, seja criando um script de automação ou desenvolvendo um aplicativo corporativo complexo. Embora o AWS Lambda tenha transformado o desenvolvimento moderno de aplicativos na nuvem com seu modelo de computação Serverless, os desenvolvedores passam um tempo significativo trabalhando em seus ambientes locais. Eles contam com IDEs familiares, ferramentas de depuração, estruturas de teste e se baseiam em fluxos de trabalho organizacionais estabelecidos para fornecer aplicativos prontos para produção.

Esta publicação aborda algumas melhorias recentes na experiência do desenvolvedor local. Dois novos recursos do Lambda, ou seja, console para IDE e depuração remota, preenchem ainda mais a lacuna entre a nuvem e o desenvolvimento local, permitindo que você aproveite todo o poder de suas ferramentas locais enquanto trabalha com as funções do Lambda na nuvem.

Visão geral

O desenvolvimento Serverless com o Lambda abrange ambientes locais e em nuvem, cada um com seus pontos fortes exclusivos. Enquanto o console Lambda oferece implantação e prototipagem rápidas, o desenvolvimento local fornece a profundidade e a flexibilidade necessárias para um fluxo de trabalho complexo de desenvolvimento de aplicativos que inclui testes de integração, implantação em ambientes compartilhados, pipelines de integração contínua/implantação contínua (CI/CD) e colaboração com outros membros da equipe. A experiência do desenvolvedor local abrange as ferramentas, os fluxos de trabalho e as práticas que os desenvolvedores usam em seus dispositivos locais para criar e manter seus aplicativos. Uma experiência intuitiva de desenvolvimento local ajuda as equipes de desenvolvimento de aplicativos a alcançar alta produtividade, garantir a qualidade do código e enviar as alterações para a produção com confiança.

Aprimoramentos recentes na experiência local de desenvolvimento Serverless

Os fluxos de trabalho de desenvolvimento local podem ser vistos como dois ciclos distintos, mas interconectados: o loop interno de escrever, testar e depurar código localmente e o loop externo que se estende à implantação da nuvem, testes de integração, pipeline de lançamento e monitoramento, conforme mostrado na figura a seguir. Para aplicativos Serverless, os desenvolvedores querem feedback imediato dentro do circuito interno, à medida que iteram no código da função e testam as integrações com os serviços da AWS. A AWS vem aprimorando constantemente a experiência de desenvolvimento local para desenvolvedores que criam no Lambda, com foco na aceleração do ciclo interno, no qual os desenvolvedores passam a maior parte do tempo.

Figura 1: Loop interno e externo

O Visual Studio Code (VS Code) é o IDE mais popular entre os desenvolvedores, de acordo com a Pesquisa de Desenvolvedores do Stack Overflow de 2024. A experiência aprimorada do IDE local permite que os desenvolvedores codifiquem, testem, depurem e implantem aplicativos Serverless baseados em Lambda com mais eficiência em seu IDE local ao usar o VS Code. Ele introduziu a interface do Application Builder, que simplifica todo o fluxo de trabalho de desenvolvimento, da configuração à implantação, com recursos como instruções guiadas para configuração do ambiente, aplicativos de amostra pré-configurados, gerenciamento de configurações de compilação e recursos aprimorados de depuração local. Isso elimina a necessidade de alternar entre várias interfaces. Essa experiência também se integra ao AWS Infrastructure Composer, que permite a criação visual de aplicativos diretamente do VS Code e fornece botões de ação rápida para tarefas comuns, como criar, implantar e invocar funções tanto localmente quanto na nuvem.

Figura 2 Passo a passo guiado no VS Code IDE

Com a extensa biblioteca de padrões pronta para uso do Serverless Land, disponível diretamente no VS Code, agora você pode navegar, pesquisar e implementar uma coleção de padrões Serverless pré-criados e selecionados sem sair do IDE. Essa integração facilita o uso de arquiteturas comprovadas e das melhores práticas da AWS ao criar aplicativos Serverless. O suporte Live Tail do Amazon CloudWatch Logs para funções Lambda no VS Code traz recursos de análise e streaming de logs em tempo real diretamente para o IDE, permitindo que você monitore e solucione problemas de suas funções do Lambda sem alternar o contexto. Seja testando um novo recurso ou depurando um problema, agora você pode ver o impacto imediato de suas alterações no código sem sair do IDE.

Console para IDE

Na última década, o console Lambda permitiu que os desenvolvedores começassem rapidamente a escrever funções do Lambda, permitindo que eles iterassem rapidamente alterando o código, testando e implantando suas funções. A experiência do IDE do console teve uma grande atualização de usabilidade em 2024, incluindo a introdução do Amazon Q Developer no console Lambda.

À medida que os aplicativos crescem em complexidade, os desenvolvedores geralmente precisam refatorar código, adicionar lógica complexa, incluir bibliotecas de utilitários como dependências ou lidar com casos extremos em suas funções do Lambda. Os exemplos incluem o uso de bibliotecas externas para cálculos complexos de tempo ou a adição de módulos que realizam validações específicas do chamador. Isso pode tornar as funções muito volumosas para serem gerenciadas no console.

Os desenvolvedores também podem querer mover suas funções para um processo de ciclo de vida de desenvolvimento de software (SDLC) que inclua estruturas de teste, ferramentas de verificação de segurança, modelos de infraestrutura como código (IaC) ou pipelines de CI/CD. Isso pode exigir que eles usem o controle de versão para colaborar com toda a equipe ou desenvolver com um agente de IA orientado por regras personalizadas.

Anteriormente, a configuração exigia a configuração manual de um ambiente de desenvolvimento local, incluindo IDE, tempo de execução da linguagem e cadeias de ferramentas de compilação/empacotamento. Em seguida, você tinha que baixar seu código de função, configuração e configurações de integração e copiá-los para o IDE. Você também precisou criar o modelo de IaC necessário com o AWS Serverless Application Model (AWS SAM). Só então você poderia implantar na nuvem para validar a precisão do código e da configuração e continuar com o fluxo de trabalho de desenvolvimento.

O novo console Lambda para o recurso IDE permite uma transição perfeita de um ciclo de código/teste hospedado na nuvem para um ambiente local, permitindo que você baixe o código e a configuração da função para o VS Code IDE local com apenas um clique. A partir daí, você pode facilmente adicionar dependências e confirmar o código no controle do código-fonte. Além disso, você pode sincronizar novamente com a nuvem para implantação ou exportar um modelo completo do AWS SAM com o recurso “Converter em SAM” e continuar gerenciando sua função como se tivesse começado localmente. O console para o IDE orienta você na configuração do IDE em seu dispositivo local, se você ainda não tiver um, junto com qualquer configuração necessária. As figuras a seguir mostram uma função aberta no console Lambda e, posteriormente, no IDE local do VS Code.

Figura 3: Uma função Lambda, conforme vista no IDE do console

Figura 4: A mesma função Lambda vista em um IDE local após a exportação do console para o IDE

Ao facilitar a transição do desenvolvimento de loop interno entre ambientes de desenvolvimento em nuvem e locais, o recurso de console para IDE facilita a rápida escalabilidade de uma ideia de prova de conceito para um aplicativo Serverless completo. Visite a documentação do Lambda para saber mais.

Depuração remota

Os desenvolvedores que criam aplicativos Serverless com o Lambda geralmente precisam testar e depurar integrações entre serviços. Embora as ferramentas de depuração locais ofereçam recursos valiosos, elas não replicam totalmente o ambiente de execução do Lambda e suas interações com outros serviços da AWS, especialmente ao lidar com recursos da Amazon Virtual Private Cloud (VPC) e permissões do AWS Identity and Access Management (IAM). Portanto, os desenvolvedores precisavam confiar em instruções impressas e registros detalhados e, para cenários complexos, precisavam implantar suas funções várias vezes para diagnosticar e resolver problemas. Esse processo estendeu os ciclos de desenvolvimento, especialmente ao solucionar problemas específicos do ambiente de produção. Os desenvolvedores gostariam de poder usar ferramentas avançadas de desenvolvimento local, como depuradores, para investigar problemas com o código executado em funções do Lambda implantadas na nuvem.

O novo recurso de depuração remota do Lambda agora permite que você depure suas funções em execução na nuvem diretamente do seu IDE VS Code local usando a extensão AWS Toolkit. Agora você pode depurar o ambiente de execução da função em execução na nuvem no contexto de segurança da função de execução do IAM com acesso aos recursos de VPC configurados e rastrear a execução em todos os fluxos de serviço na nuvem.

Para começar a depuração, habilite a depuração remota ao invocar sua função por meio do AWS Toolkit. Configure o caminho e a carga do código local e escolha Remote Invoke. O AWS Toolkit adiciona automaticamente uma camada Lambda de depuração gerenciada pela AWS à sua função, estende o tempo limite, publica uma versão temporária e reverte a alteração de configuração. Em seguida, o AWS Toolkit invoca a versão de depuração publicada. Em seguida, você pode começar a depuração. Esse recurso estabelece uma conexão segura entre seu depurador local e a função em execução na nuvem usando o AWS IoT Secure Tunneling. Quando sua sessão de depuração termina, o Lambda remove automaticamente a versão temporária da função. Você pode encerrar sua sessão de depuração explicitamente. Caso contrário, ele terminará automaticamente após 60 segundos de inatividade ou quando o tempo limite da função Lambda for atingido.

A figura a seguir mostra como definir um ponto de interrupção no VS Code IDE durante uma sessão de depuração remota pausa a execução para que você possa inspecionar os dados com os quais a função em execução na nuvem é chamada, junto com as variáveis da sua função. Você pode continuar avançando a partir desse ponto linha por linha para acompanhar a execução da função.

Figura 5: Depurador VS Code IDE conectado ao ambiente de execução de uma função Lambda em execução na nuvem

Tudo isso significa que você não precisa configurar emuladores locais para aproximar o comportamento da nuvem, gerenciar estruturas de teste complexas ou capturar continuamente registros caros com detalhes em nível de Trace para entender como seu código é executado. Seu depurador pode mostrar exatamente a aparência dos parâmetros de invocação, como evento e contexto, quando chegam ao manipulador de funções. Você pode analisar como sua função se comporta em diferentes entradas e inspecionar os valores das variáveis ao longo do caminho. Como seu código está sendo executado na nuvem, você pode até mesmo ver como a função de execução do IAM da sua função afeta seu comportamento. À medida que avança, você pode ver imediatamente quando uma chamada de serviço do AWS SDK falha devido à falta de permissões.

Além disso, você pode combinar isso com o recurso de console para IDE descrito anteriormente nesta postagem. Depois de baixar sua função e estruturar seu ambiente local com o console no IDE, você pode depurar a função conforme ela é executada na nuvem com a depuração remota. Isso lhe dá muito mais visibilidade da experiência do desenvolvedor do Lambda, o que ajuda você a encontrar problemas com mais facilidade, corrigir bugs com rapidez e fornecer novos recursos com rapidez. Siga as etapas na documentação para começar.

Melhores práticas

Embora a experiência aprimorada do desenvolvedor permita que você se mova mais rapidamente ao criar aplicativos Serverless usando o Lambda, você deve incorporar as melhores práticas recomendadas pela AWS em seu fluxo de trabalho de desenvolvimento de aplicativos.

Para funções grandes ou complexas, refatore o código seguindo as normas da linguagem de programação para que desenvolvedores e agentes de IA possam entendê-lo melhor. Por exemplo, mova a lógica comercial complexa, como cálculos de inventário, do manipulador de funções para um módulo separado. O console para IDE permite que você use suas ferramentas de refatoração locais para refatorar o código da função.

Para alocação isolada de custos e limites de segurança entre desenvolvimento e produção, use ambientes separados da AWS para diferentes estágios do seu processo de desenvolvimento. Você pode usar o console para o IDE para gerar um modelo do AWS SAM para seu aplicativo com propriedades da sua função e recursos relacionados da AWS, o que simplifica implantações consistentes em vários ambientes. Em seguida, você pode automatizar as implantações do seu modelo e código de função com um pipeline de CI/CD.

Durante o desenvolvimento, você deve testar suas funções na nuvem sempre que puder. A depuração remota facilita o teste de funções em execução na nuvem a partir do seu ambiente local, permitindo que você analise seu código para validar a lógica e as permissões de execução de funções com privilégios mínimos. Para otimizar o custo, concentre-se em registrar apenas o suficiente para recriar cenários problemáticos, incluindo o contexto necessário sobre a execução da função, em vez de registrar tudo o que você precisa para diagnosticar o comportamento. Isso também significa que você tem volumes de log menores para analisar.

Você deve recriar cenários de problemas em um ambiente em que controle o fluxo de entrada e possa usar a depuração remota. Quando possível, você deve usar um ambiente de desenvolvimento em que não haja outras fontes de invocações. Há uma pequena janela enquanto a depuração remota aplica a alteração temporária da configuração, na qual outro tráfego para $LATEST pode causar resultados inesperados, como uma inicialização a frio mais lenta. Por padrão, o depurador não inicializa quando executado em $LATEST. Você também deve usar aliases e versões para fixar explicitamente os ambientes na versão apropriada de uma função, o que evita esse problema e oferece um comportamento mais determinístico, além da capacidade de realizar implantações canárias.

Conclusão

Os aprimoramentos da experiência de desenvolvimento local, incluindo fluxos de trabalho de depuração e integrações de IDE, minimizam a configuração e a configuração necessárias para que os desenvolvedores criem localmente aplicativos Serverless usando o Lambda. Isso permite que os desenvolvedores se concentrem na criação da lógica de negócios. Esses aprimoramentos também fornecem o ciclo de feedback rápido que os desenvolvedores precisam, ao mesmo tempo em que garantem que o ambiente local reflita com precisão o comportamento da nuvem.

A AWS continua simplificando a experiência do desenvolvedor local para aplicativos Serverless em áreas como testes locais de integrações de serviços, fluxos de trabalho de IaC, recursos de solução de problemas e uso mais aprofundado da assistência de IA em fluxos de trabalho de desenvolvimento local. Tudo isso ajuda os desenvolvedores a criar aplicativos Serverless mais eficientes e seguros.

Para começar a usar esses novos recursos, visite o guia do desenvolvedor do Lambda para obter orientações detalhadas e melhores práticas. Compartilhe suas experiências e sugestões na página de problemas do Lambda no GitHub para ajudar a moldar o futuro da experiência do desenvolvedor Serverless.

Para obter mais recursos de aprendizado Serverless, visite Serverless Land. Da mesma forma, confira este vídeo de um AWS Community Builder mostrando os recursos mais recentes.

Este conteúdo foi traduzido da postagem original do blog, que pode ser encontrada aqui.

Autores

Brian Krygsman é um arquiteto de soluções senior na Amazon Web Services
Shridhar Pandey é gerente senior de produtos AWS Lambda na Amazon Web Services

Tradutores

Daniel Abib é Arquiteto de Soluções Sênior e Especialista em Amazon Bedrock 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 especialização em Machine Learning. Ele trabalha apoiando Startups, ajudando-os em sua jornada para a nuvem.

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

Nicolas Tarzia é Senior Technical Account Manager na AWS, com mais de 13 anos de experiencia, com ampla experiencia em arquitetura cloud, engenharia e design de software. Atualmente está habilitando empresas do ramo de ISV (Independent Software Vendors) simplificando a operação na nuvem e otimizando os custos em cloud. Sua area de interesse são tecnologias serverless.

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