構成管理

エンジニアリング チームによる堅牢かつ安定したシステムの構築に、構成管理がどのように役立つのか

Ian Buchanan Ian Buchanan

1950 年代、アメリカ合衆国国防総省は、複雑なシステムの開発における変化を追跡するための技術管理の規律を開発しました。今日は構成管理と呼ばれる技術管理システムを確立する統合ガイドブックを 2001 年に公開するまで、このシステムや各種イテレーションには、非常に技術的な名前が付けられていました。現在、構成管理は国防総省だけでなく、ソフトウェア開発、IT サービス管理、土木工学、生産工学など、さまざまな分野で使用されています。

構成管理とは何か

構成管理図

構成管理とは、製品の使用期間を通じてその属性の一貫性を確立するためのシステム エンジニアリング プロセスです。テクノロジーの世界では、IT システムの個々の構成項目を追跡する IT 管理プロセスです。IT システムは、さまざまなレベルに細分化された IT 資産で構成されています。IT 資産は、ソフトウェア、サーバー、またはサーバーのクラスターを表す場合があります。以下では、IT ソフトウェア資産およびソフトウェア資産 CI/CD に直接適用されるため、構成管理に重点を置いています。

ソフトウェア構成管理は、ソフトウェア システム構成メタデータの変更を追跡して監視するシステム エンジニアリング プロセスです。ソフトウェア開発では、構成管理はバージョン管理や CI/CD インフラストラクチャと並んで一般に使用されています。この記事では、アジャイル CI/CD ソフトウェア環境での最新のアプリケーションと使用に焦点を当てています。

構成管理が重要である理由

構成管理は、構成データの更新を自動で管理して監視するツールを使用して、エンジニアリング チームによる堅牢かつ安定したシステムの構築をサポートします。複雑なソフトウェア システムは、サイズと複雑さの具合が異なるコンポーネントで構成されています。より具体的な例については、マイクロサービス アーキテクチャを考えてみましょう。マイクロサービス アーキテクチャの各サービスは、構成メタデータを使用してそれ自体を登録し、初期化します。ソフトウェア構成のメタデータの例を次に示します。

  • CPU、RAM などのコンピューター ハードウェア リソース割り当ての仕様
  • 他のサービス、データベース、またはドメインへの外部接続を指定するエンドポイント
  • パスワードや暗号化キーなどのシークレット

これらの構成値は後回しにされやすく、構成が混乱して分散することがあります。パスワードや URL を書き留めた付箋のメモが散らばっているオフィスを想像してみてください。構成管理は、構成の一元的な場所に「信頼できる情報源」を作成することで、この問題を解決します。

Git は、構成データを管理するための非常に優れたプラットフォームです。設定データを Git リポジトリに移動すると、バージョン管理とリポジトリが信頼できる情報源として機能するようになります。バージョン管理は、予期せぬ重大な変更という別の構成上の問題も解決します。コード レビューとバージョン管理を使用して予期せぬ変更を管理することで、ダウンタイムを最小限に抑えられます。

構成値はほとんどの場合に追加、削除、または変更されます。バージョン管理されていないと問題が発生する可能性があります。あるチーム メンバーが個人の PC でソフトウェアの効率を上げるために、ハードウェアの割り当て値を調整したとします。その後、ソフトウェアを本番環境にデプロイすると、この新しい構成の影響が最適ではなくなったり故障したりする可能性があります。

バージョン管理と構成管理では、構成の変更に可視性を加えることによってこの問題を解決します。構成データに変更が加えられると、バージョン管理システムがそれを追跡して、チーム メンバーが変更の監査証跡を確認できるようになります。

構成のバージョン管理によってロールバックや構成を「元に戻す」機能が有効になり、予期しない障害を回避できます。構成に適用されているバージョン管理によって、ただちに直前の既知の安定した状態に戻せます。

構成管理が DevOps、CI/CD、アジャイルとどの程度調和するか

構成データはこれまで扱いにくいものとされており、後回しにされやすいものです。これは実際にはコードではないためそのままではバージョン管理に組み込まれず、また最重要のデータでもないためプライマリ データベースには保存されません。従来型や小規模のシステム管理は通常、一連のスクリプトとアドホック プロセスを利用して行われます。構成データは見落とされることがありますが、システムの動作には重要なものです。

クラウド インフラストラクチャの台頭によって、インフラストラクチャ管理の新たなパターンが開発されて採用されています。複雑なクラウド ベースのシステム アーキテクチャは、構成データ ファイルを使用して管理されてデプロイされます。これらの新しいクラウド プラットフォームでは、チームは YAML などの人間と機械が読み取れる形式のデータ ファイルを介してプロビジョニングするハードウェア リソースとネットワーク接続を指定できます。次にそのデータ ファイルが読み込まれて、インフラストラクチャがクラウドにプロビジョニングされます。このパターンは、コードとしてのインフラストラクチャ (IaC) と呼ばれます。

DevOps 構成管理

インターネット アプリケーション開発の初期には、ハードウェア リソースとシステム管理は主に手動で行われていました。システム管理者は構成データに基づいてハードウェア リソースを手動でプロビジョニングして管理しながら、構成データを扱っていました。

構成管理は DevOps ライフサイクルの重要な部分です。DevOps 構成は、システム管理ロールの進化と自動化であり、インフラストラクチャの管理とデプロイを自動化するものです。

DevOps 構成によって、ソフトウェア エンジニアリングの分野もシステム管理の対象となりました。今日の企業は、ソフトウェア エンジニアがオンデマンドで必要なリソースを要求してプロビジョニングできるように DevOps 構成を活用しています。これによって、ソフトウェア開発チームが別のシステム管理チームのリソースを待機するというような、潜在的な組織依存のボトルネックが解消されます。

CI/CD 構成管理

CI/CD 構成管理ではプル リクエスト ベースのコード レビュー ワークフローを使用して、ライブ ソフトウェア システムへのコード変更のデプロイを自動化します。この同じフローは構成の変更にも適用できます。CI/CD を設定すると、承認された構成変更リクエストを実行中のシステムにただちに展開できます。このプロセスの完全な例としては、GitOps ワークフローがあります。

アジャイル構成管理

構成管理によって、アジャイル チームは構成作業を明確にトリアージして優先順位を付けられます。構成作業の例としては、次のような日常的な作業やタスクがあります。

  • 実稼働 SSL 証明書を更新する
  • 新しいデータベース エンドポイントを追加する
  • 開発、ステージング、本番のメール サービスのパスワードを変更する
  • 新しいサードパーティ統合用の API キーを追加する

構成管理プラットフォームが稼働すると、チームは構成タスクに必要な作業を可視化できます。構成管理の作業は他の作業に依存するものとして識別されて、アジャイル スプリントの一部として適切に対処できます。

構成管理ツール

構成管理ツール

Git

Git は、コードの変更を追跡する業界トップのバージョン管理システムです。Git リポジトリの構成管理データをコードと併せて追加すると、プロジェクト全体の全体的なバージョン管理ビューが提供されます。Git は、より高いレベルの設定管理における基礎的なツールです。次に示すその他の構成管理ツールの一覧は、Git リポジトリに格納されて Git バージョン管理の追跡を活用するように設計されています。

Docker

Docker は、構成ロックダウンのような高度な構成管理の形式であるコンテナー化を導入しました。Docker は Dockerfiles と呼ばれるコマンド リストを含む設定ファイルに基づいており、このリストはオペレーティング システムの状態の想定スナップショットを再構築するために評価されます。Docker は、事前構成されたアプリケーションのスナップショットであるこれらの Dockerfiles からコンテナーを作成します。バージョン管理のために Git リポジトリにコミットされる Dockerfiles は、インフラストラクチャにデプロイするには追加の構成管理が必要です。

Terraform

Terraform は HashiCorp によるオープン ソース構成管理プラットフォームです。Terraform は IaC を使用して、クラスター、クラウド インフラストラクチャ、またはサービスをプロビジョニングして管理します。Terraform は、Amazon Web Services (AWS)、Microsoft Azure とその他のクラウド プラットフォームをサポートしています。各クラウド プラットフォームには、サーバー、データベース、キューなどの一般的なインフラストラクチャ コンポーネント用に独自の表現とインターフェイスがあります。Terraform は、クラウド プラットフォーム用の構成ツールの抽象化レイヤーを構築して、チームがインフラストラクチャの再現可能な定義であるファイルを記述できるようにします。

Ansible、Salt Stack、Chef、Puppet

Ansible、Salt Stack、Chef は IT 自動化のフレームワークです。これらのフレームワークは、従来のさまざまなシステム管理者のプロセスを自動化します。各フレームワークは、実行可能ファイルによって評価される一連の構成データ ファイル (通常は YAML または XML) を使用します。

設定データ ファイルは、システムを設定するための一連のアクションを指定します。アクションは実行可能ファイルによって実行されます。実行可能ファイルはシステムに応じて言語が異なり、Ansible と Salt Stack は Python ベース、Chef は Ruby ベースです。このワークフローはアドホック シェル スクリプトの実行に似ていますが、それぞれのプラットフォーム エコシステムを通じてより構造的で洗練されたエクスペリエンスを提供しています。これらのツールは、CI/CD を実現するために必要な自動化を可能にするものです。

構成管理の実装方法

識別

構成管理に対する最初のアクションは情報収集です。構成データは、使用中のすべてのコンポーネントとサービスについて、さまざまなアプリケーション環境、開発、ステージング、本番環境から集約されてコンパイルされる必要があります。パスワードやキーなどの秘密データは、特定されて安全に暗号化してから保管される必要があります。構成データは、この時点で主要な情報源として特定できるデータ ファイルに整理されているはずです。

ベースライン

構成データが集約されて整理されると、ベースラインを確立できます。ベースライン構成は、依存関係にあるソフトウェアをエラーなしで正常に動作させる既知の構成の状態です。このベースラインは通常、稼働している本番環境の構成を確認して、それらの構成設定をコミットして作成されます。

バージョン管理

開発プロジェクトではバージョン管理システムを使用する必要があります。使用しない場合は、Git をインストールしてプロジェクトのリポジトリを初期化し、構成データ ファイルをリポジトリに追加します。リポジトリに構成データを追加する前には注意が必要です。パスワードやキーなどの秘密データが外部キーで暗号化されていることを確認してください。秘密データが誤ってリポジトリにコミットされると、大きなリスクが生じます。リポジトリの履歴から完全に消去しないと、悪用される危険があります。

監査

構成データを整理してリポジトリに追加すると、コラボレーションが可能になってシステムの構成に可視性をもたらします。ソフトウェア チームがコードのレビューや編集に使用する一般的なプル リクエスト ワークフローは、設定データ ファイルに適用できます。これによって、監査および会計システムの構築に役立ちます。構成に適用されたすべての変更は、チームによる確認と承認が必要です。これによって、構成の変更に対する説明責任と可視性が向上します。

結論

構成管理は、複雑なソフトウェア システムを管理するために必要なツールです。構成管理の不足は、信頼性、アップタイム、システムの拡張能力に深刻な問題をもたらしかねません。現在のソフトウェア開発ツールの多くは、構成管理機能が組み込まれています。Bitbucket は、Git プル リクエスト ワークフローと CI/CD パイプラインを中心に構築されている、構成管理のための強力なシステムを提供します。