使用Pulumi和.NET Core构建最先进的云应用程序

我们很高兴宣布支持Pulumi的.NET Core! 此公告意味着您可以使用自己喜欢的.NET语言(包括C#,VB.NET和F#)声明您的云基础结构,包括Azure中的所有内容,例如Kubernetes,Functions,AppService,虚拟机,CosmosDB等。 这使您能够使用整个云,而不必使用准备使用的基础结构即代码方法离开代码编辑器。



如今,随着微服务,容器,服务器和数据仓库等现代云功能渗透到应用程序的体系结构中,基础架构变得越来越重要。 基础设施一词涵盖了您的应用程序需要的所有云资源。 现代架构在创建应用程序时需要对它们进行深入思考。 Pulumi的方法可帮助基础架构开发人员和团队一起创造创新的新功能,从而充分利用现代云所提供的一切。

Pulumi于一年多前推出,最近达到了1.0的稳定水平。 与数百家公司合作在生产中部署基于云的应用程序后,.NET迅速转移到Pulumi最需要的社区功能之一。 尤其是由于Pulumi团队中的许多人都是早期的.NET专家,因此今天我们非常高兴在.NET Core上提供Pulumi以满足您的云开发需求。

什么是普鲁米?


Pulumi允许您使用一种称为“基础结构即代码”的强大方法,使用真实语言来表达应用程序的基础结构需求。 使用基础结构作为代码,您可以声明所需的基础结构,并且该机制为您提供了自动化,易于复制且足够可靠以满足生产需求的机制。 Pulumi使用真实的语言并采用现代的云基础架构模板,例如一流的,简单的容器和无服务器程序,使这一方法更进一步。

使用Pulumi for .NET,您可以:

  • 使用C#,VB.NET或F#声明基础结构。
  • 使用Pulumi框架作为代码处理程序,自动创建,更新或删除云资源,而无需在Azure用户界面和自定义脚本中进行手动点击。
  • 使用您喜欢的IDE和工具(包括Visual Studio和Visual Studio Code)来执行诸如自动完成,重构和联机文档之类的功能。
  • 使用标准编译器错误,Roslyn解析器和针对安全性,法规遵从性和最佳实践的特定于基础架构的策略引擎,可以提前检测到错误。
  • 重用任何现有的NuGet库或重新分配自己的库,无论是为了获得更好的基础架构,性能还是仅仅是通用的编程模式。
  • 使用Azure DevOps Pipelines,GitHub Actions或十几种集成之一执行连续,可预测且可靠的部署。
  • 使用经典的云基础架构技术(例如Kubernetes,Docker容器,无服务器功能)创建可扩展的云应用程序。

免费的Pulumi开源SDK(包括CLI和一系列库)提供了这些功能。 Pulumi还为希望在生产中使用Pulumi的团队提供了高级功能,例如用于身份验证和高级策略的Azure ActiveDirectory集成。

示例:具有无服务器应用程序的全局数据库


假设我们要创建一个新应用程序,该应用程序使用Azure CosmosDB进行全球数据分发,以使用无服务器C#应用程序自动为我们的数据库扩展,从而为客户提供高性能,无论他们身在何处。 我们通常使用其他一些基础结构构建工具,例如JSON,YAML,DSL,或在Azure控制台中手动点击。 总体上来说,这种方法是正常的,但是却很可怕-它很复杂,没有使用,并且意味着即使是入门人员也需要基础架构专家。

Pulumi的方法是用我们最喜欢的.NET语言编写代码,而Pulumi工具可以处理其余部分。 例如,此C#代码使用无服务器的Azure AppService FunctionApp创建一个Azure CosmosDB数据库,该数据库随数据库自动缩放:

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; }, }); }); } //  CosmosApp  ArchiveFunctionApp   . //          «app». //         . } 
在GitHub上观看 Program.cs

编写此代码后,使用pulumi up命令运行CLI Pulumi,它将首先向您显示其计划创建的基础结构资源的预览。 确认后,它将在几分钟内部署您的整个应用程序和必要的基础结构。



以后,如果需要进行任何更改,只需编辑程序,然后重新运行CLI,它将进行必要的增量更改以相应地更新基础结构。 记录了完整的部署历史记录,因此您可以轻松查看已进行的更改。

.NET为什么也对基础架构很有用?


我们许多人喜欢使用.NET来构建我们的应用程序,那么为什么不将其用于IaaS? 实际上,我们已经列出了上面的一些优点。 如果您已经知道并喜欢.NET,则其中许多可能很明显,但是让我们简要地重复一下。

使用任何.NET语言,您都会获得IaaS的许多有用功能:

  • 培训:无需学习DSL或标记模板语言。
  • 表现力:使用循环,条件表达式,模式匹配,LINQ,异步代码等。 动态创建可满足目标环境需求的基础架构。
  • 抽象:将通用模板封装在类和函数中,以隐藏复杂性并避免多次复制和粘贴同一模板。
  • 共享和重用:通过与您的团队或国际社区共享和重用NuGet库,加入云应用程序和基础架构专家社区。
  • 生产力:使用您喜欢的开发环境并获得语句完成,定位定义,实时错误检查,重构,静态分析和交互式文档。
  • 项目组织:使用通用的代码结构技术(例如程序集和名称空间)来管理一个或多个项目的基础结构。
  • 应用程序生命周期:使用现有的ALM系统和方法来管理和部署基础结构项目,包括源代码控制,代码验证,测试和持续集成(CI)和交付(CD)。

Pulumi提供对整个.NET生态系统的访问-这是理所当然的事情,但在基于JSON,YAML,DSL或CLI脚本的其他解决方案中则不然。 必须添加完整的语言才能添加上面的CosmosApp示例,该示例是一个内部使用类,循环,lambda甚至LINQ的自定义组件。 这种方法还可以帮助开发人员和操作员使用一个通用框架更好地协同工作。 将以上所有内容加在一起,您将获得更快,更可靠的结果。

加入社区并开始


我们发布了.NET的第一个Pulumi预览版,其中包括对所有Azure服务的支持。 要尝试使用Pulumi,请访问Pulumi主页以获取.NET主页

在那里,您将找到有关Pulumi for .NET的安装和入门说明。 以下资源提供了其他有用的信息:

Source: https://habr.com/ru/post/zh-CN476038/


All Articles