Criando aplicativos modernos de nuvem usando Pulumi e .NET Core

É com satisfação que anunciamos o suporte do .NET Core para Pulumi! Este comunicado significa que você pode declarar a infraestrutura de nuvem - incluindo todo o Azure, como Kubernetes, Funções, AppService, Máquinas Virtuais, CosmosDB e muito mais - usando seu idioma .NET favorito, incluindo C #, VB.NET e F #. Isso leva a nuvem inteira ao seu alcance sem precisar sair do editor de código, enquanto usa técnicas de "infraestrutura como código" prontas para produção.



Atualmente, a infraestrutura se tornou mais relevante à medida que recursos modernos de nuvem, como microsserviços, contêineres, sem servidor e armazenamentos de dados, permeiam a arquitetura do aplicativo. O termo "infraestrutura" abrange todos os recursos da nuvem que seu aplicativo precisa executar. As arquiteturas modernas exigem uma reflexão profunda sobre a infraestrutura ao criar seu aplicativo, em vez de esperar até depois. A abordagem da Pulumi ajuda os desenvolvedores e as equipes de infraestrutura a trabalharem juntos para fornecer novas funcionalidades inovadoras que aproveitam tudo o que a nuvem moderna tem a oferecer.

A Pulumi foi lançada há pouco mais de um ano e recentemente alcançou um marco estável de 1,0. Depois de trabalhar com centenas de empresas para colocar aplicativos em nuvem em produção, o .NET subiu rapidamente para um dos recursos mais solicitados pela comunidade da Pulumi. Especialmente porque muitos de nós da equipe Pulumi somos ex-pats do .NET, hoje estamos felizes em disponibilizar o Pulumi no .NET Core para suas necessidades de engenharia em nuvem.

O que é Pulumi?


O Pulumi permite que você use idiomas reais para expressar as necessidades de infraestrutura de seu aplicativo, usando uma técnica poderosa chamada "infraestrutura como código". Usando a infraestrutura como código, você declara a infraestrutura desejada e um mecanismo a provisiona para você, para que seja automatizado e fácil de replicar e robusto o suficiente para exigir requisitos de produção. A Pulumi leva essa abordagem um passo adiante, alavancando linguagens reais e tornando os padrões modernos de infraestrutura em nuvem, como contêineres e programas sem servidor, de primeira classe e fáceis.

Com o Pulumi for .NET, você pode:

  • Declare a infraestrutura usando C #, VB.NET ou F #.
  • Crie, atualize ou exclua automaticamente recursos da nuvem usando a infraestrutura da Pulumi como mecanismo de código, removendo apontar e clicar manualmente na interface do usuário do Azure e nos scripts ad-hoc.
  • Use seus IDEs e ferramentas favoritos, incluindo o Visual Studio e o Visual Studio Code, aproveitando recursos como preenchimento automático, refatoração e documentação interativa.
  • Detecte erros desde o início com erros de compilador padrão, analisadores Roslyn e um mecanismo de política específico da infraestrutura para impor segurança, conformidade e práticas recomendadas.
  • Reutilize qualquer biblioteca NuGet existente ou distribua a sua própria, seja para práticas recomendadas de infraestrutura, produtividade ou apenas padrões gerais de programação.
  • Implante de forma contínua, previsível e confiável usando os Pipelines do Azure DevOps, as Ações do GitHub ou uma das dezenas de integrações.
  • Crie aplicativos de nuvem escaláveis ​​usando tecnologias nativas clássicas da nuvem de infraestrutura, como Kubernetes, contêineres do Docker, funções sem servidor e bancos de dados altamente escaláveis, como o CosmosDB, em sua experiência de desenvolvimento principal, aproximando-os do código do aplicativo.

O SDK de código aberto gratuito da Pulumi, que inclui uma CLI e uma variedade de bibliotecas, habilita esses recursos. O Pulumi também oferece recursos premium para equipes que desejam usar o Pulumi na produção, como a integração do Azure Active Directory para identidade e políticas avançadas.

Um exemplo: banco de dados global com aplicativo sem servidor


Digamos que queremos criar um novo aplicativo que use o Azure CosmosDB para distribuição global de dados, para que o desempenho seja ótimo para os clientes, não importa em que parte do mundo eles estejam, com um aplicativo C # sem servidor que seja dimensionado automaticamente ao lado do banco de dados. Normalmente, usamos outras ferramentas para criar a infraestrutura, como JSON, YAML, uma DSL ou apontar e clicar manualmente no console do Azure. Essa abordagem é paritária para o curso, mas também assustadora - é complexa, irrepetível e significa que precisamos de um especialista em infraestrutura apenas para começar.

A abordagem Pulumi é apenas escrever código em nossa linguagem .NET favorita e a ferramenta Pulumi cuidará do resto. Por exemplo, esse código C # cria um banco de dados do Azure CosmosDB com um Azure AppService FunctionApp sem servidor que é dimensionado automaticamente ao lado do banco de dados:

using System; using System.Collections.Generic; using Pulumi; using Pulumi.Azure.AppService; using Pulumi.Azure.Core; using Pulumi.Azure.CosmosDB; class Program { static Task<int> Main(string[] args) { return Deployment.RunAsync(() => { var locations = new[] { "WestUS", "WestEurope", "SouthEastAsia" }; var rg = new ResourceGroup("myapp-rg", new ResourceGroupArgs { Location = locations[0], }); var app = new CosmosApp("myapp", new CosmosAppArgs { ResourceGroup = resourceGroup, Locations = locations, DatabaseName = "pricedb", ContainerName = "prices", Factory = (location, db) => { var func = new ArchiveFunctionApp("myapp-func", new ArchiveFunctionAppArgs { Location = location, Archive = new FileArchive("app"), AppSettings = new Dictionary<string, string> { ["COSMOSDB_ENDPOINT"] = db.Endpoint, }, }, ); return func.App.ID; }, }); }); } // Definitions of CosmosApp and ArchiveFunctionApp elided for brevity. // Actual runtime application code is stored in the "app" directory. // See link to the full example at the end of this article. } 
veja o Program.cs bruto hospedado no GitHub

Depois de escrever esse código, você executa a CLI do Pulumi com o comando pulumi up e ele primeiro mostra uma visualização dos recursos de infraestrutura que planeja criar. Após a confirmação, ele implantará todo o aplicativo e sua infraestrutura necessária em apenas alguns minutos.



Posteriormente, se você precisar fazer alterações, basta editar seu programa, executar novamente a CLI e ele fará as alterações incrementais necessárias para atualizar sua infraestrutura de acordo. Um histórico completo de suas implantações é registrado para que você possa ver facilmente quais alterações foram feitas.

Por que o .NET também é ótimo para infraestrutura?


Muitos de nós adoram usar o .NET para criar nossos aplicativos. Por que não usá-lo também para infraestrutura como código? De fato, já vimos acima algumas das vantagens acima em fazê-lo. Muitos deles provavelmente são evidentes se você já conhece e ama o .NET, no entanto, vamos recapitular brevemente.

Ao usar qualquer linguagem .NET, você obtém muitos recursos úteis para o seu código de infraestrutura:

  • Familiaridade: Não há necessidade de aprender DSLs ou linguagens de modelos de marcação.
  • Expressividade: use loops, condicionais, correspondência de padrões, LINQ, código assíncrono e muito mais para criar dinamicamente a infraestrutura que atenda às necessidades do ambiente de destino.
  • Abstração: encapsule padrões comuns em classes e funções para ocultar a complexidade e evitar copiar e colar o mesmo padrão repetidamente.
  • Compartilhamento e reutilização: entre em uma comunidade de aplicativos em nuvem e especialistas em infraestrutura, compartilhando e reutilizando as bibliotecas NuGet com sua equipe ou com a comunidade global.
  • Produtividade: use seu IDE favorito e obtenha a conclusão de instruções, vá para definição, verificação de erro em tempo real, refatoração, análise estática e documentação interativa.
  • Organização do projeto: use técnicas comuns de estruturação de código, como assemblies e namespaces, para gerenciar sua infraestrutura em um ou mais projetos.
  • Ciclo de vida do aplicativo: use sistemas e técnicas ALM existentes para gerenciar e implantar seus projetos de infraestrutura, incluindo controle de origem, revisão de código, teste e integração contínua (CI) e entrega (CD).

A Pulumi desbloqueia o acesso a todo o ecossistema .NET - algo que é fácil de tomar como garantido, mas está ausente de outras soluções baseadas em scripts JSON, YAML, DSLs ou CLI. Ter acesso a um idioma completo era essencial para ativar o exemplo do CosmosApp acima, que é um componente personalizado que usa internamente classes, loops, lambdas e até LINQ. Essa abordagem também ajuda os desenvolvedores e operadores a trabalharem melhor juntos usando uma base compartilhada. Adicione tudo o que foi dito acima e faça as coisas com mais rapidez e confiabilidade.

Participe da comunidade e comece


Hoje, lançamos a primeira visualização do Pulumi para .NET, incluindo suporte para todo o conjunto de serviços do Azure. Para experimentar o Pulumi , visite a página inicial do Pulumi for .NET .

Lá você encontrará várias instruções sobre instalação e introdução ao Pulumi for .NET. Os seguintes recursos fornecem informações úteis adicionais:


Embora o Pulumi for .NET esteja listado no status "preview", ele suporta todos os recursos mais essenciais do modelo de programação Pulumi (e o restante está a caminho). Nosso objetivo é obter feedback e nas próximas semanas, e trabalharemos duro para melhorar a experiência do .NET em todos os aspectos, incluindo mais exemplos e melhor documentação.

Entre para a comunidade do Slack para discutir seus cenários, idéias e obter qualquer assistência necessária da equipe e de outros usuários finais. Pulumi também é de código aberto no GitHub .

Este é um dia emocionante para a equipe Pulumi e nossa comunidade. O Pulumi foi iniciado por algumas das pessoas mais antigas do .NET e, portanto, é ótimo voltar às nossas raízes e conectar-se à comunidade .NET, ajudando desenvolvedores, equipes de infraestrutura e operadores a construir juntos melhores softwares em nuvem.

Esperamos ansiosamente ver os novos e surpreendentes aplicativos em nuvem criados com o Pulumi for .NET!

Source: https://habr.com/ru/post/pt475990/


All Articles