実行環境を効率的に管理・運用するための「IaC」という考え方
はじめに 本連載では、前回までDevOpsで開発効率を向上すげるためのツールや考え方について解説してきました。 これまでに解説してきたCI/CDやGit、IDEなどは、どちらかと言うとDevの作業を加速させるためのツールでした。今回からはOps側の作業を加速させるツールについて考えみましょう。Opsがメインに行っている作業は環境構築や運用です。これらを効率的に管理する「IaC」について解説します。 IaCとは 「IaC」は「Infrastructure as Code」の略で、コードを活用してインフラストラクチャの運用・構築を自動化することを指します。ここで挙げているコードとは「構成管理ツールが解釈できるコード」です。IaCは構築の自動化を目指した手法を意味し、IaCを実現するには構成管理ツールを使用します。 構成管理とは 「構成管理」はハードウェア、ソフトウェア、ネットワークなどのシステムを構成している要素を把握し管理することを指しますす。構成管理を行うことでシステムに多くの変更を加えても、状態を把握できていれば期待通りに動作させることができます。 例えば、構成管理を行わずに構築しっぱなしの環境を想像してみてください。構成要素が分からないため同じ構成のシステムは構築できません。メンテナンスが必要になった場合にも、どの要素が依存関係にあるのか分からないため、恐ろしくてそのシステムに手を入れることができなくなるでしょう。そういった意味でも構成管理は重要です。 構成管理ツールとは 「構成管理ツール」は、名前のとおり構成管理を行うためのツールです。RubyやPythonなどのプログラミング言語、YAMLフォーマットのテキストファイルなどを用いて構成管理を行います。具体的には構成に必要な要素や構築手順などをコードとして記述し、構成管理ツールがそれを実行します。コードはテキストファイルであるためバージョン管理ツールで管理できます。バージョン管理ツールを使うことで変更の追跡や構成のレビューを効率的に行えます。 コードの種類 構成管理ツールのコードには「手続き型」と「宣言型」と呼ばれる2つの記述方法があります。この2つの記述方法にはどのような違いがあるか解説します。 ・手続き型システムの構成が“あるべき状態”となるように手順をコードとして記述していきます。構成管理ツールは対象のシステム内でこの手順を積み重ねることで、あるべき状態へ向かっていきます。 例えば、サーバーを2台起動するとしましょう。コードには「現在のサーバー台数」を取得し、足りなければ追加、超過していれば削除するような処理を記述します。これは構築手順書をコード化したようなものなので、手作業による構築に慣れ親しんだ方であれば簡単に理解できるでしょう。普段からこのような作業をしている方なら手続き型は学習コストが低いと言えます。 手続き型の欠点は「あるべき状態」がコードとして記述されていない点です。先の例ではサーバーを2台起動するために2台未満か超過かで条件分岐をしています。簡単な構成であるため結果として2台に収束するというのは分かりますが、コードには「2台必要」とは記述されていません。複雑な構成であればどうでしょうか。コードを実行するまでどのような状態になるのかが不明である可能性があります。 手続き型の主なツールはChef、Ansibleなどが存在します。構成管理ツールとは少し毛色が違いますが、手順を重ねていくという点でシェルスクリプトも手続き型と言えるでしょう。 ・宣言型システム構成のあるべき状態を記述します。手続き型ではあるべき状態へ向かうための手順を記述しましたが、宣言型ではあるべき状態のみを記述し、構築作業は構成管理ツールに任せます。 手続き型と同様に、2台のサーバーを起動するとしましょう。手続き型では構築手順を記述したのに対し、宣言型は「サーバーを2台起動」と宣言するのみです。あるべき状態を宣言しているため最終的にどのような構成になるのかをコードから読み取りやすくなります。 宣言型の欠点は、ツールのバージョンにシビアである点です。宣言型の構成管理ツールはツールが構築を担当するため、そのバージョンごとに実行される手順が異なっていたり、APIのエンドポイントが変更されていたりする可能性があります。そのため、宣言型のツールを使用する場合は構成管理ツールのバージョンを固定し、ツールのアップデートは慎重に行う必要があります。 宣言型の主なツールとして、Terraform、Puppetなどが存在します。…
