![Câmara dos Representantes dos EUA aprova projeto de lei FIT21 em votação bipartidária para regras do mercado de criptografia](https://optimuscloud.com.br/wp-content/uploads/2024/05/Camara-dos-Representantes-dos-EUA-aprova-projeto-de-lei-FIT21-150x150.png)
Câmara dos Representantes dos EUA aprova projeto de lei FIT21 em votação bipartidária para regras do mercado de criptografia
23 de maio de 2024![Comece a usar a multiplataforma Kotlin com um projeto Network Listener](https://optimuscloud.com.br/wp-content/uploads/2024/05/1716472805_Comece-a-usar-a-multiplataforma-Kotlin-com-um-projeto-Network-150x150.jpg)
Comece a usar a multiplataforma Kotlin com um projeto Network Listener
23 de maio de 2024A implantação de aplicativos na nuvem apresenta vários desafios, principalmente centrados na complexidade do gerenciamento da infraestrutura. Os desenvolvedores passaram a contar com a infraestrutura como código (IaC) para agilizar e automatizar esses processos. No entanto, está a surgir um novo paradigma, Infraestrutura a partir de Código (IfC), para melhorar ainda mais a eficiência da implementação e o alinhamento entre a infraestrutura e o desenvolvimento de aplicações.
Terraform recentemente ganhou as manchetes devido à aquisição da HashiCorp pela IBM, gerando discussões que especulam sobre seu futuro. No entanto, tais conjecturas ignoram o significado duradouro do Terraform e da Infraestrutura como Código (IaC) em projetos futuros e existentes.
É provável que o Terraform não apenas continue a ser usado por equipes de todo o setor, mas também veja mais melhorias em vez de ser substituído. O foco deve mudar para como podemos evoluir para atender às novas demandas dos ambientes de nuvem modernos, o que sem dúvida incluirá melhorias na forma como aproveitamos a IaC.
Neste artigo, discutirei o IfC como um aprimoramento do IaC. Ao longo deste artigo, usarei o Terraform como meu IaC padrão, mas os conceitos se aplicam a outras soluções IaC, como OpenTofu, Pulumi e muito mais. Como parte da equipe Nitric, usarei nossa estrutura de código aberto para exemplos de código para ajudar a explicar alguns dos conceitos do IfC.
O papel da IaC na implantação em nuvem
Os aplicativos em nuvem são desenvolvidos dando aos aplicativos acesso à funcionalidade de uma variedade de serviços distribuídos. Construir um aplicativo requer blocos de construção como cálculos, buckets de armazenamento, armazenamentos de valores-chave, filas, mensagens de eventos e tarefas agendadas. Estes serviços geralmente não se conhecem; a cola é o código do aplicativo que você escreve para utilizar seus recursos exclusivos.
Você também precisa configurar os serviços em nuvem para que funcionem conforme o esperado. Por exemplo, os armazenamentos de valores-chave oferecem suporte de replicação integrado, copiando automaticamente os dados em vários nós de armazenamento. Isso ajuda na recuperação automática de desastres; você ainda terá seus dados em caso de falha do servidor.
No início, a configuração de um ambiente de nuvem envolvia configuração manual por meio dos consoles da nuvem. As equipes fariam login no console e configurariam manualmente serviços como buckets de armazenamento, configurariam políticas de gerenciamento de acesso de identidade (IAM) e ajustariam permissões para funções de nuvem, como AWS Lambda, para acessar esses recursos. À medida que os projetos eram dimensionados, esse método geralmente exigia seguir um conjunto crescente de etapas documentadas por projeto, o que exigia muita mão-de-obra e estava sujeito a erros humanos. Isso causou inconsistências em diferentes ambientes e projetos, basicamente um pesadelo de manutenção.
Para combater esses desafios, as ferramentas IaC, incluindo Pulumi, Terraform, AWS Cloud Development Kit (CDK) e Ansible, têm sido fundamentais. Eles melhoram a automação e a velocidade, o que não apenas agiliza os processos de implantação, mas também minimiza os riscos de erros humanos, o que é crucial para manter ambientes confiáveis durante o escalonamento ou implantações multirregionais. Ao definir a infraestrutura como código, essas ferramentas permitem o controle de versões, possibilitando um melhor gerenciamento de alterações e facilitando reversões fáceis quando necessário. Isto marca um avanço significativo em relação aos processos manuais, que muitas vezes carecem de transparência.
Pulumi permite que os desenvolvedores usem linguagens familiares como JavaScript, Python e Go, tornando-o altamente acessível. A abordagem declarativa do Terraform especifica o estado desejado sem gerenciar transições de estado, ideal para estratégias de implantação claras e diretas. O AWS CDK se beneficia da forte integração com os serviços da AWS, usando linguagens de programação familiares para definir recursos, e o Ansible, normalmente conhecido por gerenciamento de configuração, também facilita a implantação de infraestrutura, fornecendo uma ferramenta versátil para implantação de aplicativos e configuração de infraestrutura.
A necessidade de aprimorar a IaC
Coletivamente, estas ferramentas IaC transformaram significativamente as operações organizacionais, levando a infraestruturas mais ágeis, seguras e eficientes. No entanto, apesar das suas vantagens, o IaC tem limitações, particularmente na manutenção da sincronização entre o código da aplicação em rápida evolução e os scripts estáticos do IaC.
Quando um desenvolvedor decide substituir um bucket de armazenamento gerenciado manualmente por uma alternativa de serviço de terceiros, os scripts IaC correspondentes também devem ser atualizados manualmente, o que se torna complicado e sujeito a erros à medida que os projetos são ampliados. A dessincronização que ocorre entre o aplicativo e seu tempo de execução pode levar a sérias implicações de segurança, onde os recursos recebem muito mais permissões do que necessitam ou são deixados desonestos e esquecidos.
Basicamente, manter a consistência entre vários projetos e organizações torna-se um grande obstáculo com impactos económicos no projeto. Então, o que nós podemos fazer sobre isso?
Apresentando a infraestrutura do código (IfC)
A principal lacuna entre os aplicativos e seus tempos de execução na nuvem é a incapacidade de permanecerem sincronizados entre si.
IfC é uma abordagem inovadora que aprimora o paradigma tradicional de IaC, mantendo o código e a infraestrutura em perfeita sincronização. Este método não apenas automatiza o provisionamento e a implantação da infraestrutura, mas também a alinha continuamente com as alterações no código do aplicativo.
Ao integrar o IfC nos fluxos de trabalho de desenvolvimento juntamente com o IaC, as organizações podem alcançar um nível sem precedentes de consistência e eficiência, uma vez que tanto as bases de código como a sua infraestrutura subjacente são geridas em conjunto. Essa integração perfeita evita discrepâncias entre os ambientes operacionais e de desenvolvimento, reduzindo falhas de implantação e sobrecarga operacional. Adicionar IfC para complementar IaC representa um avanço significativo nas práticas de DevOps, permitindo implantações de aplicativos mais rápidas, confiáveis e escaláveis.
Sempre que um aplicativo muda, o IfC pode ajudar a fornecer recursos e configurações que reflitam com precisão seus requisitos de tempo de execução, eliminando grande parte do trabalho manual normalmente envolvido. Essa automação inclui a configuração de funções e permissões do IAM, ajudando a garantir que a segurança e a conformidade sejam mantidas perfeitamente.
Como IfC e IaC trabalham juntos
Sincronizar um aplicativo com seus recursos e configuração de tempo de execução é um processo de duas etapas. A estrutura IfC é responsável por construir automaticamente uma especificação de recurso, inferindo requisitos do código da aplicação e, em seguida, mapeando esses requisitos para módulos IaC extensíveis e flexíveis que atendem à solicitação.
Etapa 1: criar uma especificação de recurso
Primeiro, IfC constrói uma especificação de recursos dos requisitos atuais de tempo de execução da aplicação. O trecho de código a seguir é mais informativo do que você imagina.
Se você examiná-lo sem focar na lógica do aplicativo, poderá inferir que esse aplicativo requer:
- Uma API chamada
milkyway
com:- Um cálculo/manipulador que é roteado no
/planets/:id
caminho.- Um armazenamento de valores-chave chamado
planets_store
.- Este manipulador pretende
get
eset
valores.
- Este manipulador pretende
- Um armazenamento de valores-chave chamado
- Um bucket de armazenamento chamado
planets_images
.-
- Este manipulador pretende
read
ewrite
contente.
- Este manipulador pretende
-
- Um cálculo/manipulador que é roteado no
A hierarquia e a intenção fornecidas pelo desenvolvedor permitem criar uma especificação de recurso que comunique efetivamente os requisitos de tempo de execução do aplicativo. É importante observar que os desenvolvedores não escrevem manualmente configurações detalhadas de infraestrutura; eles estão simplesmente codificando o aplicativo para aproveitar os recursos necessários de um kit de desenvolvimento de software (SDK).
Para construir os requisitos de especificação de tempo de execução, não há necessidade de conhecer ou especificar políticas relacionadas à infraestrutura, como as configurações de replicação de dados do armazenamento de chave-valor. Na verdade, como acontece com os projetos IaC tradicionais, o desenvolvedor não é obrigado a saber em qual armazenamento de valores-chave seu software será executado. Eles só precisam saber que ele estará disponível e que seu aplicativo terá funções e permissões adequadas para acessá-lo. No exemplo acima, isso é simplesmente definir e obter valores.
A beleza de automatizar uma especificação de recurso com IfC é que ela não é estática; é uma documentação viva que é atualizada automaticamente sempre que o aplicativo precisa de implantação, teste ou análise. Esta adaptabilidade é crucial porque ajuda a garantir que a infraestrutura esteja sempre alinhada com o estado atual da aplicação sem intervenção manual.
![Especificação de recursos conforme visualizado pela estrutura Nitric](https://optimuscloud.com.br/wp-content/uploads/2024/05/Terraform-nao-esta-morto.png)
Especificação de recursos conforme visualizado pela estrutura Nitric.
Etapa 2: Cumprir os requisitos com IaC
Agora que o IfC criou automaticamente uma especificação que lista todos os recursos necessários, seu relacionamento entre si e as permissões necessárias, a estrutura do IfC pode agilizar o processo de provisionamento aproveitando o IaC.
Provedores de IaC como o Terraform utilizam o conceito de módulos. Um módulo Terraform é um conjunto reutilizável e independente de configurações do Terraform que encapsula um conjunto específico de recursos de infraestrutura. Os módulos simplificam e organizam o código de infraestrutura e permitem a reutilização de configurações em diferentes projetos ou em diferentes partes do mesmo projeto.
Segue-se um exemplo de um módulo necessário para fornecer um segredo, e é aqui que as equipas podem aplicar a sua governação de infraestrutura. Este exemplo implementa uma maneira consistente de marcar os recursos secretos "x-nitric-${var.stack_id}-name"
=
var.secret_name
e especifica a política de replicação auto
{}
que é aplicado universalmente para todos os segredos implantados neste projeto.
O segredo também exigirá funções e permissões para que o código do aplicativo possa acessá-lo. O trecho a seguir mostra as possíveis maneiras pelas quais um aplicativo pode declarar e especificar sua intenção para um segredo. Existem dois tipos de intenções disponíveis para este segredo: access
e putting
e a especificação do recurso capturará detalhes que a estrutura IfC usará para determinar quais permissões conceder.
Os módulos mostrados abaixo não devem ser desconhecidos dos desenvolvedores do Terraform. Em muitos casos, a transição para aproveitar os módulos Terraform em uma estrutura IfC envolverá o uso de recursos que já foram desenvolvidos, exigindo apenas pequenas modificações para expor parâmetros quando um controle refinado for necessário.
Usar esta técnica de mapeamento de requisitos de recursos para módulos para todos os recursos permite que as equipes simplifiquem a comunicação de requisitos do aplicativo para a infraestrutura.
Frameworks como o Nitric aumentarão continuamente seu suporte a recursos, capacitando os desenvolvedores com um kit de ferramentas de recursos de autoprovisionamento que podem ser visualizados e até mesmo provisionados localmente para uma experiência de emulação de desenvolvimento offline.
Aprimore IaC com automação de IfC
Ao automatizar o provisionamento e o gerenciamento da infraestrutura, o IaC não apenas simplifica o fluxo de trabalho do DevOps, mas também o aprimora significativamente. Em vez de as equipes de DevOps revisarem manualmente as atualizações de aplicativos e atualizarem meticulosamente os scripts do Terraform, elas agora podem contar com as especificações de recursos do IfC para determinar se seus módulos do Terraform exigem modificações.
Esta mudança não só reduz o potencial de erro humano, mas também acelera os ciclos de implementação, para que as equipas possam concentrar-se mais na inovação e menos na gestão da infraestrutura. À medida que as organizações continuam a adotar ferramentas IaC como Terraform, Pulumi e Ansible, o papel da intervenção manual diminui, abrindo caminho para um processo de desenvolvimento mais eficiente, confiável e ágil.
Se você quiser dar uma olhada neste conceito, Nitric é uma estrutura IfC de código aberto para construir na linguagem de sua escolha e implantar aplicativos em suas nuvens AWS, Google Cloud Platform e Microsoft Azure.
O post Terraform não está morto apareceu pela primeira vez em The New Stack.