Pulumi vs AWS CDK: 実言語による IaC の比較
どちらも実際のプログラミング言語でインフラを記述できますが、Pulumi は独自エンジンを持つマルチクラウド、CDK は AWS CloudFormation を合成します。
Pulumi は TypeScript、Python、Go、C# で多くのクラウドにわたってインフラを定義し、独自の state とデプロイエンジンを使います。AWS CDK も実言語を使いますが、CloudFormation テンプレートを合成し AWS 経由でデプロイします - つまり AWS 中心であり、CloudFormation の挙動と制限を継承します。
| Pulumi | AWS CDK | |
|---|---|---|
| クラウド | マルチクラウド | AWS 中心 |
| エンジン | Pulumi エンジン + state | CloudFormation を合成 |
| 言語 | TS, Python, Go, C#, Java | TS, Python, Java, Go, C# |
| state | Pulumi サービスまたは self-host | CloudFormation が管理 |
| 最適な用途 | 実言語のマルチクラウド IaC | コード + CFN を求める AWS 組織 |
CI で
どちらも実言語の抽象化 - ループ、関数、型 - を IaC にもたらし、CI pipeline はこれを通常の build として扱います。Pulumi は複数のクラウドにまたがり独自のデプロイエンジンを動かすため、Pulumi の state を自分で管理します。CDK は、コードの使いやすさは欲しいが state とロールバックには内部の CloudFormation に依存したい AWS のみのチームにとって自然な選択です。クラウドの範囲と、CloudFormation エンジンと Pulumi のエンジンのどちらが欲しいかで選びましょう。
高速化する
言語の依存関係(npm、pip)を cache し、synth/preview とデプロイを CI で実行します。build とデプロイは CI runner 上で行われます。より高速な managed runner はそれらを短縮します。
結論
マルチクラウドで、言語ネイティブなエンジンが欲しい場合: Pulumi。AWS に注力し、内部の CloudFormation で満足な場合: AWS CDK。どちらも実言語による IaC を提供します - クラウドの広さとデプロイエンジンで選びましょう。