インフラストラクチャ・プロビジョニング
インフラストラクチャ・プロビジョニングとはITインフラを設定するプロセスのことです。 プロビジョニングとコンフィギュレーションは同じものではないにもかからず誤解されることが多々あります。コンフィギュレーションを行うにはまず最初にプロビジョニングが必要です。
「プロビジョニング」には多くのタイプがありますが、最も重要なものは以下のようになります。
サーバープロビジョニング
自分達のサーバーとして機能する新しいマシンを作成してセットアップするために必要なプロセスで、物理的なハードウェアからソフトウェアコンフィギュレーションやネットワークなどです。
ネットワークプロビジョニング
アプリケーション、サーバー、コンテナなどが利用することになるネットワークのセットアップです。
Infrastructure as Code(IaC)
インフラストラクチャ・プロビジョニングはソフトウェアエンジニアにとって常にきわめて重要な部分となってきました。これまでのプロビジョニングは手作業を伴う物理的な作業がほとんどでした。インフラの設定やアップデートには新しいハードウェアの購入、インストール、セットアップ、そしてプロビジョニングが必要であるため、これは再現が難しく、相当な時間がかかり、人為的ミスの影響を受けやすいことを意味します。
クラウドコンピューティングの人気が高まるにつれ、多くのことが変わりました。物理インフラの構築やメンテナンスはもはや不要となり、その代わりとして何らかのクラウドサービスを使って素早くセットアップができるようになりました。クラウドサービスを利用するときに多くの人がまず用いるアプローチはUIの利用で、これは作業に慣れるには良いものの、特にインフラのコンフィギュレーションを担当するチームがある場合は不整合性という問題が残ってしまいます。
DevOpsの原則の一つはインフラをコードと同じように扱うことです。IaCでは、以下を可能にするコンフィギュレーションファイルを通じてインフラストラクチャの仕様を定義します。
- バージョンコントロール。git、svnなど、どのようなバージョンコントロールシステム(VCS)でも構いません。しかし、どのような時にも優れた方法がVCSの使用です。
- 同じ環境/インフラを毎回再現
- コードは信頼できる唯一の情報源 - インフラの変更は毎回必ずコードに反映する。
- 再活用できるコンポーネントはモジュラー化 - 例:アプリケーションの各種環境など。
IaC アプローチ
宣言型
宣言型アプローチはターゲットとなるインフラを指定します。これには必要とするリソース名とプロパティがあります。このアプローチでは望む「何か」にフォーカスし、IaCはそれを実現する「方法」を考えます。
このアプローチではインフラの現在の状態も保持し、これがインフラをアップデートしたり削除するときに役に立ちます。IaCツールがこれらの変更適用に最良の方法を見つけようとするためです。
命令実行型
命令実行型アプローチは、目標のインフラやコンフィギュレーションを実現するために必要な具体的な手順やコマンドにフォーカスします。もしこれらのコマンドを正しい順番で実行しないとプロビジョニングは失敗してしまいます。ユーザーは新しい変更の適用方法を解決する必要があります。
人気の高いIaCツールとしては以下のようなものがあります。
- Chef - 命令実行型
- Puppet - 宣言型
- Terraform - 宣言型
Terraform
TerraformはHashiCorpが開発したIaCツールで、お客様はコンフィギュレーションファイルを使ってインフラを作成及び管理することができます。APIさえあれば異なるTerraformプロバイダーを使うことで事実上どのようなプラットフォームやサービスでも利用することができます。Terraformの資料はその最大の長所の一つです。ここにはコミュニティーやHashiCorpが用意した公開プロバイダーが全て揃っています。
Terraformのコンフィギュレーション言語は宣言型であり、前述のようにターゲットとなるインフラを記述して、その「方法」をTerraform、特にTerraformプロバイダーに委任します。
Terraformでの導入は以下の5ステップになります。
- スコープ - インフラ要件と、利用するクラウドサービスを特定する。
- オーサー - コンフィギュレーションファイルを書く。これをコードとして扱う。バージョンコントロールシステム(VCS)を使い、再活用できるモジュールをテスト及び作成する。
- 初期化 - 必要なTerraformプロバイダーもしくはプラグインをインストールする。Terraformは宣言型アプローチを採用しているため、ステートファイルを作成することで(あれば)現状のインフラを知る必要がある。
- 計画 - ステートファイルを使うことでTerraformが適用する変更を見る。このステップでは何の変更も行われず、発生するかもしれないエラーやミスを突き止めるのにかなり有益なものとなる。
- 適用 - 計画した変更を実際のインフラに適用する。
KandaSearch
弊社ではsolrインスタンスのプロビジョニングを行うときにIaCとTerraformを適用してユーザーに最高の使い勝手をご提供いたします。
参照
- https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html
- https://www.redhat.com/en/topics/automation/what-is-infrastructure-as-code-iac
- https://www.redhat.com/en/topics/automation/what-is-provisioning
- https://www.copado.com/devops-hub/blog/declarative-vs-imperative-programming-for-infrastructure-as-code-iac
- https://stackify.com/what-is-infrastructure-as-code-how-it-works-best-practices-tutorials/
- https://learn.hashicorp.com/tutorials/terraform/infrastructure-as-code
- https://www.terraform.io/intro