Infra as Code com Pulumi: primeiros passos

Infra as Code com Pulumi: primeiros passos

Pulumi é uma ferramenta de infraestrutura como código open source que une o melhor do gerenciamento de infraestrutura de forma declarativa com as principais linguagens de programação de mercado, como Python, Node, .NET, entre outras. Essa ferramenta suporta diversos tipos de nuvens, infraestrutura nativa de nuvem, fornecedores de SaaS como Datadog ou TravisCI , e até mesmo nuvens privadas e híbridas.

Cuidados Iniciais!

O primeiro erro que muitos cometem na indústria quando o tema é Infra como Código e comparar Terraform e Pulumi. Não há uma conclusão objetiva de “X é melhor que Y”. Pulumi e Terraform têm dinâmicas diferentes, mesmo que entreguem o mesmo resultado. Pulumi, por exemplo, tem a vantagem de abstrair a complexidade de criação do manifesto da sua infraestrutura por uma linguagem que se aproxima muito do dia a dia de um desenvolvedor. Usar código elimina a necessidade de apontar e clicar na interface da nuvem para configurar a infraestrutura, um processo que é manual, tedioso, propenso a erros, irrepetível e simplesmente caótico. Exemplo em PythonOutro ponto a se pensar é a polêmica na aquisição do Terraform pela IBM recentemente e querer usar o Pulumi por ser Open Source. Pulumi sim é open source, porém é grátis apenas para uso individual. Em qualquer cenário de uso em empresas, ele também acarreta custos e recursos, assim como Terraform.

Como funciona o Pulumi?

Pulumi é uma ferramenta desenvolvida por desenvolvedores para desenvolvedores. Isso significa que ela cria um ambiente totalmente intuitivo e acolhedor para permitir uma experiência boa para quem utiliza a ferramenta. Pulumi tem a vantagem de usar o sistema “language-host”, onde você pode utilizar linguagens de programação para intermediar a criação da sua infra estrutura.Por trás das cenas, o Pulumi traduz a sua requisição na linguagem que você escreveu seu código, avalia as mudanças solicitadas, comparando com as últimas execuções feitas e dispara a arquitetura solicitada para seu cloud provider.

Como fica a estrutura de um projeto Pulumi ?

Dentro de um projeto, o Pulumi se divide em Projeto e Stack. O projeto é a pasta onde você armazenará todas as configurações que você irá implementar em conjunto com o arquivo Pulumi.yaml. Esse arquivo é responsável por representar as informações básicas do projeto e em qual linguagem iremos trabalhar

				
					name: my-project
runtime:
  name: nodejs
  options:
    typescript: false

				
			
Exemplo de Pulumi para Node.js

Outro ponto interessante é que o Pulumi tem nativamente o controle de Projetos e “ambientes” que chamamos de Stack. Diferentemente do Terraform, que é necessário o uso do Terragrunt para gerenciar complexidades de ambientes, o Pulumi vem com a solução nativa. Esses ambientes são chamados de “stack” e isolam completamente a sua execução para diferentes ambientes.

Comandos básicos para usar o Pulumi

Os comandos básicos que você utilizará no dia a dia serão os seguintes:

Para aprofundar na lista de comandos do Pulumi, acesse a lista de comandos oficiais: https://www.pulumi.com/docs/cli/

Bora testar na prática?

Todo exemplo utilizado está localizado aqui. Nele vamos criar uma instância de Cloud Run na GCP apontando para uma imagem Docker previamente publicada.

Primeiro, ao executar o comando pulumi new, nosso terminal irá apresentar alguns questionamentos sobre nome do projeto, descrição e o nome da stack que usaremos para criar esse recurso dentro do projeto.

No final da execução, teremos a estrutura de pastas seguindo essa lógica.No arquivo index.js, colocamos todo o código responsável por executar a criação de uma cloud-run.
				
					const pulumi = require("@pulumi/pulumi");
const gcp = require("@pulumi/gcp");

const _default = new gcp.cloudrun.Service("default", {
    name: "cloudrun-srv",
    location: "us-central1",
    template: {
        spec: {
            containers: [{
                image: "gcr.io/toolbox-sandbox-388523/flask-app:latest",
            }],
        },
    },
});

const noauth = gcp.organizations.getIAMPolicy({
    bindings: [{
        role: "roles/run.invoker",
        members: ["allUsers"],
    }],
});

const noauthIamPolicy = new gcp.cloudrun.IamPolicy("noauth", {
    location: _default.location,
    project: _default.project,
    service: _default.name,
    policyData: noauth.then(noauth => noauth.policyData),
});

// Export the status of the created Cloud Run service
exports.grun = _default.status;


				
			
Em seguida, executaremos o comando pulumi up para criar a nova infra estrutura.

E pronto! Nossa API está criada!

Se executarmos uma requisição HTTP, veremos o resultado:

Acelere a sua carreira

A Mentoria DevOps é um programa de mentoria de 12 meses com encontros semanais ao vivo, com um grupo seleto e restrito, onde estaremos do seu lado para mantê-lo relevante e atualizado no mercado de tecnologia, aprendendo e implementando as melhores práticas e ferramentas de DevOps.

Clique aqui para entrar na prioridade pela melhor oferta de lançamento

Conclusão

Pulumi pode se tornar uma ótima opção para desenvolvedores e testadores de software se aventurarem, essa ferramenta tenta abstrair as dificuldades do mundo Ops com o atrativo de usar sua linguagem de programação preferida, além de uma comunidade ativa e um repositório de códigos prontos para você praticar.