支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • Serverspecとは?詳しく解説

Serverspecの概要について

ここでは、Serverspecについて説明させていただきます。
Serverspecはテスト工程を自動化するツールであり、オープンソースソフトウェア(OSS)として有名なツールの一つです。 Serverspecを使用すると、サーバーが正しく構成されていることを確認するためのRSpecテストを簡単に作成することができる点が特徴です。 ローカル、SSH、WinRM、Docker APIなどを介してコマンドを実行することにより、サーバーの実際の状態をテストするので、サーバーにエージェントソフトウェアをインストールする必要はなく利用できます。 サーバー構築時に様々な見落としを防ぐことや、確認作業を簡単にするなどの多くのメリットを享受することが可能となります。また、Serverspecを利用することで、簡単にサーバー構成時のテストを実施することが可能となります。 簡単な確認から比較的細かい確認まで実施することが可能となりますので、手動でなく自動でテストを実施し時間を短縮する際には非常に便利なツールと言えるでしょう。

現在のソフトウェア開発において自動化は重要なキーワードです。 特に、DX化が推進されるにあたりDevOpsなどの開発手法が多くの企業に導入され主流となる現在においては自動化のテクノロジーを理解することは必須と言えるでしょう。 DXはDigital Transformation(デジタルトランスフォーメーション)の略語でその名の通り、デジタル技術を通じて業務プロセス・プロダクト・サービスを変革することを指します。 デジタル技術を使い人々の生活を豊かにするという点が最大のミッションの一つです。 DXにおいては効率性自体が目的ではなく、テクノロジーにより空いた時間を創造的に使うことや、全く新しいビジネスを創造するなど人々の暮らしに対して革新を与えることが目的とされております。 ソフトウェア開発の世界の様々なテクノロジーがDXを推進することは間違いありません。
これらのDXを支える開発手法の一つがDevOpsとなります。 DevOpsとは開発 (Development) と運用 (Operations) を組み合わせた言葉となります。 この概念は従来のように開発チーム、運用チーム、テストチームなどを明確に工程ごとに切り分けないで運用するという点が大きな特徴です。 上記のように開発チーム、運用チーム、テストチームが密に連携することでソフトウェア開発およびサービスリリースに大きな影響をあたることが可能となります。 これらの開発には自動化が必須であり様々な最新テクノロジーを導入することで効率性を高めます。

AnsibleとChef

Ansibleに関連の高いキーワードとしてChefがあります。
Chefはインフラストラクチャをコードとして定義するための構成管理ツールであり、構成とシステム状態を管理するプロセスを自動化してテスト可能にします。 他の構成ソリューションとは異なり、Chefは、テスト駆動開発とべき等の原則に基づいたポリシーベースのアプローチを採用しています。 システム構成とアプリケーション変更のテストは並行して実行できるため、システムの状態は、すべてのインフラストラクチャとチームにわたって簡単に実施および監視できます。 Chefを使用すると、ユーザーは構成を一度定義すると、OSのバージョンやアーキテクチャに関係なく、Linux、Mac、およびWindowsシステムの混合フリートにそれらを適用できます。
Chefは、同名の企業によって開発されるRubyとErlangで記述された構成管理ツールであり、システム構成の記述には、Rubyが使用されております。 構成管理ツールは様々な製品がリリースされておりますが、キーワードとなるのがやはり自動化のテクノロジーです。自動化のテクノロジーにより効率的な構成管理を実施することが可能となるため、多くの企業が導入を進めております。一方で、構成管理ツールはあくまでも業務を円滑するために社内の様々なリソースの管理を行うという観点が重視されます。 構成機能の最大のメリットは自動化を行うという点となります。 また、社内のリソースを一元管理し管理者の負担を減らすということもメリットとして忘れてはいけません。Chefは、サーバーの構成と保守のタスクを合理化するために設定されており多くの企業の導入されております。
また、Internap、Amazon EC2、Google Cloud Platform、Oracle Cloud、OpenStack、SoftLayer、Microsoft Azure、Rackspaceなどのクラウドベースのプラットフォームと統合して、自動的にプロビジョニングし、新しいマシンを構成することが可能である点もその特徴です。 Chefには、小規模システムと大規模システムの両方に対応するソリューションが含まれており、それぞれの範囲に応じた機能と価格が設定されていることで知られております。

Chefを導入する点の大きなメリットがセキュリティ面です。
近年においてセキュリティの重要性は増す一方です。 従来のInfrastructure as Code(IAC)アプローチは、現代のセキュリティ志向の組織のニーズを満たすことは難しくなってきております。 コードとしてのインフラストラクチャは、ソフトウェアツールを使用してITインフラストラクチャを管理およびプロビジョニングするインフラストラクチャ管理へのアプローチです。 このアプローチを使用する利点は、スケーラブルで再現性があり、高度な自動化を備えていることです。 これにより、ITインフラストラクチャを拡張できるため、重要なテクノロジーと言えるでしょう。
では、Chef Workstationについて紹介させていただきます。
Chef Workstationは、ユーザーがChefを使い始めるために必要なすべてのツールを1つの簡単にインストールできるパッケージで提供します。また、ローカル開発者エクスペリエンスを提供し、Linux、Macラップトップ、またはWindowsシステムで実行できます。 Chef Workstationは複数の機能を搭載し、これらを提供します。 Chefツールとして、Chef Infra Client、Chef InSpec、Chef Habitatなどの機能が内包されます。 Chef Languageとして、システムを管理するための事前に構築されたリソースと、クックブックの作成と配布を容易にするヘルパーが搭載されております。 テストおよびアップグレードツールとしてテストキッチン、Chef Cookstyle、およびChef Upgrade Labなどが 搭載されております。
構成ポリシーの作成についても紹介させていただきます。 Chef Infra Cookbookは、構成およびポリシー自動化配布の基本単位です。クックブックは、ファイル、テンプレート、ソフトウェアパッケージなど、管理下にあるシステムリソースを説明するために使用されます。リソースは、人間が読めるコードで各システムの望ましい状態を記述するChefInfraレシピで定義されています。 コードは目的の状態を記述し、ChefInfraClientが自動的にシステムを構成します。
Chef Workstationのテスト構成ポリシーについても説明させていただきます。 Test Kitchen は、Vagrant、Docker、VMware vSphere、または主要なクラウドプロバイダーを使用してクックブックをテストするオープンソースのテストフレームワークとなります。 Chef Cookstyleは、問題を検出してクックブックコードを自動的に修正することにより、ユーザーがより優れたChefInfraクックブックを作成するのに役立つコード分析ツールです。 Chef InSpec は、ポリシーをコードとして定義し、すべてのシステムとチームにわたるコンプライアンスステータスの継続的な可視性を提供するコンプライアンステストソリューションです。 Test Kitchen InSpecテストは、ローカルインフラストラクチャの検証を容易にするために、統合されたクックブックに対して実行できます。

Chefが利用される背景

Chefが多くのユーザーに利用されるには様々な理由があります。
ユーザーが構成を一度定義すると、OSのバージョンやアーキテクチャに関係なく、Linux、Mac、およびWindowsシステムの混合フリートにそれらを適用することが可能となります。これらはChefとコミュニティの両方によって作成された、事前に作成されたリソース、ヘルパー、およびクックブックの包括的なセットも含まれています。
一点目がリソースです。リソースは、パッケージ、ファイル、ディレクトリ、ファイアウォールなどのコンポーネントを構成するために使用されます。現在、Chef Infra Clientには、user、file、kernel_module、windows_taskなどの一般的な自動化タスク用に150を超えるリソースが付属しています。
二点目がヘルパーです。ヘルパーを使用するとユーザーはオペレーティングシステム、クラウド、仮想化ハイパーバイザーなどに基づいて構成を決定できます。
三点目がChefコミュニティです。Chefコミュニティは、Chef Infra用に、そのまままたは組織独自の構成のベースとして使用できる、無料で利用できる何千もの構成テンプレートとなります。 また、アジャイルテスト駆動開発プラクティスもChefに大きな影響を与えるテクノロジーです。 テスト駆動インフラストラクチャに関しては、Chefが書籍を出版するなどしており多くのユーザーが知るところとなっております。

Chefは、今日のアジャイルベースのデリバリーチームがエッジで実行されるスマートデバイスからオンプレミスサーバー、クラウドで実行される高度なワークロードまで、IT資産全体でシステムをテストおよび展開するために使用する、DevOpsの原則とテスト駆動インフラストラクチャプラクティスの開拓を支援しております。 これらのテクノロジーは今後ソフトウェア開発においてさらに重要性を増すことは間違いなく、 多くの現場や企業によって導入されているテクノロジーです。 これらのDevOpsデプロイメントの重要な部分は、開発、テスト、および本番環境ですべてが正常に実行されるようにすることです。 ポリシーファイルは、本番環境で実行されているChef Cookbookが、開発でテストされたものと同じバージョンであることを保証します。 ポリシーは不変であり、一度バンドルすると変更できないため、Chef Infra Clientは各実行の開始時に依存関係セットを再計算しなくなり、 クックブックの作成者は構成がポリシーの下から変更されることを心配する必要がなくなります。 Chefではこれらを実現し、多くのソフトウェア開発者を強力に支援します。

ServerspecとAnsible

Serverspecと関連性の高いキーワードとして、Ansibleがあります。
Ansibleは、アプリケーションのデプロイと管理のプロセスを自動化するソフトウェアであり、最もポピュラーなツールの一つです。 これはオープンソースのエージェントレスアーキテクチャであり、リモートマシンまたは仮想マシンにソフトウェアを展開するために使用できます。 エージェントレスであるため、リモートマシンまたは仮想マシンにソフトウェアをデプロイするために使用できます。 Ansibleを使用する利点は、ダウンタイムのコストを削減し、ITインフラストラクチャを管理するための統一された方法を提供し、セキュリティポリシーへの準拠を保証することです。
Ansibleの特徴としてはアプリケーションの展開、構成管理、およびITオーケストレーションを自動化するオープンソースソフトウェアであるという点です。 AnsibleはPythonで記述されており、リモート実行用にエージェントレスモードとエージェントモードの両方があります。構成管理ツールを導入することでユーザーが一元管理することができるという点もメリットと言えるでしょう。 システムの規模が大きくなることやサーバー、ネットワークの台数が増えるに従いユーザーの負荷が高まっていくことが 一般的ですが構成管理ツールによってその負荷を軽減して、 作業を効率化することができます。 また、従来であれば一台ごとに行っていた設定などを一度の操作により変更・構築などの作業を実現できる点も構成管理ツールの大きなメリットとなります。
Ansibleでは導入するメリットを「時間を節約し、生産性を高める」「反復的なタスクを排除する」「ミスとエラーが少ない」「コラボレーションと仕事の満足度を向上させる」と簡潔に表現しております。 また、自動化による影響として「複雑さを克服する」「イノベーションのためのより多くのリソース」 「説明責任とコンプライアンスを向上させる」という点もビジネス上の利点となるでしょう。

機能

Ansibleの機能についても簡単に触れておきます。
構成管理ツールは様々な製品がリリースされております。 また、多くの自動化ツールやテクノロジーが市場に投入されております。 機能を正しく理解することで、効率的にサーバー構築や管理、テストなどを実施することができるでしょう。。
Ansibleの特徴がエージェントレスとなります。
構成管理ツールでは管理対象のサーバーにエージェントをインストールして利用することが一般的ですがAnsibleにおいてはエージェントは不要となります。 AnsibleではPythonとSSH接続さえ利用することができれば、 各端末のエージェントがなくとも稼働することができるようになります。
従来のエージェント型の場合、リソースを食うことや手間がかかるなどのデメリットが存在したのですがAnsibleにおいてはそのようなリスクを回避できます。 また、冪等性(何度実行されても同じ状態に収束すること)もその特徴の一つと言えます。構成管理において「何度実行されても同じ状態に収束する」ことをは非常に重要なポイントであり、Ansibleではそれらを担保します。 nsibleにおける一連の処理はPlaybookという単位にまとめられ、PlaybookはYAML形式であるため可読性が高いこともその特徴となります。
以上が簡単ではありますがServerspecとAnsiblに関する説明とさせていただきます。

ServerspecとPuppet

Serverspecと関連性の高いキーワードとしてPuppetがあります。
Puppetはオープンソースの構成管理ツールであり、Rubyで記述されております。 Rubyは、1990年代に作成されたプログラミング言語です。 Webサイト、ゲーム、アプリの作成に使用されています。
Puppetは、継続的な運用で可能なことを再定義しています。これらは環境を簡単に自動化して、設計により応答性と予測性を備えた製品をクラウド速度とクラウドスケールで提供することが可能です。 IT自動化のためのオープンソースの構成管理ツールとして市場で人気を獲得していることで 知られ、インフラストラクチャ、アプリケーション、およびサービスの管理のために導入されます。 Puppetを使用すると、サーバーのプロビジョニングと構成のプロセスを自動化して、サーバーの展開と保守を容易にすることができます。 Puppetの宣言型言語は、基本的な詳細を気にすることなくシステムを構成するのに役立ちます。 また、インフラストラクチャ内のすべてのノードを一元的に制御するポイントも提供します。
Puppetの特徴の大きな特徴が設計です。 優れた設計を実現し応答性と予測性を備えた製品を使用して、大規模なインフラストラクチャ管理に全体的なアプローチを取ることが可能となります。 Puppetの自動化スイートには、セキュリティ、コンプライアンス、イノベーションが組み込まれており、システムを保護します。 また、それらのテクノロジーはITインフラストラクチャの管理に費やす時間を減らし、ビジネスの推進に多くの時間を費やすことを可能にします。 また、Puppet Enterpriseではエンタープライズ向けにさらに高機能なサービスを利用することができますので、そちらについても紹介させていただきます。

Puppet Enterpriseは、モデルベースの機能とタスクベースの機能の両方を組み合わせて、組織が自動化のフットプリントの拡大に​​合わせてマルチクラウドインフラストラクチャを拡張できるようにするソリューションです。 エージェントベースとエージェントレスの両方の機能により、組織は必要なものと必要な方法を自動化する柔軟性を備えており、ビジネスを強力に支援します。
Puppet Enterpriseの特徴の一点目が継続的デリバリーを可能にするテクノロジーです。 継続的デリバリーは、チームが短いサイクルでソフトウェアを作成するソフトウェア開発プロセスであり、ソフトウェアをいつでも確実にリリースできるようにします。
二点目がワークフローの自動化です。 既存のコードを再利用するか、 Puppet Forgeの共有コンテンツを統合して、複雑なタスクを調整し、アプリケーションの展開を計画します。柔軟性を高めるために、命令型(ワークフローベース)と宣言型(モデルベース)の両方の自動化タイプを使用してインフラストラクチャを管理します。 Puppet Forgeでは、多くのユーザーが利用するためのモジュールカタログを提供するコミュニティとして機能します。 これらはIT運用担当者が自動化プロセスを強化および簡素化し簡単に実行するために役立ちます。 ガイドとチュートリアルを備えたPuppetForgeは、現在のレベルに関係なく、Puppetでスキルを伸ばすためのプラットフォームを提供します。 Puppet Forgeでより少ない労力でより多くを自動化することができますので、積極的に活用することにより ビジネスを効率的に行うことができます。 Puppet Forgeの構成管理に関するモジュールは非常に多くの種類が準備されております。 構成管理の自動化は、将来のアーキテクチャを計画することと、最新の火災に対応するために毎日費やすことの違いになる可能性があります。 繰り返し可能なタスクをチームと共有することから、システムが承認されたベースラインから逸脱したときにインフラストラクチャを自動的に修復する方法を宣言することまで、Puppetは時間を取り戻すことができます。 Puppet Forgeには何千ものすぐに使用できるモジュールがあり、既存のシステムをすばやく強化し、新しい機能インフラストラクチャをプロビジョニングし、パッチ管理のバックログに数分で取り組み始めることができます。 多くのモジュールを理解し確認し、自社サービスに利用することでビジネスはより強力なものになるでしょう。それらを支えるテクノロジーの中でも最も重要な点がPuppet Boltとなります。

Puppet Boltはワークステーション上で実行され、クラウドリソースを含むIPアドレスを使用してすべてを直接自動化するための機能を提供します。Puppet Boltはすでに持っているスクリプトの周りにガードレールを追加するための軽量フレームワークを提供し、それらのタスクをPuppetコードと組み合わせて、あらゆる規模のインフラストラクチャに順番に変更を加えます。Puppet Boltは実行が速く、迅速に開始できるという点が大きな利点と言えるでしょう。 これらによる自動化は手動タスクに費やす時間を減らし、オープンソースのタスクオーケストレーターでより多くの仕事を実行することを可能にします。Puppet Boltはあらゆるユーザー、あらゆる言語、あらゆるOSに対応しており、専門的な知識を必要とせずに利用することができます。
Puppet Boltはエージェントレスとエージェントベースの両方の長所を1つのプラットフォームに組み合わせることが出来る点が大きな魅力です。 また、ガバナンス、柔軟性、および組み込みのチーム指向のワークフローを必要とする大規模な組織の場合はPuppetEnterpriseに簡単に移行できます。
Puppet Boltには、プロジェクトのニーズに合わせて構成できる多くのオプションと機能があります。Puppet Boltの構成は4つのカテゴリに分類されます。
一点目がPuppet Boltの動作です。出力を表示するときに使用する形式や、ターゲットに接続するときに使用するスレッドの数など、Puppet Bolt自体の実行方法を構成します。
二点目がプロジェクトです。インベントリファイルへのパスやHiera構成ファイルへのパスなど、Boltを実行しているPuppet Boltプロジェクトを構成します。
三点目がトランスポートです。SSHを使用する場合の秘密鍵へのパスや、WinRMを使用する場合に接続するポートなど、Puppet Boltがターゲットへの接続に使用するトランスポートを構成します。
四点目がインベントリデータです。これはPuppet Boltを使用して接続し、コマンドを実行するターゲットをグループ化して構成します。また、Puppet Boltで構成可能なすべてのオプションをプロジェクトレベルで設定でき、プロジェクト内で設定したオプションはすべて、そのプロジェクトにのみ適用されます。

機能

Puppet Boltに関するキーワードと機能をいくつか説明させていただきます。
一点目がmodulepathです。modulepathは、Boltがモジュールをロードするディレクトリの順序付きリストです。Boltがコマンドを実行すると、modulepathからモジュールが自動的にロードされます。 Boltにはデフォルトのモジュールパスがありますが、独自のモジュールパスを構成することもできます。これには、プロジェクト内のディレクトリまたはシステム上の他の場所のディレクトリを含めることができます。プロジェクトがデフォルトまたは構成済みのモジュールパスを使用しているかどうかに関係なく、Boltは自動的にディレクトリをモジュールパスに追加します。 これには、モジュールパスの先頭に追加されるコアボルトコンテンツを含むモジュールと、モジュールパスの末尾に追加されるバンドルコンテンツが含まれます。 モジュールパスの前にリストされたディレクトリからロードされたモジュールは、モジュールパスの後半のディレクトリからロードされた同じ名前のモジュールよりも優先されます。Boltがモジュールパスで同じ名前の2つのモジュールを検出した場合、優先順位の低いモジュールを無視し、警告またはエラーメッセージを出力しません。
二点目がモジュールです。 これはPuppetコンテンツの共有可能で再利用可能なパッケージです。それらには、プロジェクトで使用できるタスク、計画、機能、およびその他のタイプのコンテンツを含めることができます。Puppet Forgeからプロジェクトにモジュールをダウンロードしてインストールするか、独自のモジュールを作成できます。Boltには、すべてのプロジェクトで利用できるいくつかの便利なモジュールがプリインストールされています。 Puppet Boltを使用すると、プロジェクトが依存するモジュールを簡単に管理できます。Boltコマンドを使用して、プロジェクトのモジュールをインストールしたり、プロジェクトに新しいモジュールを追加したり、プロジェクトで使用可能なモジュールを表示したりできます。
三点目がプラグインです。 Puppet Boltは、プラグインを使用して、Puppet Boltの実行中に情報を動的にロードし、特定のアクションを実行する方法を変更することをサポートしています。 いくつかのプラグインが付属していますが、独自のプラグインを作成したり、他のユーザーが作成したプラグインをインストールしたりすることもできます。

まとめ

いかがでしたでしょうか?
Serverspecについて解説させていただきましたので、参考にしていただけましたら幸いです。