Como desenvolvedores sem servidor, desenvolvemos nossos serviços com infraestrutura como código (IaC) e, recentemente, com infraestrutura de código (IfC), mas, principalmente, isso significa que escrevemos código ou configuração para gerar nossos recursos da AWS. E se estivéssemos fazendo errado todos esses anos? E se houver uma maneira melhor e mais simples de construir serviços sem servidor na AWS?
Neste post, você aprenderá como construir serviços serverless desenhando diagramas de infraestrutura com o AWS Application Composer . Compartilharei minha experiência usando-o, seus pontos fortes e limitações atuais, e apresentarei minha lista de desejos.
Índice
IaC e DevOps são difíceis
Escrever arquivos de configuração de recursos ou código AWS CDK, SAM ou Terraform é difícil.
Você precisa aprender a usar a ferramenta, revisar sua documentação, aprender suas melhores práticas (leia meu post sobre melhores práticas do CDK aqui ) e escrever código ou configuração, e muito disso.
Historicamente, os desenvolvedores se afastaram da escrita de configurações que criam recursos como gráficos Helm (estremeço ao pensar no K8S), o que desacelerou a adoção dessas ferramentas entre os desenvolvedores. No entanto, com tecnologias como serverless que andam de mãos dadas com ferramentas mais novas como AWS CDK e SAM e a tendência recente de infraestrutura a partir do código, os desenvolvedores adotam a mentalidade DevOps e estão mais abertos a escrever código de infraestrutura. Mas ainda é difícil.
Hoje, quero apresentar uma nova opção que descobri: criar recursos desenhando um diagrama de recursos, sem necessidade de código.
Desenhando infraestrutura?!
Sim, desenhar diagramas de infraestrutura. Todos nós fazemos isso em algum momento no trabalho.
Como arquiteto, desenho projetos de alto nível que descrevem o comportamento do serviço e como os domínios do serviço se conectam entre si.
Os desenvolvedores pegam meus designs de alto nível e os transformam em designs de baixo nível que descrevem os recursos reais do AWS serverless do serviço. Usamos ferramentas de diagrama como Lucidchart ou Draw.io .
Os diagramas de infraestrutura de serviço são uma ótima ferramenta para apresentar um novo recurso, apresentar o serviço a um novo colega de equipe ou até mesmo obter uma compreensão clara de como o serviço funciona.
No entanto, os diagramas de infraestrutura também têm seus problemas.
Os diagramas estão (quase) sempre fora de sincronia
Com o passar do tempo, recursos são adicionados e bugs são corrigidos. Os desenvolvedores mudam os designs originais e alguns elementos de design são descartados devido à prioridade e nunca são desenvolvidos. Lembra daquele diagrama de infraestrutura original que você criou meticulosamente e do qual tinha tanto orgulho? Ele não está mais em sincronia com a infraestrutura de serviço real e perde valor rapidamente.
Para resolver esse problema, você sempre volta ao código ou aos arquivos de configuração de infraestrutura ( AWS CDK , no meu caso). O código não mente , mas olhar para o código leva tempo e habilidade.
A solução ideal seria sincronizar o diagrama de infraestrutura de serviço com o código de serviço. É uma verdadeira dor de cabeça lembrar de atualizar o diagrama constantemente. Ninguém faz isso.
Felizmente, a AWS criou uma maneira de fazer exatamente isso automaticamente , tornando a construção de infraestrutura de serviços mais intuitiva e divertida.
Eles conseguiram isso criando o AWS Application Composer , que permite desenhar diagramas de infraestrutura e convertê-los em modelos AWS SAM ou CloudFormation.
Compositor de aplicativos AWS
Alguns anos atrás, em 2021, a AWS comprou uma startup chamada "Stackery" que tentou resolver esse mesmo problema. Avançando para dezembro de 2022, o AWS Application Composer nasceu.
Ele entrou em GA (disponibilidade geral) há menos de um ano, em março de 2023. Durante o AWS re:invent 2023, eles fizeram um grande anúncio que chamou minha atenção.
Em vez de trabalhar no console e fazer diagramas, agora posso usar o Application Composer no conforto do meu IDE do Visual Studio.
Vamos analisar a experiência do usuário e o fluxo de desenvolvimento.
A experiência do usuário
Você pode iniciar um novo projeto vazio ou carregar um projeto existente. Decidi carregar meu projeto de modelo de livro de receitas do AWS Lambda Handler e ver como ele funciona.
Este é o diagrama de serviço (que, ironicamente, está fora de sincronia com a infraestrutura; não possui alarmes e painéis do CloudWatch):
Agora, vamos gerar um diagrama a partir do modelo CloudFormation do projeto existente e ver o que obtemos. No Mac, você clica em 'CMD + SHIFT + P' e escolhe o modelo CloudFormation/SAM do projeto:
Certifique-se de ter instalado a extensão do kit de ferramentas da AWS!
A saída inicial na tela é um diagrama contendo muitos recursos com conexões entre eles. Cada recurso tem seu ícone familiar da AWS, nome do recurso e sua configuração atual.
Um recurso super útil permite que você agrupe recursos em um grupo ou domínio lógico . Eu dividi meus recursos entre construções CDK, mas essa divisão não chegou ao CloudFormation. Levei dois minutos para classificar tudo, e obtive este lindo diagrama:
Tenho meu grupo de API CRUD (API GW, função Lambda, duas tabelas do DynamoDB), recursos do CloudWatch e grupo AppConfig e todas as conexões entre os recursos.
Impressão inicial: Estou impressionado; isso é altamente legível e resolve o problema de diagrama fora de sincronia. Lembra daquele problema com o diagrama fora de sincronia? Cada alteração que você fizer aqui será automaticamente traduzida e gravada no seu modelo SAM ou CloudFormation. Até mesmo os grupos! Eles adicionaram um novo atributo 'ApplicationComposer' no CloudFormation.
Vamos ver como é fácil adicionar e configurar novos recursos sem servidor.
Adicionando recursos sem servidor
Digamos que eu queira adicionar um novo recurso do CloudFormation. A busca de recursos é excelente e rápida; você pode adicionar mais de 1000 recursos. Vamos selecionar uma função Lambda. Somos recebidos com um menu fácil de usar com todos os campos essenciais com uma lista suspensa:
Normalmente, eu escreveria muito código CDK para a mesma coisa, mas aqui posso fazer isso na interface do usuário.
Adicionando recursos serverless menos comuns
Vamos tentar adicionar outro recurso, uma implantação do AppConfig.
Aqui, a experiência poderia ser melhor. O painel de configuração de recursos não tem listas suspensas predefinidas. Sou obrigado a escrever o código de configuração do CloudFormation. Muitos recursos menos comuns não têm as mesmas listas suspensas que a função Lambda tem, mas sim uma caixa de configuração de valor-chave onde você coloca todas as configurações. Isso é um pouco difícil de preencher e entender. No entanto, você tem um link para a documentação oficial do recurso, o que é um toque legal, e um botão de sugestões de IA para exemplos de configuração de amostra.
No geral, você está dourado se usar os recursos serverless mais comuns. Com o tempo, mais e mais recursos receberão o tratamento VIP. E com toda a justiça, posso comparar isso ao CDK não ter abstrações de construções L2 para muitos serviços novos.
Conectando Recursos
Você pode desenhar linhas de um recurso para outro para conectá-los. Você pode conectar recursos como um API Gateway a uma função Lambda, e isso configura a função específica como o destino da rota. Muito fácil. No entanto, apenas alguns recursos são suportados. Tentei conectar uma fila SQS a um tópico SNS e tive um pop-up de dica de ferramenta me dizendo que ainda não é suportado. Quando suportado, a experiência é fácil.
Limitações
Então, já discutimos duas limitações:
Configurações de recursos - falta de experiência suspensa, o que não é uma experiência ideal para o usuário, mas você pode fazer funcionar.
Não consigo conectar alguns recursos que deveriam ser conectados desenhando linhas entre eles.
No entanto, há outras limitações que devemos discutir.
Usei o Application Composer em um modelo CloudFormation de serviços de maior escala e fui recebido com um aviso de limite de recursos. Isso será resolvido, mas é uma limitação por enquanto.
O diagrama que obtive era muito grande, e levaria muito tempo para classificá-lo e agrupá-lo. Outra limitação é a falta de suporte a CDK. Sim, eu sei, gerar construções CDK L2 adequadas é extremamente difícil, mas um garoto pode sonhar...
Apesar de tudo isso, o serviço tem um futuro brilhante e se tornará parte da minha ferramenta diária quando essas limitações forem resolvidas.
Você deve usá-lo
A experiência é melhor do que escrever IaC? É mais intuitiva ou até mesmo divertida? Sim, 100%; quando todos os recursos são suportados e têm sua seleção drop-down personalizada, sim, é super fácil.
Ele substituirá o CDK para mim?
Não, não até que tenha suporte total ao CDK, mas tem seus casos de uso, especialmente para construção de diagramas de infraestrutura para fins de documentação.
Para quem é?
Ele serve para pessoas que querem desenhar designs de baixo nível ou obter uma representação precisa do diagrama de infraestrutura de seu serviço pequeno a médio, pessoas que querem construir provas de conceito rapidamente e, claro, serve para pessoas que usam CloudFormation ou SAM nativos. Mesmo que você não o use para construir recursos, faz sentido usá-lo para desenhar os diagramas de infraestrutura. Recentemente, adicionei uma imagem de recurso do Application composer à documentação do livro de receitas do AWS Lambda Handler porque era fácil de gerar e tornava a explicação do serviço mais simples.
Estou animado com o serviço e seu futuro; ele tem muito potencial e lugares para crescer. Depois que ele afinar a experiência do usuário, será difícil não usá-lo, e a equipe está indo na direção certa.
Por fim, se alguém do App Composer estiver lendo isso, minha lista de desejos e visão para o serviço estão abaixo.
Lista de desejos do Application Composer
Se conseguirmos atingir ao menos parte dessa lista de desejos, o Application Composer seria excelente:
Infraestrutura do Chat : Por que deveríamos nos preocupar em definir recursos de diagrama e conectar ícones quando temos utilitários de IA (Amazon Q e CodeWhisperer) diretamente no kit de ferramentas da AWS no IDE? Quero dizer ao meu assistente de IA o que projetar e fazer com que ele desenhe e configure o diagrama de infraestrutura.
Agrupamento automático de recursos - agrupe alguns tipos de recursos iguais - painéis do CW, recursos do AppConfig, etc.
Opção de diagrama de design de alto nível - crie uma opção para "mesclar" objetos em um grupo de domínio para abstraí-los, não apenas colocá-los em um grupo. Enquanto isso, vamos visualizar pilhas aninhadas em diagramas separados no IDE.
Resolva as limitações: adicione suporte ao L2 CDK e ofereça suporte a mais recursos com opções de configuração detalhadas.
Plugin Github/Jenkins para visualizar mudanças - quando reviso um PR, quero entender visualmente qual configuração de infraestrutura ou recursos foram adicionados, removidos ou alterados. Já temos algumas ferramentas que fazem isso parcialmente, como o ' CDK notifier .'
Elemento de copiar e colar - Não consegui fazer isso funcionar por algum motivo. Talvez seja um bug, mas gostaria de adicionar recursos semelhantes mais rápido.
Comments