みなさん、こんにちは。クラウドソリューション部の花岡です。
最近はプライベートや業務で英語を読んだり聞いたりする機会が増えてるので、英語の勉強時間を増やしてます。
はじめに
さて、Pulumi(プルーミー)という Infrastructure as Code
(IaC
)ツールをみなさんはご存知でしょうか。
本記事ではその Pulumi
の紹介と Azure
でよく使われる Bicep
や Terraform
との簡易的な比較をしてみました。
Pulumiとは
Terraform
や Bicep
のような DSL
(ドメイン特化言語
)を使用せず、C#
や Python
、TypeScript
などの既存のプログラミング言語を使って IaC
ができるツールです。
手慣れたプログラミング言語でインフラの構成管理ができ、習得が容易で、既存のプログラミング言語の表現力が使えます。
そのため、モジュールの再利用やライブラリ、 SDK
などを使用して他の IaC
ツールでは出来ない、さまざまな処理を書くことができます。
また、Pulumi
は、AWS
、Azure
、GCP
、Kubernetes
など、さまざまなクラウドプラットフォームをサポートしています。
異なるプラットフォーム間での移行や、マルチクラウド環境の構築にも利用できます。
Terraform や Bicep との比較
Azure
の IaC
ツールは主に Terraform
や Bicep
が利用されてます。
その2つを比較して Pulumi
がどういった特徴があるのかを簡単に紹介します。
Bicep と比較
Bicep
と Pulumi
の違いはいくつかありますが、すべて挙げると長くなってしまいます。
そのため「状態管理」を対象に比較しますが、ほぼ Bicep
と Terraform
の違いと共通する部分があります。
Bicep
Bicep
はインフラの状態管理をしません。
詳細は省きますが*1、現在のリソースの状態と Bicep
で生成した ARM Template
が一致しているかは保証が出ないため、原理的に厳密なインフラの状態管理が難しいです。
Pulumi
Pulumi
はStack
と呼ばれる 開発
や 本番
といった、独立して設定可能なインスタンス単位でインフラの状態管理ができます。
状態管理は state
と呼ばれるメタデータで管理します。
メタデータは通常 Pulumi Service
と呼ばれるホスティングサービスに保存されますが、クラウドプロバイダーが提供しているオブジェクトストレージサービスも利用できます。(Azure
の場合は Blob Storage
が相当)
これにより、実行前に現在のリソースの状態とコードの差分比較が可能な実行プランを見ることができます。実行プランによりリソースの影響範囲を変更適応前やPRのレビュー時に知ることができます。
まとめると、Bicep
はリソース作成後に設定やリソースの追加がないプロジェクトや一時的に使用する環境(テスト環境、検証環境など)に向いていると言えます。
Pulumi
は継続的かつインクリメンタルにインフラ環境を整備していく場合に向いていると言えます。この点は Terraform
も同じと言えるでしょう。
その他の詳しい比較はMicrosoft公式リンクのTerraform と Bicep の比較をご参照ください。
Terraform
になってしまいますが、ほとんどの違いは Pulumi
と共通するので、参考にはなると考えています。
Terraform との比較
Terraform
とは機能面においては細かな差異はありますが、大体の機能は共通しています。
大きな違いはやはり、言語面でのサポートです。
Terraform
は Hashicorp Configuration Language
(HCL
)と呼ばれる DSL
を使用してコードを書きます。
Pulumi
は Python
、Go
、JavaScript
、TypeScript
、.NET
、Java
などをサポートしており、使い慣れた言語で IaC
を実現できます。
ちょっとイメージできない方がいるかも知れないので、簡単な例にはなりますが、C#で書くと以下のようなコードになります。
# Program.cs using Pulumi; using Pulumi.AzureNative.Resources; # Azureのリソースグループ作成 await Deployment.RunAsync(() => { var resourceGroup = new ResourceGroup("rg-sample"); });
このように普段使っているような感覚でコードを書くことができます。
既存のプログラミング言語が使用すると、条件、ループ、関数、クラスなどの使い慣れた言語ごとのイディオムが容易に適用できるため、学習コストが低いです。
また、ノウハウが貯まれば再利用可能なインフラのモジュール化やコンポーネント化が可能になり、再現性や保守容易性が向上できます。
また、Pulumi
は Native provider
というパッケージで主要なクラウドプロパイダーの新規のリソースや最新の機能をほぼ同日に使用できます。
Terraform
では新機能がリリースされても数ヶ月待つ必要がありますが、すぐに利用できるというのは個人的にもとても魅力的で、これだけでもチームによっては採用理由になるかと感じています。
他にも細かな違いは詳細については Pulumi
公式がTerraformと比較したドキュメントを公開してますので、ご参照ください。
さいごに
多少主観が入りますが、ここまでの比較を表でまとめました。
Pulumi | Terraform | bicep | |
---|---|---|---|
言語 | .NET Python Go など | HCL(DSL) | DSL |
学習コスト | 低 | 中 | 中 |
状態管理 | ○ | ○ | × |
AzureのAPIサポート | ○ | △ | ○ |
普段C#でコードを書いている私からすると Pulumi
はとても親しみやすい IaC
ツールだと感じています。
開発者からインフラ構築の比較的容易になり、インフラに対するイメージのハードルを下げるきっかけになるのではと思います。
また、本記事から Pulumi
に興味を持ってもらえたなら幸いです。
次に書く記事はチュートリアルを通して Pulumi
がどういったものか紹介したいと考えています。
ここまでご精読いただきありがとうございました。それではまた!