1. はじめに
IaCツールの1種「Pulumi」について勉強したため、備忘録的に記事を作成。
クラウドインフラの構築や運用をコードで管理する「Infrastructure as Code(IaC)」は、モダンなシステム開発・運用の現場において不可欠な手法である。IaCを導入することで、インフラ構成の再現性が高まり、変更履歴の追跡や自動化、CI/CDパイプラインとの統合などが可能になる。
本記事で紹介する「Pulumi」は、IaCツールの中でも PythonやTypeScriptなどの一般的なプログラミング言語でインフラを記述できる、よりモダンなツールである。
2. IaCとは
Infrastructure as Code(IaC) とは、サーバーやストレージ、ネットワークといったインフラ構成をコードで記述し、自動的に構築・管理できるようにする手法である。
従来はGUIや手作業で行われていたクラウドリソースの作成・設定を、IaCによって再現性のあるコードとして管理することができる。
【IaCを活用するメリット】
- インフラの構成をバージョン管理できる
- 設定ミスを減らせる
- テスト・CI/CDと統合できる
- 複数人でレビューや再利用がしやすくなる
3. IaCツールの分類とPulumiの立ち位置
IaCツールはさまざまな種類がありますが、次の2つの観点で分類すると理解しやすくなる。
- 構成管理方式による分類:エージェントベース vs エージェントレス
- 記述スタイルによる分類:宣言型 vs 命令型
エージェントベース vs エージェントレス
分類 | 説明 |
---|---|
エージェントベース | 管理対象のサーバーに常駐型エージェントソフトウェアをインストールし、そのエージェントを通じて設定や監視を行う方式。 オンプレミス環境や、継続的な構成管理・監視が必要な大規模構成に適している。 |
エージェントレス | クラウドAPIやSSH接続などを通じて、エージェントなしで直接構成を適用する方式。クラウド環境との相性が良く、セットアップの手軽さや自動化のしやすさから、近年はこちらが主流。 |
宣言型 vs 命令型
分類 | 説明 |
---|---|
宣言型 | 「最終的にどうなってほしいか(desired state)」 を記述し、ツール側が現在の状態との差分を解決してくれる方式。TerraformやCloudFormationが代表的。 |
命令型 | 「どのように構成するか(手順)」 を逐次的に記述する方式。AnsibleやPulumiのようにプログラミング言語を用いて柔軟な処理が可能。 |
ツールごとの分類マッピング
エージェントベース | エージェントレス | |
---|---|---|
宣言型 | - | Terraform, CloudFormation, Pulumi(※) |
命令型 | Puppet, Chef | Ansible, Pulumi(※) |
※ Pulumiは命令型の言語(Python、TypeScriptなど)で記述する一方、実行時には「意図された状態(desired state)」を解析し、差分を適用するという宣言型の挙動を持つ。
そのためPulumiは、「命令型スタイルで書ける宣言型IaCツール」とも言える、ハイブリッドな特性を持ったツールである。
4. Pulumiが適している場面
Pulumiは、以下のような場面で特に力を発揮する:
-
アプリケーションとインフラを一体化して管理したいとき
インフラとアプリを別管理せず、同じコードベースで定義・デプロイしたい -
動的なインフラ構成が求められるとき
条件分岐やループ、関数、モジュールなどを駆使して柔軟に記述したい -
宣言型ツールでは柔軟性が足りないと感じたとき
外部サービスや設定ファイルを使って構成を動的に生成したい -
マルチクラウド構成を1つのコードで管理したいとき
AWS、Azure、GCPなどをまたぐ構成を統一的に記述したい
5. Pulumiのユースケース例
Pulumiのユースケース例として、「アプリとインフラを同一言語で、同じコードの中で記述・管理できる」という点を強調したユースケースを示す。
Pythonで開発したデータ処理アプリケーションと、その実行環境であるAWS Lambda、トリガー用のEventBridgeルール、入力データを保持するS3バケットなどを、すべてPythonコードの中で構成・デプロイできる。
このような統合によって、アプリケーションとインフラの整合性がとれ、変更や保守も容易になる。従来はツールやリポジトリを分けて管理していたインフラとアプリの境界を、Pulumiは自然に統合する。
6. 終わりに
次の投稿(リンク)で、Pulumiの活用フローとPulumiプロジェクト内の最適なフォルダ構成について説明する。