4

我在这里对哪个 SE 站点提出这个问题感到困惑,所以如果它应该在其他地方,请帮助我。

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

不太喜欢 Terraform。智能感知的缺乏使得难以理解比程序员已经习惯的要难。

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

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

for循环是必须的。

酷,我喜欢!但既然我们喜欢使用 C#(或其他替代方案),那么为什么我们不使用 SDK 将我们的基础设施作为代码来管理呢?

Pulumi 将自己与云 SKD进行了比较,将他们的解决方案定位为更安全,主张如果我们自己使用云 SDK,那么我们的解决方案就不会那么可靠。

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

去年,我编写了一些使用 Azure 服务总线队列/主题的库。有几个可以并行运行的集成测试,我需要通过创建新的队列/主题来隔离它们,并且曾经Microsoft.Azure.ServiceBus.Management.ManagementClient这样做过。

看起来我真的不需要学习任何东西。

现在进入正题。不放弃我认为很棒的 Pulumi 的创新:

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

你有什么经验?

4

1 回答 1

7

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

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

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

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

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

于 2020-06-04T21:19:51.733 回答