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.