Pulumi使い始めた所感
背景
慣れていたTerraformではなく、Pulumiを使ってコードによるクラウドリソース管理を始めた。ひとまず、すべての既存リソースをPulumiに取り込んだので、その中で「Terraformも良かったけど、PulumiのこんなところはTerraformよりも良さげだな」「これはTerraformとそんな変わらんかな」と思った点を書いてみる。
注意
私がTerraformを積極的に触っていたのは、ようやくバージョン1.0.0が出た頃だった。
なので、Terraformに対する認識が現代に追いついてない可能性が高い。間違ってたら優しくコメントください。
また、Pulumiも使い始めたばかり。間違ってたら(略。
1.importが楽
0からクラウド使ってインフラを立ち上げる場合、import作業が必要ないので、TerraformでもPulumiでもどっちでも良いと思う。
だが、すでに本番稼働しているようなシステムをコードとして落とす場合、TerraformよりもPulumiの方が楽だと感じる。
なぜなら、Pulumi importサブコマンドがjsonファイルを指定して、ファイルに記述されたリソースを一括でインポートできるからだ。
これに対してTerraformはimportサブコマンドをすべてのリソースに対して打っていく必要がある。
Terraformを使い始めたとき、この作業をしたことがあるが、かなりめんどくさかった。
また、見逃してしまうリソースがいくつかあった。
これに対してPulumiはaws cliなどを使って条件に合致するリソースをjson形式で取得できる。
なので、
- aws cliもしくはsdkを使ってインポートしたいリソースを取得する
- Pulumi importに合わせた内容にjsonを整形する
- jqなりプログラムなりを自分で組んで整形した
- Pulumi import -f /path/to/import-targets.json
上記手順で一気にインポートできる。
これがあって心底良かったのはIAM周りだろう。
RoleとPolicyの関連付けを一気にインポートできたので、かなり楽ができた。
ちょっとしたrubyスクリプトを書いてjsonファイルを生成し、それを使ってPulumi importを実行するだけで、数十のリソースをインポートできる。
これはTerraformだと体験できないのではと思った。
2.好きな言語で書ける
PulumiはTypeScript/Go/Pythonなどいくつかのプログラミング言語でインフラリソース管理ができる。
これができると
- エディタによる補完の恩恵を受けられる
- 言語コミュニティの恩恵を受けられる
- 慣れ親しんだモジュール管理方法で開発できる
など色々と恩恵がある。
TerraformはHCLという独自言語による記述が主流であり、TypeScriptやGoと比較すると上記の恩恵は少ないように思える。
ただし、TerraformもCDKプロジェクトが動いており、そのうち似たような体験ができるのかもしれない。
が、現時点でcdkプロジェクトはv0.15.0であり、まだまだ破壊的な変更が入るだろう。
特に良かったことを書いてみる。
- 個人的にTerraformのモジュールは使いづらかったが、Pulumiの場合は好きな言語のモジュール管理の仕組みを使えばいいので、使いづらいとかはない。
- (TypeScriptやGoを選べば)型があり、それに従ってプログラミングすることができる。HCLはエディタによる補完などはあったが、有名な言語ほど補完が強烈ではなかった。
- 繰り返し/条件などの構文がわかりやすい。Terraformも分かりづらいわけではないが、他の言語のほうがやりやすい。インフラリソースを管理する上で繰り返し/条件の構文が分かりやすいのは便利だと思う。
ただ、インフラリソースの管理にそんな小難しいことはいらないのでは?と思うこともある。
3. 管理できるリソースの種類
これはTerraformより劣っている印象。
Pulumiは3大クラウドベンダー(AWS, GCP, Azure)には対応しているし、他にもCloudflareやDatadogにも対応している。
だが、Terraformの方が長く活躍していて、その分registryの活況度合いは高い。
もし、3大クラウドベンダー以外のサービスを採用している場合は、Pulumiにそのproviderがあるかどうか確認したほうが良いかもしれない。
4. SaaSについて
TerraformにもPulumiにもSaaSが用意されている。
私はTerraformのSaaSを使ったことがないので、どちらが良いのか分からないし、Pulumiも個人プランで使っているので、多くの機能が開放されておらず良し悪しについて判断できない。
まとめ
正直、PulumiでもTerraformでもどっちでも良いが、以下の条件に当てはまる場合Pulumiを採用したほうが楽だと思う。
- 既存のインフラリソースを取り込む必要がある
- プロバイダーがAPIによるインフラリソース管理を提供している
- PulumiにProviderが用意されている
この3つの条件を満たす場合はPulumiをオススメしたい。
実際にPulumiによる運用を続けた結果意見が変わるかもしれない。
Discussion