🧊

Pulumi使い始めた所感

2023/01/25に公開

背景

慣れていた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形式で取得できる。
なので、

  1. aws cliもしくはsdkを使ってインポートしたいリソースを取得する
  2. Pulumi importに合わせた内容にjsonを整形する
  • jqなりプログラムなりを自分で組んで整形した
  1. 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