与使用 Azure .NET SDK 相比,Pulumi 有那么神奇吗?

Is Pulumi that magical when compared to using Azure .NET SDK?

我不知道应该问哪个 SE 网站,所以如果应该在其他地方请帮助我。

我一直在研究基础架构即代码解决方案。

不太喜欢 Terraform。智能感知的缺乏使得可识别性比程序员习惯的更难。

我一直在考虑 ARM 模板。我喜欢模板在我们在门户中创建资源时可用,但它似乎可读性较差且之后更难维护。

然后我发现了 Pulumi 并喜欢他们的想法,与 Terraform 相比。在我看来,他们的方法也像上面的选项一样是声明性的,但我们可以使用体面的编程语言来完成工作。

for 循环是必须的。

太棒了,我喜欢!但既然我们喜欢使用 C#(或其他替代方案),那么我们为什么不使用 SDK 来管理我们的基础架构即代码?

Pulumi has compared themselves with cloud SKDs 通过将他们的解决方案定位为更安全的提倡,如果我们自己使用云 SDK,那么我们的解决方案就不会那么可靠。

我想知道这在多大程度上是真的?

去年,我编写了一些使用 Azure 服务总线的库 queues/topics。有几个集成测试会 运行 并行进行,我需要通过创建新的 queues/topics 来隔离它们,并使用 Microsoft.Azure.ServiceBus.Management.ManagementClient 来执行此操作。

真的好像什么都不用学了

进入正题。不弃Pulumi我觉得很棒的创新:

与使用 Azure SDK 相比,Pulumi 真的会增加那么多好处吗?

您使用它的体验如何?

这里是 Pulumi 开发人员,所以我肯定有偏见。我怀疑 SO 社区可能会发现您的问题违反了某些指南,但我希望我的回答能够保留 :)

使用 Pulumi 的一个好处是您可以访问具有一致开发人员经验的多个提供商。你可能只使用 Azure,但你可能会在某个时候开始将它与构建和发布 Docker 图像、部署 Kubernetes 应用程序或 Datadog 仪表板等事物结合起来。所有这些都可以从同一个程序或解决方案中完成。

现在,与命令式 SDK 的最大区别在于所需状态配置的概念。 Pulumi 程序描述了资源图和它们之间的依赖关系(什么),而不是配置它们的步骤(如何)。当您拥有一个可以生存数月和数年的环境时,在逐步发展单个定义和应用增量更改 (Pulumi) 以及编写一堆更新 scripts/programs 以使每个环境进入新状态之间存在很大差异(SDK).

您如何维护可能相似但仍然不同的多个环境? (生产 vs 暂存 vs 测试 vs 开发)你如何确保你为夜间测试创建的短暂基础设施反映了生产的现实?当 SDK 程序在中间失败时会发生什么 - 您可以重试 运行 还是会创建重复的 resources/fail 并出现另一个错误?您如何简单了解 git 随时间的变化?并发控制?更改历史记录?

以上所有内容都内置在 Pulumi 中,需要使用云 SDK 手动考虑。