我们很高兴宣布对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 UI和即席脚本中单击。
- 利用您喜欢的IDE和工具(包括Visual Studio和Visual Studio Code),利用自动完成,重构和交互式文档等功能。
- 通过标准编译器错误,Roslyn分析器以及用于增强安全性,合规性和最佳实践的特定于基础结构的策略引擎,尽早发现错误。
- 重用任何现有的NuGet库,或分发自己的库,无论是用于基础结构最佳实践,生产力还是仅用于常规编程模式。
- 使用Azure DevOps Pipelines,GitHub Actions或十几种集成之一来连续,可预测和可靠地进行部署。
- 使用经典的基础架构云本机技术(例如Kubernetes,Docker容器,无服务器功能)和高度可扩展的数据库(例如CosmosDB)来构建可扩展的云应用程序,从而将它们带入您的核心开发经验,使它们更接近您的应用程序代码。
Pulumi的免费开源SDK(包括一个CLI和各种库)支持这些功能。 Pulumi还为希望在生产中使用Pulumi的团队提供高级功能,例如用于身份和高级策略的Azure Active Directory集成。
示例:具有无服务器应用程序的全局数据库
假设我们要构建一个新应用程序,该应用程序使用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; }, }); }); }
查看 GitHub托管的
原始 Program.cs编写此代码后,使用pulumi up命令运行Pulumi CLI,它将首先向您显示其计划创建的基础结构资源的预览。 确认后,它将在短短几分钟内部署您的整个应用程序及其所需的基础结构。

稍后,如果需要进行任何更改,只需编辑程序,重新运行CLI,它将进行必要的增量更改以相应地更新基础结构。 记录了部署的完整历史记录,因此您可以轻松查看已进行的更改。
.NET为什么也对基础架构很有用?
我们中的许多人都喜欢使用.NET来编写我们的应用程序,那么为什么不也将它用作基础结构代码呢? 实际上,我们已经在上面看到了这样做的一些优势。 如果您已经了解并喜欢.NET,则其中许多可能很明显,但是,让我们简要回顾一下。
通过使用任何.NET语言,您将为基础结构代码获得许多有用的功能:
- 熟悉:无需学习DSL或标记模板语言。
- 富有表现力:使用循环,条件,模式匹配,LINQ,异步代码等来动态创建满足目标环境需求的基础架构。
- 抽象:将通用模式封装到类和函数中,以隐藏复杂性并避免重复复制和粘贴相同的样板。
- 共享和重用:通过与您的团队或全球社区共享和重用NuGet库,进入云应用程序和基础架构专家社区。
- 生产力:使用您喜欢的IDE并完成语句,转到定义,实时错误检查,重构,静态分析和交互式文档。
- 项目组织:使用通用的代码结构技术(例如程序集和名称空间)来管理一个或多个项目的基础结构。
- 应用程序生命周期:使用现有的ALM系统和技术来管理和部署基础结构项目,包括源代码控制,代码审查,测试以及持续集成(CI)和交付(CD)。
Pulumi可以解锁对整个.NET生态系统的访问-这很容易理解,但是基于JSON,YAML,DSL或CLI脚本的其他解决方案中却没有。 访问完整的语言对于启用上面的CosmosApp示例至关重要,该示例是一个内部使用类,循环,lambda和LINQ的自定义组件。 这种方法还可以帮助开发人员和操作员使用共享的基础更好地合作。 将以上所有内容加在一起,您可以更快,更可靠地完成工作。
加入社区并开始
今天,我们发布了.NET的Pulumi的第一个预览版,其中包括对整个Azure服务的支持。 要尝试Pulumi,
请访问Pulumi for .NET主页 。
在那里,您会找到有关安装和开始使用Pulumi for .NET的一些说明。 以下资源提供了其他有用的信息:
尽管Pulumi for .NET处于“预览”状态,但它支持所有最基本的Pulumi编程模型功能(其余功能正在开发中)。 我们的目标是在接下来的几周内收集反馈,我们将努力全面改善.NET体验,包括更多示例和更好的文档。
请
加入Slack社区,讨论您的方案,想法,并从团队和其他最终用户那里获得任何需要的帮助。 Pulumi
在GitHub上也是
开源的 。
对于Pulumi团队和我们的社区来说,这是令人兴奋的一天。 Pulumi由.NET最早的人创建,因此很高兴回到我们的根基并与.NET社区建立联系,可以帮助开发人员,基础架构团队和运营商一起构建更好的云软件。
我们期待看到您使用Pulumi for .NET构建的新奇的云应用程序!