実行方式の違い
インフラの自動化ツールでは「宣言モデル」が使われているものと「命令実行モデル」が使われているものに分かれます。
宣言モデルとは?
インフラのあるべき状態をコードで表現する方式。Terraformが採用しています。
例えば、「EC2のインスタンスを3台起動する」というコードがあった場合に何度実行してもTerraformは3台の状態が保たれます。
メリット
コードと環境の一致を保証できる。なので、インフラ層の構成管理にはTerraformなどを使うべきである。
命令実行モデルとは?
リソースを作成する手順をコードで実現する方式。Ansibleが採用しています。
例えば、「EC2のインスタンスを3台起動する」というコードがあった場合に何度も実行すると、EC2の起動台数は3台→6台→9台と増えてきます。
シェルスクリプト
特徴
ローカルホスト上で実行するもの。
メリット
学習コストが比較的低い。
デメリット
- 設計思想が書いた人によって異なるため設計思想を読み取るところから時間がかかる。
- 使うライブラリや依存するパッケージ、配布の仕方などが人や組織により環境構築が大変。
Ant
Capistrano
Rubyをベースにしたサーバー操作及び、デプロイの自動化ツール。
メリット
- シェルスクリプトに比べて「デプロイの手順」が、「Capistranoの設定」という形に統一されるので設計思想を読み取ることに時間を取られない。
- ライブラリや、パッケージの導入はbundlerを使えば楽に行うことができる。
デメリット
Ansible
2012年春頃から人気が出始めたPython製の構成管理ツール。先行製品であるPuppetや、Chefでできることを踏襲しつつより利用しやすくなるように改善されている。
特徴
SSHを使ってリモートホスト上でコマンドを実行する。
メリット
- 多数のマシンに同じ操作を一括で流し込める。
- YAML形式なので覚えることが少なく書きやすい。
- 必要な時だけ起動すれば良いツールである点で、サーバーを構築して操作対象のAgentと連携できるように事前設定を行う必要があるChef等と比べて動作環境はシンプルになる。
- OS・ミドルウェア層の構成管理は、Terraformと比べて優れている。
デメリット
- Chefと比べて状況確認時に毎回Playbookの実行が必要になる。
- 可視化ツールが用意されていないのでもし必要であれば作り込みが必要になる。
- Agentを使用していないため手動で作られた想定外ソフトウェアを検知できない。
- インフラ層の構成管理は、Terraformと比べて劣っている。
Fabric
Puppet
サーバー設定ツール。Chefとは人気を二分する存在。「Ruby +α」の知識が必要になる。
Chef
サーバー設定ツール、ファイルに記述した設定内容に応じて自動的にユーザーの作成や、パッケージのインストール、設定ファイルの編集などを行う。Puppetとは人気を二分する存在。「Ruby」の知識が必要になる。
Itamae
Chefの軽量版
CloudFormation
AWS公式で用意されているサービス
Cloud Development Kit(CDK)
AWS公式のアーキテクチャ構築ツール。CloudFormationと異なり自分の使い慣れたプログラミング言語(TypeScriptなど)で構築できる。
SAM(AWS Serverless Application Model)
Lambdaを中心としたサーバーレス環境を構築するためのAWS公式ツール
Terraform
AWS、Azure、GCPなどの様々なクラウドインフラのプロビジョニング情報を特定のインフラベンダに依存しない形で記述できる。サードパーティ製ツール
メリット
- インフラ層の構成管理は、Ansibleと比べても優れている。
デメリット
- OS・ミドルウェア層の構成管理はAnsibleと比べて優れているというわけではない。
Pulumi
サードパーティ製ツール
ecspresso
サードパーティ製ツール
この記事へのコメントはありません。