Transformar a infraestrutura de nuvem em algo que os desenvolvedores podem programar.

Com a abundância de possibilidades oferecidas pela Inteligência Artificial, é conveniente simplificar por meio de abordagens familiares de desenvolvimento, como o uso de infraestrutura como código e Python.

Segundo Chris Munns, a maioria dos desenvolvedores não utiliza a infraestrutura como código (IaC). No entanto, para os 10% a 15% dos desenvolvedores que adotam tecnologias modernas, como o IaC, estão colhendo os benefícios. Embora o público interessado em IaC seja pequeno, o crescente interesse em Python e inteligência artificial está impulsionando sua adoção, conforme indicado pelo CEO da Pulumi, Joe Duffy, em uma entrevista. Em empresas que enxergam a tecnologia como uma vantagem competitiva, os desenvolvedores estão explorando profundamente a infraestrutura, utilizando o IaC como ferramenta principal para alcançar o sucesso.
A TI normal do futuro
Nos desenvolvedores eram frequentemente separados dos aspectos técnicos essenciais, como bancos de dados, armazenamento de dados, comunicação entre sistemas e outras questões relacionadas à infraestrutura. Os desenvolvedores se concentravam no desenvolvimento de códigos de aplicativos, enquanto arquitetos corporativos cuidavam da infraestrutura de aplicativos e servidores eram gerenciados pela equipe de TI em termos de configuração e dimensionamento.
Em seguida, a computação distribuída – uma tendência que teve início com as máquinas virtuais, evoluiu para os contêineres e agora se destaca com os desenvolvedores Kubernetes – foi levada para as camadas mais profundas da infraestrutura de nuvem. Expressões como “sair para a esquerda” e “você constrói, você possui”, apesar de já batidas, refletem as novas e mais profundas responsabilidades que os desenvolvedores têm atualmente. Além de desenvolver aplicativos, os desenvolvedores agora também assumem tarefas que costumavam ser atribuídas a especialistas em infraestrutura.
A criação de recursos e estruturas de computação requer tempo e expertise, o que tem sido uma fonte contínua de frustração tanto para os desenvolvedores quanto para as equipes de plataforma que buscam a abstração ideal para a interface do desenvolvedor em relação aos recursos de nuvem. Assim como o JavaScript revolucionou a programação do navegador web e impulsionou o surgimento de aplicações web e experiências móveis em evolução, estamos à beira de um avanço semelhante na tornada da infraestrutura de nuvem totalmente programável para os desenvolvedores.
As primeiras implementações de infraestrutura sendo definida como código.
A ideia de automatização da infraestrutura, conhecida como infraestrutura como código (IaC), tem sido um conceito antigo, com mais de 50 anos de existência. Assim como a arquitetura orientada para o software (SOA) transformou a arquitetura de aplicações monolíticas em microsserviços, o IaC tem sido uma tendência em evolução que está questionando as bases tradicionais da infraestrutura de nuvem.
Durante a década de 2010, a Infraestrutura como Código (IaC) ganhou destaque com a introdução de métodos por Puppet, Chef e Ansible para configurar máquinas virtuais. Chef foi apreciado por possibilitar que os desenvolvedores utilizassem linguagens de programação como Ruby e pela facilidade de reutilização e compartilhamento oferecida ao utilizar as convenções de uma linguagem conhecida.
Durante a próxima década, houve avanços significativos no movimento de Infraestrutura como Código (IaC), impulsionados pela evolução das plataformas de nuvem pública e pela ascensão do Kubernetes como padrão operacional na nuvem. O Terraform da HashiCorp se destacou como uma ferramenta essencial do IaC, introduzindo novas formas de configurar recursos na nuvem e apresentando a linguagem específica de domínio (DSL) HashiCorp Configuration Language (HCL) para simplificar a gestão da infraestrutura em nuvem. AWS CloudFormation e Azure Resource Management também tiveram papel importante nesse cenário de expansão do IaC.
As linguagens de domínio específico foram utilizadas de forma inadequada?
Na sua jornada em direção às DSLs, Joe Duffy, CEO da Pulumi, argumenta que o movimento IaC tomou um caminho equivocado. Ele afirma que, durante anos, a comunidade de programação teve a crença de que toda linguagem específica de domínio eventualmente se transformaria em uma linguagem de programação geral, de forma acidental e mal planejada. A complexidade da computação em nuvem torna as DSLs, YAML e linguagens de marcação inadequadas.
Duffy afirma que um dos principais problemas das DSLs é afastar os desenvolvedores e equipes de engenharia de plataforma da gestão da infraestrutura de nuvem, utilizando convenções de linguagem de programação conhecidas. Ele argumenta que, ao olhar para a Infraestrutura como Código (IaC), percebe-se que este tem lentamente reinventado a roda em termos de riqueza linguística, abstração, reutilização, gerenciadores de pacotes, ferramentas de teste, análise estática, editores e suas funcionalidades, como conclusão de declarações, verificação de erros interativos e documentação, refatoração, entre outros. Segundo Duffy, as armadilhas das DSLs constituem um ambiente restrito que impede ativamente os desenvolvedores de explorar as capacidades da nuvem, ao mesmo tempo em que reduz a produtividade da equipe de infraestrutura.
Utilizando linguagens comuns em conjunto com a infraestrutura de computação em nuvem.
“Segundo Duffy, é comum cometer o erro de tratar os desenvolvedores com cautela ao lidar com a nuvem. O IaC é empolgante porque torna toda a nuvem programável, permitindo que os desenvolvedores construam aplicações mais avançadas. A indústria está evoluindo de servidores e sistemas operacionais individuais para computação distribuída na nuvem, com Kubernetes orquestrando tudo. Enquanto abordagens DSL para o IaC tentam simplificar a infraestrutura para os desenvolvedores, o Pulumi permite que eles usem as convenções de suas linguagens de programação habituais como interface principal para a nuvem.”
“Para Duffy, é importante reconhecer a importância de se apoiar nos conhecimentos e conquistas daqueles que vieram antes de nós. Ele destaca que há desafios reais a serem enfrentados, e não é necessário inventar problemas apenas para se distrair.”
A maneira como Pulumi lida com a Infraestrutura como Código é versátil, permitindo o uso de várias linguagens, como Node.js (JavaScript, TypesScript), Python, Go, .Net (C#, F#, VB) e Java. Além disso, Pulumi oferece suporte para mais de 150 fornecedores de infraestrutura distintos, incluindo não apenas as grandes plataformas de nuvem, mas também empresas como Cloudflare, Snowflake, MongoDB, Confluent, entre outras.
“Segundo Duffy, utilizar linguagens que os desenvolvedores já conhecem elimina uma grande barreira mental ao implementar a infraestrutura como código. Isso permite que os recursos da nuvem sejam transformados em componentes programáveis que podem ser combinados como qualquer outro objeto na linguagem de programação preferida do usuário. A principal dificuldade, então, reside em aprender sobre esses componentes específicos, que representam a complexidade intrínseca do problema em questão. Em resumo, o uso de uma linguagem familiar simplifica o processo ao remover a complexidade acidental, permitindo que as pessoas foquem em resolver problemas reais.”
Uma análise inicial da linguagem utilizada na infraestrutura.
Quando se trata de domínios de infraestrutura de aplicativos em linguagens consolidadas, como Java com J2EE e suas amplas capacidades para lidar com concorrência e código multithreaded, os desenvolvedores têm muitos anos de experiência aproveitando os recursos fundamentais de suas linguagens preferidas. A preferência básica dos desenvolvedores e equipes de plataforma por usar as convenções de linguagem com as quais já estão familiarizados é particularmente evidente com Python e Inteligência Artificial, de acordo com Duffy. Enquanto as DSLs precisam ser adaptadas e modificadas para lidar com a complexidade, linguagens maduras como Python resolvem esses problemas em grande escala de forma natural.
“A nuvem é comparada a um supercomputador gigante, sendo a inteligência artificial o principal consumidor desse supercomputador. A capacidade de programar de forma flexível esse supercomputador e lidar com a complexidade que surge nessa escala é a razão pela qual foram desenvolvidas linguagens de programação incríveis. Os desenvolvedores não desejam lidar com a infraestrutura, preferindo focar nas novas experiências de IA. Utilizar Python transforma essa tarefa em algo programável de forma elegante e bela, semelhante a qualquer outro software.”
Esta disputa entre Linguagens Específicas de Domínio (DSLs) e linguagens de programação gerais no campo da Infraestrutura como Código (IaC) não é recente. Em 2020, abordei os novos modelos de linguagens de programação declarativas e como elas se diferenciavam das linguagens imperativas nesse contexto de IaC. O que é inovador nessa disputa declarativa de IaC versus linguagens gerais é o boom da Inteligência Artificial. Python é a ferramenta que dezenas de milhões de desenvolvedores estão utilizando, e há um incentivo especial agora para conseguir raciocinar sobre a infraestrutura através da perspectiva da linguagem principal deles.