クラウド関連IaCツールの比較

ちょっと前にクラウド関連のIaC(Infrastructure as Code)ツールを調べた事があったので、比較してみる。

Contents

先に結論

いずれか単一のクラウドしか利用しないのであれば、各クラウドが提供するIaCツール”でも”OK ※最適かはわからない
マルチクラウドを利用するのであれば、terraformが最適

そして個人的にはterraform激推し 
(導入要件によるため、もちろん全てにおいて勝るわけではない)

細かい話

IaCとの出会い、初学者時代

自分の場合、最初に触れたクラウド関連IaCはAWSのCloudFormationだった。

AWSコンソールを操作してポチポチ構築したことはあったので、それに比べてコードでリソースを定義して管理できるのは感動した。
ただ、コード管理する対象が増えていくとコード量めっちゃ長え・・・という印象はあった。
※今思えばAWS SDK使った方が賢くできる場合もあったと思う(当時は知らなかったもので)

その後、Azureを触るようになった所でAzureResourceManagerについて知る。
JSONでリソースを定義する方法はコピペで使う以上の効率化が難しそうだなという印象。
Azureのリソースデプロイ処理のバックエンドとして動いているせいか、AWSよりも小回りの効く機能は用意されておらず、、
AzureでもAzureSDKやCLIを使えば良い場面もあるようだが、一貫したデプロイ処理として動かすにはPowershellスクリプト化が必須で、学習コスト高め。

この辺りからなにか良い手法はないか調べた中で行き当たったのがterraformだった

Terraformのいいところ

一言で書くと、マルチクラウドを一貫してIaC管理する場合の実装効率が良いということ。
HCLの記述方式に慣れてしまえば、terraform registoryの各クラウド用プロバイダーのサンプルを参照しながらリソースを宣言・定義すればOK。
※もちろん、クラウド自体の知見は必要。
一つのデプロイ処理で複数クラウドのプロバイダーをロードすれば、一つの処理で同時に各クラウドのリソースを作成することも可能 ※利用シーンはあまり無いと思うけど、対応できるということが重要・・
また、モジュール化することで再利用性を高めたり関数等を利用した処理を組み合わせる等、よくあるIaCツール機能も対応。
各クラウドが提供するIaCツールの独自機能には当然対応していないけれど、API経由で操作可能なものはだいたいterraform側でも操作可能なので、あまり困る事はなかった。
※ポータル画面上でテンプレートを登録するとか、ブラウザ操作での作業が必要な案件には向いてない

なお、マルチクラウドに対応した類似ツールでAnsibleもあるが、こちらは手続き型のIaCツールなのでOS以上のサーバ管理に向いている。
どちらかというとサーバ/IaaSの中身を管理する際に適切で、クラウド全体のリソース管理としてはterraformのような宣言型ツールの方が効率が良い場面が多い。

まとめ

terraformいいよ!
気が向いたら、各クラウドのIaCツール vs terraform でも書いてみます

シェアする

  • このエントリーをはてなブックマークに追加

フォローする