Infrastructure as Code とは何か?
Infrastructure as Code とは、サーバー、ネットワーク、クラウドリソースを手動で構成する代わりに、バージョン管理されたファイルで定義するプラクティスです。
インフラを構成するためにクラウドコンソールをクリックして回るのは、遅く、再現性がなく、レビューも不可能です。Infrastructure as Code (IaC) はこれを、何が存在すべきかを正確に宣言するファイルに置き換え、インフラをソフトウェアのように再現可能でレビュー可能なものにします。
中心となる考え方
IaC では、望むインフラの記述を構成ファイルに書きます。サーバーの数、どのネットワーク、どのデータベースか、といった内容です。ツールがそれらのファイルを読み取り、実際のリソースを作成または更新して一致させます。コンソールではなくファイルが、環境の権威ある定義になります。
宣言的 vs 命令的
ほとんどの IaC は宣言的です。望む最終状態を記述すると、ツールがそこへ到達する方法を判断します。これは各ステップを詳細に記述する命令的なスクリプトとは異なります。宣言的な定義により、ツールは drift を検出し、ファイルが示す状態へ環境を収束させられます。
例
サーバーを手動で作成する代わりに、エンジニアは「このサイズの仮想マシン 1 台、このネットワーク内、このディスク付き」と宣言する数行を書きます。ツールを実行するとそれが作成されます。ファイル内のサイズを変更して再実行すると更新されます。ブロックを削除すると除去されます。すべて pull request を通じてレビューされます。
なぜ重要か
- 再現性: オンデマンドで同一の環境を立ち上げられる。
- バージョン管理: すべてのインフラ変更が追跡される。
- レビュー: 変更はコードと同様に pull request を通る。
- 災害復旧: 定義から再構築できる。
どこに位置づけられるか
IaC は DevOps と GitOps の礎であり、CI/CD と自然に組み合わさります。pipeline はアプリケーションを deploy するのと同じ方法でインフラ変更を適用できます。環境をコードで定義することは、一貫した staging と production の環境を実現可能にするものでもあります。
重要なポイント
- IaC はインフラを手動ではなくバージョン管理されたファイルで定義する。
- 宣言的な定義により、ツールが現実を望ましい状態へ収束させられる。
- インフラに再現性、レビュー、復旧をもたらす。