【ぷるみ】

Pulumi とは?

最終更新:
💡 「使い慣れたプログラミング言語」でインフラを書く

TypeScript、Python、Goなどの汎用プログラミング言語でクラウドの構成を定義できるIaC(Infrastructure as Code)ツール。Terraformと並んで比較されることが多い。

📌 このページのポイント
Pulumi — コードでインフラを定義 開発者コード Python / TypeScript Go / C# など インフラ定義 リソース設定 Pulumi エンジン 差分検出 状態管理 クラウド サーバー データベース ネットワーク 汎用言語で望む状態を書く → 現在の状態との差分を計算して作成・更新・削除
PulumiによるIaC(Infrastructure as Code)のイメージ
ひよこ ひよこ
Terraformと何が違うの?
ペンギン先生 ペンギン先生
TerraformはHCLという設定用の言語でインフラを書く。PulumiはTypeScriptやPythonなどの汎用プログラミング言語で書けるのが特徴だよ。for文やif文、関数をそのまま使えるし、エディタの補完も効く。ただPulumiもHCLやYAMLに対応しているから、「言語の選択肢が広い」と考えるとわかりやすいね
ひよこ ひよこ
具体的にどう書くの?
ペンギン先生 ペンギン先生
TypeScriptなら、import * as aws from '@pulumi/aws'; const bucket = new aws.s3.Bucket('my-bucket'); のように、リソースをオブジェクトとして作る形で書くよ。ここで大事なのは、この1行を実行した瞬間にバケットが作られるわけじゃないこと。プログラムはまず「こういう状態にしたい」という登録をエンジンに渡すんだ
ひよこ ひよこ
じゃあ、実際にはいつ作られるの?
ペンギン先生 ペンギン先生
pulumi previewを実行すると、エンジンがプログラムの望む状態と記録済みの状態を比べて、作成・更新・置き換え・削除の予定を表示する。内容を確認してpulumi upを実行すると、プロバイダーを通じてクラウドに反映され、状態の記録も更新されるよ
ひよこ ひよこ
どっちを選ぶべき?
ペンギン先生 ペンギン先生
チームがよく使う言語でインフラも書きたいならPulumi、すでにTerraformの資産や運用ルールがあるならTerraform、というように、チームの経験や既存の仕組みで選ぶのが現実的だね。どちらも差分を確認してから反映する点は同じだから、レビューの手順をそろえることも大切だよ
もっと詳しく知りたい人へ

Terraformで管理している環境は、全部書き直さないとPulumiに移れないの?

一度に書き直す必要はありません。Pulumiの公式ガイドでは、pulumi convert --from terraformでHCLのコードをPulumiのプログラムに変換する方法(未対応部分はTODOとして残る)、既存リソースをPulumiの状態に取り込むpulumi import、Terraformの状態ファイルの出力値を参照して共存する方法、既存のTerraformモジュールをそのまま使う方法が紹介されています。変換後はpulumi previewで、意図しない作成や削除が出ないかを確認してから反映します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Pulumi」って出てきたら「プログラミング言語でインフラを定義するIaCツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「Pulumi」 = ハワイ語で「ほうき」
💬 創業者のJoe Duffyによると、Pulumiはハワイ語で「ほうき(broom)」を意味する言葉で、亡き恩師Chris Brummeさんへの敬意を込めて名付けたそうだよ(名字の読みとbroomを掛けている)

参考資料

← 用語集にもどる