A maioria dos desenvolvedores não usa infraestrutura como código (IaC), argumenta o líder de tecnologia da AWS, Chris Munns. Mas para os 10% a 15% dos desenvolvedores que usam tecnologias de desenvolvimento modernas, como IaC, vão para o lixo. Mesmo que o público da IaC permaneça relativamente pequeno, o interesse em Python e na inteligência artificial está acelerando a adoção, como observou o CEO da Pulumi, Joe Duffy, em uma entrevista. Nas empresas que veem a tecnologia como uma vantagem competitiva, os desenvolvedores estão se aprofundando na infraestrutura. IaC é a ferramenta preferida para fazer isso com sucesso.
O novo normal de TI
Na época em que os desenvolvedores precisavam solicitar recursos de TI, eles estavam em grande parte isolados do mundo dos bancos de dados, armazenamentos de valores-chave, filas de mensagens, redes e outras preocupações fundamentais de “infraestrutura”. Os desenvolvedores eram de propriedade do código do aplicativo, os arquitetos corporativos eram de propriedade da infraestrutura de aplicativos e os servidores, a configuração e a escala eram de propriedade da TI.
Em seguida, a computação distribuída – uma onda que começou com máquinas virtuais, cresceu com contêineres e depois se alastrou com o Kubernetes – empurrou os desenvolvedores para o extremo da infraestrutura em nuvem. Por mais banais que as frases “mudar para a esquerda” e “você constrói, você é o dono” se tornaram, elas refletem as responsabilidades muito mais profundas que o desenvolvedor médio carrega hoje. Os desenvolvedores não estão apenas escrevendo aplicativos, mas também fazendo todo o resto que antes pertencia aos especialistas em infraestrutura.
Estabelecer recursos e estruturas de computação exige tempo e conhecimento, e tem sido um estado constante de debate tanto para os desenvolvedores quanto para as equipes da plataforma, permitindo-lhes encontrar a abstração certa para exatamente o que a interface do desenvolvedor deveria ser para os recursos da nuvem. O JavaScript tornou o navegador programável e desencadeou um renascimento de aplicativos web e experiências móveis que ainda está em andamento. Estamos à beira de um avanço semelhante para tornar a infraestrutura em nuvem verdadeiramente programável para os desenvolvedores.
As primeiras ondas de infraestrutura como código
A infraestrutura como código (IaC) está na moda hoje, mas na verdade não é nova. O conceito remonta a mais de 50 anos e descreve princípios básicos de automação de infraestrutura. Assim como a arquitetura orientada a software (SOA) evoluiu a arquitetura de aplicativos de aplicativos monolíticos para padrões de microsserviços, a IaC tem sido o movimento lento que está desafiando quais deveriam ser os blocos de construção básicos para como pensamos a infraestrutura em nuvem.
O IaC realmente ganhou destaque na década de 2010, quando Puppet, Chef e Ansible introduziram métodos IaC para a configuração de máquinas virtuais. Chef era muito querido por permitir que os desenvolvedores usassem linguagens de programação como Ruby e pela reutilização e compartilhamento que advinham da capacidade de usar as convenções de uma linguagem familiar.
Durante a década seguinte, o movimento IaC entrou em uma nova era à medida que as plataformas de provedores de nuvem pública amadureceram e o Kubernetes se tornou o modelo operacional de nuvem de fato. O Terraform da HashiCorp se tornou o garoto-propaganda da IaC, introduzindo novas abstrações para a configuração de recursos de nuvem e trazendo uma linguagem específica de domínio (DSL) chamada HashiCorp Configuration Language (HCL), projetada para poupar os desenvolvedores do encanamento de infraestrutura de nuvem de nível inferior. AWS CloudFormation e Azure Resource Management foram outros dois principais concorrentes nesta onda de IaC.
As linguagens específicas de domínio foram um caminho errado?
Nessa evolução para DSLs, o CEO da Pulumi, Joe Duffy, acredita que o movimento IaC tomou o caminho errado. “Passei anos na comunidade de linguagens de programação”, diz ele, “e tínhamos um ditado que dizia que ‘toda linguagem de domínio específico está destinada a se tornar uma linguagem de programação de uso geral acidental e mal projetada’. ” A complexidade da nuvem quebra DSLs, YAML e linguagens de marcação.
Duffy diz que o problema geral com as DSLs é como elas afastam os desenvolvedores e as equipes de engenharia de plataforma do gerenciamento da infraestrutura em nuvem com convenções de linguagem de programação familiares. “Certamente, se você olhar para IaC, ele está lentamente recriando a roda”, argumenta Duffy, “a partir da riqueza da linguagem, abstração e reutilização, gerenciadores de pacotes, ferramentas de teste, análise estática, editores e suas facilidades como preenchimento de instruções, verificação interativa de erros e documentação, refatoração e muito mais. As armadilhas são um jardim murado que proíbe ativamente os desenvolvedores de explorar os recursos da nuvem, ao mesmo tempo que prejudica a produtividade da equipe de infraestrutura.”
Usando linguagens familiares com infraestrutura em nuvem
“Tratar os desenvolvedores com luvas de pelica quando se trata de nuvem é um erro que vejo o tempo todo”, oferece Duffy. “IaC é empolgante porque transforma toda a nuvem em um conjunto programável e combinável de blocos de construção que podem ser usados para criar aplicativos mais ricos e poderosos.” Como indústria, passamos dos servidores de aplicativos de máquina única e dos sistemas operacionais de máquina única para a computação distribuída na nuvem, orquestrada pelo Kubernetes. Mas enquanto as abordagens DSL para IaC tentam mascarar a complexidade da infraestrutura dos desenvolvedores, Pulumi está permitindo que os desenvolvedores usem as convenções integradas nas linguagens de programação que já usam como interface principal para a nuvem.
“Tenho muita convicção de apoiar os ombros de gigantes sempre que pudermos”, enfatiza Duffy. “Existem problemas difíceis o suficiente para resolver por aí. Não precisamos criar artificiais apenas por diversão.”
A abordagem de Pulumi para IaC é infraestrutura multilíngue, com suporte para Node.js (JavaScript, TypesScript), Python, Go, .Net (C#, F#, VB) e Java. O catálogo de provedores Pulumi suportados abrange mais de 150 provedores de infraestrutura diferentes – e não apenas as grandes nuvens, mas empresas como Cloudflare, Snowflake, MongoDB, Confluent e muito mais.
“Usar linguagens que os (desenvolvedores) já conhecem elimina um enorme obstáculo mental ao fazer IaC”, diz Duffy. “Ele transforma os recursos da nuvem em blocos de construção programáveis que podem ser unidos como qualquer outro objeto em sua linguagem favorita.” Qual é o problema? Conforme ele continua, “A parte difícil passa a ser aprender sobre esses blocos de construção específicos, que sem dúvida são a ‘complexidade real’ inerente ao domínio do problema. Essencialmente, usar uma linguagem familiar remove toda a complexidade acidental, elimina a névoa e permite que as pessoas se concentrem apenas na resolução de problemas reais.”
Uma abordagem de infraestrutura que prioriza a linguagem
Quando pensamos em domínios de infraestrutura de aplicativos em linguagens maduras, como Java com J2EE e os vastos recursos Java para lidar com simultaneidade e código multithread, os desenvolvedores têm décadas de experiência árdua aproveitando os primitivos de suas linguagens favoritas. Esse desejo básico dos desenvolvedores e equipes de plataforma de usar as convenções de linguagem com as quais já estão familiarizados é especialmente forte com Python e IA, de acordo com Duffy. Enquanto as DSLs precisam ser dobradas e distorcidas para lidar com a complexidade, linguagens maduras como o Python resolvem esses problemas de escala imediatamente.
“A nuvem é um supercomputador gigante e a IA é o maior consumidor desse supercomputador que já vimos”, declara Duffy. “Neste mundo, ser capaz de programar o supercomputador de forma flexível e lidar com a complexidade que surge nessa escala é exatamente o motivo pelo qual criamos linguagens de programação incríveis para começar.” Os desenvolvedores realmente não querem mexer com a infraestrutura. “Embora a infraestrutura potencialize todas essas novas experiências de IA, não é nisso que a maioria dos engenheiros de IA sai da cama pensando”, argumenta Duffy. “Usar Python transforma uma ideia confusa e suja em uma coisa bonita e elegantemente programável, como qualquer outro software.”
Esta batalha entre DSLs e linguagens de programação gerais no espaço IaC não é nova. Em 2020, escrevi sobre novos modelos de linguagens de programação declarativas e como eles contrastam com linguagens imperativas neste domínio IaC. O que há de novo nesta batalha de linguagem declarativa versus linguagem de uso geral da IaC é a corrida do ouro da IA. Python é a pá que dezenas de milhões de desenvolvedores estão usando, e há um incentivo especial neste momento para poder raciocinar com a infraestrutura através das lentes de sua linguagem principal.