(57)【要約】  ある環境に対して生成されたシステムの構成定義ファイルを、容易に、他の環境に対するシステム配備に適用する。  配備装置１００のコンポーネント情報記憶部１１０は、システムを構成する各構成要素に対する、配備ツールに依存しない設定情報、及び、各構成要素と当該構成要素の配備に利用可能な各配備ツールとの組に対する、当該配備ツールによる配備処理、を含むコンポーネント情報１１１を記憶する。コンポーネント特定部１２０は、各構成要素について、コンポーネント情報１１１をもとに、指定された配備ツールに対応する配備処理を特定する。順序決定部１３０は、構成要素間の依存関係をもとに、特定した配備処理の実行順序を決定する。配備実行部１６０は、実行順序に従って、特定した配備処理を、構成要素の設定情報を適用して実行することにより、複数の構成要素を配備する。
2017017937.tif 000002
【特許請求の範囲】
【請求項１】
システムを構成する複数の構成要素の各々に対する、配備ツールに依存しない設定情報、及び、前記複数の構成要素の各々と当該構成要素の配備に利用可能な複数の配備ツールの各々との組に対する、当該構成要素を当該配備ツールにより配備する配備処理、を含むコンポーネント情報を記憶する、コンポーネント情報記憶手段と、
前記複数の構成要素の各々について、前記コンポーネント情報をもとに、前記複数の配備ツールの内の指定された配備ツールに対応する配備処理を特定する、特定手段と、
前記複数の構成要素間の依存関係をもとに、前記複数の構成要素の各々について特定した配備処理の実行順序を決定する、順序決定手段と、
前記決定された実行順序に従って、前記複数の構成要素の各々について特定した配備処理を、当該構成要素の設定情報を適用して実行することにより、前記複数の構成要素を配備する、配備実行手段と、
を備えた配備装置。
【請求項２】
さらに、前記コンポーネント情報は、前記複数の配備ツールの各々の前処理を含み、
前記順序決定手段は、前記複数の構成要素、及び、前記複数の配備ツールの間の依存関係をもとに、前記複数の構成要素の各々について特定した配備処理、及び、指定された配備ツールの前処理の実行順序を決定し、
前記配備実行手段は、前記決定された実行順序に従って、前記複数の構成要素の各々について特定した配備処理、及び、指定された配備ツールの前処理を実行する、
請求項１に記載の配備装置。
【請求項３】
前記コンポーネント情報は、前記複数の構成要素の各々に対する、前記設定情報を示す抽象コンポーネント、前記複数の構成要素の各々と前記複数の配備ツールの各々との組に対する、前記配備処理を示す具象コンポーネント、及び、前記複数の配備ツールの各々の前処理を示す配備コンポーネントを含み、
前記構成要素と当該構成要素を配備するための配備処理は、前記抽象コンポーネントと前記具象コンポーネントとの間の継承関係で示され、前記複数の構成要素、及び、前記複数の配備ツールの間の依存関係は、複数の前記抽象コンポーネント、及び、複数の前記配備コンポーネントの間の依存関係で示され、
前記特定手段は、前記抽象コンポーネントと前記具象コンポーネントとの間の継承関係をもとに、前記複数の配備ツールの内の指定された配備ツールに対応する配備処理を特定し、
前記順序決定手段は、前記複数の抽象コンポーネント、及び、前記複数の配備コンポーネントの間の依存関係をもとに、前記複数の構成要素の各々について特定した配備処理、及び、指定された配備ツールの前処理の実行順序を決定する、
請求項２に記載の配備装置。
【請求項４】
前記配備実行手段は、前記決定された実行順序を出力し、当該実行順序の出力に対して配備実行の指示が入力された場合、前記決定した実行順序に従って、前記複数の構成要素の各々について特定した配備処理を実行する、
請求項１または２に記載の配備装置。
【請求項５】
システムを構成する複数の構成要素の各々に対する、配備ツールに依存しない設定情報、及び、前記複数の構成要素の各々と当該構成要素の配備に利用可能な複数の配備ツールの各々との組に対する、当該構成要素を当該配備ツールにより配備する配備処理、を含むコンポーネント情報をもとに、前記複数の構成要素の各々について、前記複数の配備ツールの内の指定された配備ツールに対応する配備処理を特定し、
前記複数の構成要素間の依存関係をもとに、前記複数の構成要素の各々について特定した配備処理の実行順序を決定し、
前記決定された実行順序に従って、前記複数の構成要素の各々について特定した配備処理を、当該構成要素の設定情報を適用して実行することにより、前記複数の構成要素を配備する、
配備方法。
【請求項６】
さらに、前記コンポーネント情報は、前記複数の配備ツールの各々の前処理を含み、
前記実行順序を決定する場合、前記複数の構成要素、及び、前記複数の配備ツールの間の依存関係をもとに、前記複数の構成要素の各々について特定した配備処理、及び、指定された配備ツールの前処理の実行順序を決定し、
前記複数の構成要素を配備する場合、前記決定された実行順序に従って、前記複数の構成要素の各々について特定した配備処理、及び、指定された配備ツールの前処理を実行する、
請求項５に記載の配備方法。
【請求項７】
前記コンポーネント情報は、前記複数の構成要素の各々に対する、前記設定情報を示す抽象コンポーネント、前記複数の構成要素の各々と前記複数の配備ツールの各々との組に対する、前記配備処理を示す具象コンポーネント、及び、前記複数の配備ツールの各々の前処理を示す配備コンポーネントを含み、
前記構成要素と当該構成要素を配備するための配備処理は、前記抽象コンポーネントと前記具象コンポーネントとの間の継承関係で示され、前記複数の構成要素、及び、前記複数の配備ツールの間の依存関係は、複数の前記抽象コンポーネント、及び、複数の前記配備コンポーネントの間の依存関係で示され、
前記配備処理を特定する場合、前記抽象コンポーネントと前記具象コンポーネントとの間の継承関係をもとに、前記複数の配備ツールの内の指定された配備ツールに対応する配備処理を特定し、
前記実行順序を決定する場合、前記複数の抽象コンポーネント、及び、前記複数の配備コンポーネントの間の依存関係をもとに、前記複数の構成要素の各々について特定した配備処理、及び、指定された配備ツールの前処理の実行順序を決定する、
請求項６に記載の配備方法。
【請求項８】
さらに、前記決定された実行順序を出力し、当該実行順序の出力に対して配備実行の指示が入力された場合、前記決定した実行順序に従って、前記複数の構成要素の各々について特定した配備処理を実行する、
請求項５または６に記載の配備方法。
【請求項９】
コンピュータに、
システムを構成する複数の構成要素の各々に対する、配備ツールに依存しない設定情報、及び、前記複数の構成要素の各々と当該構成要素の配備に利用可能な複数の配備ツールの各々との組に対する、当該構成要素を当該配備ツールにより配備する配備処理、を含むコンポーネント情報をもとに、前記複数の構成要素の各々について、前記複数の配備ツールの内の指定された配備ツールに対応する配備処理を特定し、
前記複数の構成要素間の依存関係をもとに、前記複数の構成要素の各々について特定した配備処理の実行順序を決定し、
前記決定された実行順序に従って、前記複数の構成要素の各々について特定した配備処理を、当該構成要素の設定情報を適用して実行することにより、前記複数の構成要素を配備する、
処理を実行させるプログラムを格納する、コンピュータが読み取り可能な記録媒体。
【請求項１０】
さらに、前記コンポーネント情報は、前記複数の配備ツールの各々の前処理を含み、
前記実行順序を決定する場合、前記複数の構成要素、及び、前記複数の配備ツールの間の依存関係をもとに、前記複数の構成要素の各々について特定した配備処理、及び、指定された配備ツールの前処理の実行順序を決定し、
前記複数の構成要素を配備する場合、前記決定された実行順序に従って、前記複数の構成要素の各々について特定した配備処理、及び、指定された配備ツールの前処理を実行する、
処理を実行させる請求項９に記載のプログラムを格納する、コンピュータが読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、配備装置、配備方法、及び、記録媒体に関し、特に、情報システムの構築を行う配備装置、配備方法、及び、記録媒体に関する。
【背景技術】
【０００２】
近年、多くの情報システム（以下、単にシステムとも記載する）では、構成情報を構造化文書として記述することにより、その構成を管理している。特に、システムをクラウド基盤へ配備（デプロイ）するために、ＶＭ（仮想マシン）やネットワーク等、システムの構成要素に係る構成情報を構造化文書として記述し、構成定義ファイルとして管理することが広く行われている。この場合、構成情報は、例えば、ＸＭＬ（Extensible Markup Language）やＪＳＯＮ（JavaScript（登録商標） Object Notation）等の記述構文や形式で、一括して記述される。【０００３】
これらの構成定義ファイルは、構造化文書の取り扱い上の利点（例えば、部分的な切り出しや、コピー、再利用が容易である）を持つ。従って、デザインパターンを組み合わせることで、比較的容易に、個別の要件に合わせた複雑な情報システムを構築できる。【０００４】
また、構成定義ファイルに従って実行環境にシステムを配備するためには、構成定義ファイルに、さらに、各構成要素を配備するための配備ツールに係る記述が組み込まれる。配備ツールに係る記述としては、例えば、配備ツールの起動、配備ツール間のデータの受け渡し、構成要素間の依存関係に応じた配備ツールの起動順序に係る記述がある。【０００５】
このような配備ツールの一例が、例えば、非特許文献１に開示されている。非特許文献１に開示されている、アマゾンウェブサービス（登録商標）（以下、ＡＷＳと記載する）の配備ツールＣｌｏｕｄＦｏｒｍａｔｉｏｎでは、構成定義ファイルに記述されるＤｅｐｅｎｄｓＯｎという属性により、構成要素間の配備順序が制御される。また、他の配備ツールであるＰｕｐｐｅｔやＣｈｅｆ等でも、同様に、依存関係や設定順序が制御可能であり、これらのツールは、様々なシステムの配備で広く用いられている。【０００６】
システムの構成管理や配備をより効率化するために、このような構成定義ファイルを、複数の異なる環境へのシステム配備に適用することが要求されている。【０００７】
しかしながら、これらの構成定義ファイルの記述構文や形式は、一般に、環境において利用可能な配備ツールに応じて固定的に決まっている。したがって、ある環境に対して生成された構成定義ファイルを他の環境に対するシステム配備に適用（再利用）するためには、構成定義ファイルの形式の変換が必要である。【０００８】
例えば、ＶＭとＶＭ上のソフトウェアにより構成されるシステムをＡＷＳ環境へ配備するための構成定義ファイルにおいて、ＶＭの構成情報がＣｌｏｕｄＦｏｒｍａｔｉｏｎ形式、ソフトウェアの構成情報がＣｏｏｋｂｏｏｋ形式で記載されていると仮定する。Ｃｏｏｋｂｏｏｋ形式は、上述の配備ツールＣｈｅｆで用いられる記述形式である。同じシステムをＭｉｃｒｏｓｏｆｔ（登録商標）Ａｚｕｒｅ環境（以下Ａｚｕｒｅ環境）に配備する場合、構成定義ファイルにおけるこれらの構成情報の形式を、Ａｚｕｒｅ環境で利用可能な配備ツールで定義される形式に変換する必要がある。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】"AWS CloudFormation"、Amazon Web Services, Inc.、［online］、［2015年7月16日検索］、インターネット〈URL：http://aws.amazon.com/jp/cloudformation/〉
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上述のように、システムを、非特許文献１に記載されているような配備ツールに依存した構成定義ファイルに従って配備する場合、ある環境に対して生成された構成定義ファイルを、他の環境に対するシステム配備に適用することは難しいという課題があった。【００１１】
本発明の目的は、上述の課題を解決し、ある環境に対して生成されたシステムの構成定義ファイルを、容易に、他の環境に対するシステム配備に適用できる、配備装置、配備方法、及び、記録媒体を提供することにある。
【課題を解決するための手段】
【００１２】
本発明の配備装置は、システムを構成する複数の構成要素の各々に対する、配備ツールに依存しない設定情報、及び、前記複数の構成要素の各々と当該構成要素の配備に利用可能な複数の配備ツールの各々との組に対する、当該構成要素を当該配備ツールにより配備する配備処理、を含むコンポーネント情報を記憶する、コンポーネント情報記憶手段と、前記複数の構成要素の各々について、前記コンポーネント情報をもとに、前記複数の配備ツールの内の指定された配備ツールに対応する配備処理を特定する、特定手段と、前記複数の構成要素間の依存関係をもとに、前記複数の構成要素の各々について特定した配備処理の実行順序を決定する、順序決定手段と、前記決定された実行順序に従って、前記複数の構成要素の各々について特定した配備処理を、当該構成要素の設定情報を適用して実行することにより、前記複数の構成要素を配備する、配備実行手段と、を備える。【００１３】
本発明の配備方法は、システムを構成する複数の構成要素の各々に対する、配備ツールに依存しない設定情報、及び、前記複数の構成要素の各々と当該構成要素の配備に利用可能な複数の配備ツールの各々との組に対する、当該構成要素を当該配備ツールにより配備する配備処理、を含むコンポーネント情報をもとに、前記複数の構成要素の各々について、前記複数の配備ツールの内の指定された配備ツールに対応する配備処理を特定し、前記複数の構成要素間の依存関係をもとに、前記複数の構成要素の各々について特定した配備処理の実行順序を決定し、前記決定された実行順序に従って、前記複数の構成要素の各々について特定した配備処理を、当該構成要素の設定情報を適用して実行することにより、前記複数の構成要素を配備する。【００１４】
本発明のコンピュータが読み取り可能な記録媒体は、コンピュータに、システムを構成する複数の構成要素の各々に対する、配備ツールに依存しない設定情報、及び、前記複数の構成要素の各々と当該構成要素の配備に利用可能な複数の配備ツールの各々との組に対する、当該構成要素を当該配備ツールにより配備する配備処理、を含むコンポーネント情報をもとに、前記複数の構成要素の各々について、前記複数の配備ツールの内の指定された配備ツールに対応する配備処理を特定し、前記複数の構成要素間の依存関係をもとに、前記複数の構成要素の各々について特定した配備処理の実行順序を決定し、前記決定された実行順序に従って、前記複数の構成要素の各々について特定した配備処理を、当該構成要素の設定情報を適用して実行することにより、前記複数の構成要素を配備する、処理を実行させるプログラムを格納する。
【発明の効果】
【００１５】
本発明の効果は、ある環境に対して生成されたシステムの構成定義ファイルを、容易に、他の環境に対するシステム配備に適用できることである。
【図面の簡単な説明】
【００１６】
【図１】本発明の第１の実施の形態の特徴的な構成を示すブロック図である。
【図２】本発明の第１の実施の形態における、配備システムの構成を示すブロック図である。
【図３】本発明の第１の実施の形態における、コンピュータにより実現された配備装置１００の構成を示すブロック図である。
【図４】本発明の第１の実施の形態における、配備装置１００の動作を示すフローチャートである。
【図５】本発明の第１の実施の形態における、タスク実行処理（ステップＳ５）の詳細を示すフローチャートである。
【図６】本発明の第１の実施の形態における、コンポーネント情報１１１の例を示す図である。
【図７】本発明の第１の実施の形態における、システム定義の例である。
【図８】本発明の第１の実施の形態における、具象コンポーネントの特定の例を示す図である。
【図９】本発明の第１の実施の形態における、具象コンポーネントの詳細を示す図である。
【図１０】本発明の第１の実施の形態における、パラメータ収集後の具象コンポーネントの詳細を示す図である。
【図１１】本発明の第１の実施の形態における、トポロジカルソートの結果の例を示す図である。
【図１２】本発明の第２の実施の形態における、配備システムの構成を示すブロック図である。
【図１３】本発明の第２の実施の形態における、タスク実行処理（ステップＳ５）の詳細を示すフローチャートである。
【図１４】本発明の第２の実施の形態における、配備実行計画の出力画面の例を示す図である。
【発明を実施するための形態】
【００１７】
（第１の実施の形態）
本発明の第１の実施の形態について説明する。
【００１８】
はじめに、本発明の第１の実施の形態の構成を説明する。図２は、本発明の第１の実施の形態における、配備システムの構成を示すブロック図である。図２を参照すると、配備システムは、配備装置１００、配備環境２００、及び、入力装置３００を含む。配備装置１００は、配備環境２００、及び、入力装置３００とネットワーク等により接続される。配備環境２００は、複数接続されていてもよい。
【００１９】
配備装置１００は、入力装置３００から受信したシステムの構成定義ファイル（システム定義）に従って、構築対象の情報システムを配備環境２００に配備する。
【００２０】
配備環境２００は、例えば、上述のＡＷＳにおいて提供される実行環境であり、１以上のコンピュータを含む。配備環境２００は、コンピュータ上で、システムの構成要素である、仮想マシン（ＶＭ）、及び、当該ＶＭ上での、ＯＳ（Operating System）、ミドルウェア、アプリケーション等の、ソフトウェアモジュールの処理を実行する。
【００２１】
入力装置３００は、ユーザからシステム定義の入力を受け付け、配備装置１００に送信する。
【００２２】
図２を参照すると、本発明の第１の実施の形態の配備装置１００は、コンポーネント情報記憶部１１０、コンポーネント特定部１２０（または、特定部）、順序決定部１３０、パラメータ収集部１４０、タスク生成部１５０、及び、配備実行部１６０を含む。
【００２３】
コンポーネント情報記憶部１１０は、コンポーネント情報１１１を記憶する。本発明の実施の形態では、以下で説明するように、システムの構成要素の設定情報や、各構成要素を配備ツールにより配備するための配備処理、配備ツールの設定情報や前処理に係る記述をコンポーネントとして扱う。なお、本発明の実施の形態では、上述のＡＷＳにおけるＣｌｏｕｄＦｏｒｍａｔｉｏｎ等、構成要素（ソフトウェアモジュール）を配備するツールに加え、配備環境２００を使用するための準備や設定を行う操作群やスクリプトも、配備ツールとして扱う。
【００２４】
図６は、本発明の第１の実施の形態における、コンポーネント情報１１１の例を示す図である。本発明の実施の形態では、コンポーネントとして抽象コンポーネント、具象コンポーネント、及び、配備コンポーネントを用いる。
【００２５】
抽象コンポーネントは、システムの構成要素（ソフトウェアモジュール）を抽象化したコンポーネントであり、当該構成要素の、配備ツールに依存しないパラメータ（または、設定情報）（図６における「parameter」）を含む。
【００２６】
配備コンポーネントは、配備ツールに対応するコンポーネントであり、当該配備ツールのパラメータ（図６における「parameter」）、及び、当該配備ツールによって配備処理を実行可能な具象コンポーネントの識別子（図６における「component」）を含む。また、配備コンポーネントは、配備ツールの起動処理やヘルスチェック等、当該配備ツールを利用するために必要な前処理の記述（図示せず）を含んでいてもよい。
【００２７】
具象コンポーネントは、抽象コンポーネントを具体化したコンポーネントであり、抽象コンポーネントのパラメータを継承する。具象コンポーネントは、配備ツールに依存するパラメータ（図６における「parameter」）、及び、当該配備ツールを用いた配備処理の記述（図６における「deployment process」）を含む。具象コンポーネントは、各抽象コンポーネントについて利用可能な配備ツールごとに生成される。
【００２８】
図６において、実線の矢印は、継承関係を示し、矢印の元の具象コンポーネントが先の抽象コンポーネントのパラメータの値を継承する。
【００２９】
例えば、図６において、抽象コンポーネント「C_Linux」、「C_Apache」は、それぞれ、構成要素である、ＯＳ「Linux（登録商標）」、ミドルウェア「Apache（登録商標）」を抽象化したコンポーネントである。
【００３０】
配備コンポーネント「C_AWS」、「C_Ansible」は、それぞれ、配備ツール「AWS」、「Ansible」に対応するコンポーネントである。配備コンポーネント「C_AWS」には、配備ツール「AWS」により配備処理を実行可能な具象コンポーネント「C_AWS_Linux」が設定されている。配備コンポーネント「C_Ansible」には、配備ツール「Ansible」により配備処理を実行可能な具象コンポーネント「C_Ansible_Apache」が設定されている。
【００３１】
具象コンポーネント「C_AWS_Linux」、「C_Ansible_Apache」は、それぞれ、抽象コンポーネント「C_Linux」、「C_Apache」を具体化したコンポーネントである。具象コンポーネント「C_AWS_Linux」は、構成要素「Linux」を、配備ツール「AWS」を用いて配備するためのコンポーネントである。具象コンポーネント「C_AWS_Linux」と抽象コンポーネント「C_Linux」の間には、「C_AWS_Linux」が「C_Linux」を継承する継承関係が存在する。この継承関係は、具象コンポーネント「C_AWS_Linux」が、抽象コンポーネント「C_Linux」のパラメータの値を継承することを示す。また、具象コンポーネント「C_Ansible_Apache」は、構成要素「Apache」を、配備ツール「Ansible」を用いて配備することを示す。具象コンポーネント「C_Ansible_Apache」と抽象コンポーネント「C_Apache」の間には、「C_Ansible_Apache」が「C_Apache」を継承する継承関係が存在する。この継承関係は、具象コンポーネント「C_Ansible_Apache」が、抽象コンポーネント「C_Apache」のパラメータの値を継承することを示す。
【００３２】
これらのコンポーネントは、システム構築に利用可能な構成要素や、配備ツールに応じて、予め、配備システムの管理者やユーザ等により生成され、予め、コンポーネント情報１１１に登録されていると仮定する。
【００３３】
ユーザは、システム定義として、コンポーネント情報１１１に登録されているコンポーネントの内、システムの構成要素に対応する抽象コンポーネント、当該抽象コンポーネントを配備するための配備ツールに対応する配備コンポーネントを指定する。また、ユーザは、システム定義において、抽象コンポーネント、配備コンポーネント間の依存関係、及び、抽象コンポーネント、配備コンポーネントのパラメータの値も指定する。
【００３４】
図７は、本発明の第１の実施の形態における、システム定義の例である。図７において、点線の矢印はコンポーネント間の依存関係を示し、矢印の元のコンポーネントが先のコンポーネントに依存する。
【００３５】
例えば、図７において、抽象コンポーネント「C_Apache」と抽象コンポーネント「C_Linux」の間には、「C_Apache」が「C_Linux」に依存する依存関係が存在する。この依存関係は、構成要素「Apache」が、「Linux」により提供される機能やサービスを利用することを示す。
【００３６】
また、抽象コンポーネント「C_Linux」と配備コンポーネント「C_AWS」の間には、「C_Linux」が「C_AWS」に依存する依存関係が存在する。この依存関係は、構成要素「Linux」を、配備ツール「AWS」により配備することを示す。同様に、抽象コンポーネント「C_Apache」と配備コンポーネント「C_Ansible」との間には、「C_Apache」が「C_Ansible」に依存する依存関係が存在する。この依存関係は、構成要素「Apache」を、配備ツール「Ansible」により配備することを示す。
【００３７】
また、配備コンポーネント「C_Ansible」と抽象コンポーネント「C_Linux」の間には、「C_Ansible」が「C_Linux」に依存する依存関係が存在する。この依存関係は、構成要素「Ansible」が、「Linux」により提供される機能やサービスを利用することを示す。
【００３８】
コンポーネント特定部１２０は、コンポーネント情報１１１に含まれる具象コンポーネントの内、システム定義として指定された抽象コンポーネント、配備コンポーネントに対応する具象コンポーネントを特定する。
【００３９】
パラメータ収集部１４０は、具象コンポーネントのパラメータの値を、継承先の抽象コンポーネントのパラメータの値や、当該具象コンポーネントに対応する配備コンポーネントのパラメータの値をもとに決定する。
【００４０】
タスク生成部１５０は、各配備コンポーネントに記述された配備処理や、具象コンポーネントに記述された前処理を行うタスクを生成する。
【００４１】
順序決定部１３０は、抽象コンポーネント、配備コンポーネント間の依存関係をもとに、配備コンポーネント、具象コンポーネントに対して生成されたタスクの実行順序を決定する。
【００４２】
配備実行部１６０は、決定した実行順序に従って、生成されたタスクを実行することにより、システムの構成要素を配備し、システムを構築する。
【００４３】
なお、配備装置１００はＣＰＵ（Central Processing Unit）とプログラムを記憶した記憶媒体を含み、プログラムに基づく制御によって動作するコンピュータであってもよい。
【００４４】
図３は、本発明の第１の実施の形態における、コンピュータにより実現された配備装置１００の構成を示すブロック図である。
【００４５】
この場合、配備装置１００は、ＣＰＵ１０１、ハードディスクやメモリ等の記憶デバイス１０２（記憶媒体）、他の装置等と通信を行う通信デバイス１０３、キーボード、ディスプレイ等の入出力デバイス１０４を含む。ＣＰＵ１０１は、コンポーネント特定部１２０、順序決定部１３０、パラメータ収集部１４０、タスク生成部１５０、及び、配備実行部１６０を実現するためのコンピュータプログラムを実行する。記憶デバイス１０２は、コンポーネント情報記憶部１１０のデータを記憶する。通信デバイス１０３は、入力装置３００からシステム定義を受信する。また、通信デバイス１０３は、配備環境２００へ、配備要求を送信する。入出力デバイス１０４は、コンポーネント情報１１１や配備装置１００に係る各種設定等の、管理者やユーザ等からの入力、及び、管理者やユーザ等への出力を行う。
【００４６】
また、配備装置１００の各構成要素は、独立した論理回路でもよい。
【００４７】
また、配備装置１００の各構成要素は、有線、または、無線により接続された、異なる装置に分散して配置されていてもよい。
【００４８】
次に、本発明の第１の実施の形態の動作を説明する。図４は、本発明の第１の実施の形態における、配備装置１００の動作を示すフローチャートである。
【００４９】
ここでは、コンポーネント情報記憶部１１０に、図６のようなコンポーネント情報１１１が格納されており、構築対象のシステムのシステム定義として、図７のようなシステム定義がユーザより入力された仮定する。
【００５０】
はじめに、コンポーネント特定部１２０は、システム定義で指定された抽象コンポーネント、及び、配備コンポーネントに対応する具象コンポーネントを特定する（ステップＳ１）。
【００５１】
ここで、コンポーネント特定部１２０は、コンポーネント情報１１１から、指定された抽象コンポーネントを継承し、当該抽象コンポーネントが依存する配備コンポーネントに識別子が設定されている具象コンポーネントを特定する。
【００５２】
図８は、本発明の第１の実施の形態における、具象コンポーネントの特定の例を示す図である。
【００５３】
例えば、コンポーネント特定部１２０は、図８に示すように、抽象コンポーネント「C_Linux」を継承し、「C_Linux」が依存する配備コンポーネント「C_AWS」に設定されている具象コンポーネント「C_AWS_Linux」を特定する。また、コンポーネント特定部１２０は、抽象コンポーネント「C_Apache」を継承し、「C_Apache」が依存する配備コンポーネント「C_Ansible」に設定されている具象コンポーネント「C_Ansible_Apache」を特定する。
【００５４】
次に、パラメータ収集部１４０は、特定した具象コンポーネントのパラメータの値を決定する（ステップＳ２）。
【００５５】
図９は、本発明の第１の実施の形態における、具象コンポーネントの詳細を示す図である。具象コンポーネントでは、配備処理（deployment process）として、配備ツールで定義される、構成要素を配備するための操作（コマンド）の文字列が記述される。なお、コマンドとして、ＨＴＴＰ（Hypertext Transfer Protocol）リクエストやＦＴＰ（File Transfer Protocol）によるファイル転送が指定されていてもよい。
【００５６】
コマンドの文字列は、パラメータ名を示す可変文字列を含む。図９の例では、具象コンポーネント「C_Ansible_Apache」のコマンドに、可変文字列「{{hostIp}}」が含まれている。また、コマンド内で参照される外部ファイルに、可変文字列が含まれていてもよい。図９の例では、コマンド内で参照される外部ファイル「playbook.yml」に、可変文字列「{{rootDir}}」、「{{port}}」が含まれている。コマンドとして、ＨＴＴＰリクエストが指定されている場合、ＨＴＴＰリクエストに付与されるＪＳＯＮ形式等の構造化ファイルに、可変文字列が含まれていてもよい。
【００５７】
また、具象コンポーネントでは、パラメータ（parameter）として、可変文字列として指定されたパラメータが示される。図９の例では、コマンド、及び、外部ファイルで指定された、パラメータ「hostIp」、「rootDir」、「port」が示されている。
【００５８】
パラメータ収集部１４０は、具象コンポーネントの継承先の抽象コンポーネントや当該抽象コンポーネントの依存先の他のコンポーネントの、同じ名前（文字列）のパラメータの値をもとに、各パラメータの値を取得する。そして、パラメータ収集部１４０は、取得した値を、コマンドや外部ファイルの対応する可変文字列と置き換える。
【００５９】
図１０は、本発明の第１の実施の形態における、パラメータ収集後の具象コンポーネントの詳細を示す図である。例えば、パラメータ収集部１４０は、図１０に示すように、具象コンポーネント「C_Ansible_Apache」のコマンドの可変文字列「{{hostIp}}」を、抽象コンポーネント「C_Linux」で指定されたパラメータ「hostIp」の値「192.168.0.1」で置き換える。また、パラメータ収集部１４０は、外部ファイル「playbook.yml」の可変文字列「{{rootDir}}」、「{{port}}」を、それぞれ、抽象コンポーネント「C_Apache」で指定されたパラメータ「rootDir」の値「/var/lib/www」、「port」の値「80」で置き換える。
【００６０】
パラメータ収集部１４０は、具象コンポーネント「C_AWS_Linux」についても同様に、可変文字列として指定されたパラメータの値を、抽象コンポーネント「C_Linux」や他のコンポーネントのパラメータの値から取得する。
【００６１】
なお、パラメータ収集部１４０は、配備コンポーネントの前処理についても、同様に、コマンドの可変文字列としてパラメータを定義し、他のコンポーネントからパラメータの値を取得してもよい。
【００６２】
次に、タスク生成部１５０は、各配備コンポーネントで記述される前処理、及び、各具象コンポーネントで記述される配備処理を実行するためのタスクを生成する（ステップＳ３）。
【００６３】
ここで、タスク生成部１５０は、各配備コンポーネントで記述される前処理、及び、各具象コンポーネントで記述される配備処理について、パラメータの値が埋め込まれたコマンドを実行するためのタスクを生成する。タスク生成部１５０は、生成したタスクのリスト（タスクリスト）を、配備実行部１６０に転送する。
【００６４】
例えば、タスク生成部１５０は、具象コンポーネント「C_Ansible_Apache」について、図１０のコマンドを実行するタスクを生成する。同様に、タスク生成部１５０は、具象コンポーネント「C_AWS_Linux」、配備コンポーネント「C_Ansible」、「C_AWS」についても、タスクを生成する。
【００６５】
次に、順序決定部１３０は、配備コンポーネント、及び、具象コンポーネントに対して生成されたタスクの実行順序を決定する（ステップＳ４）。
【００６６】
ここで、順序決定部１３０は、配備コンポーネント、及び、具象コンポーネントが継承する抽象コンポーネント間の依存関係をもとに、配備コンポーネント、及び、具象コンポーネントに対するタスクの実行順序を決定する。ここで、ユーザから入力されるシステム定義は、コンポーネント間で依存関係が循環しないように設定されると仮定する。この場合、システム定義は、コンポーネントがノード、依存関係がエッジである有向非循環グラフと考えることができる。有向非循環グラフは、一般に、トポロジカルソートを行うことで順序付けを行うことができ、決定した順序を、各タスクの実行順序として用いることができる。有向非循環グラフをトポロジカルソートするアルゴリズムは、いくつか提案されているが、本発明の実施の形態では、利用するアルゴリズムは限定されない。順序決定部１３０は、トポロジカルソートの結果を、配備実行部１６０に転送する。
【００６７】
図１１は、本発明の第１の実施の形態における、トポロジカルソートの結果の例を示す図である。例えば、順序決定部１３０は、図７のシステム定義で指定された配備コンポーネント、及び、抽象コンポーネントについて、依存関係に従って、図１１のようにトポロジカルソートを行う。トポロジカルソートの結果は、依存関係に従っているため、実際のタスクの実行順序は、トポロジカルソートの結果の逆順となる。
【００６８】
次に、配備実行部１６０は、決定した実行順序に従って、タスクを実行することにより、システムの構成要素を配備する（ステップＳ５）。
【００６９】
ここで、配備実行部１６０は、配備コンポーネントに対して生成されたタスク、及び、抽象コンポーネントに対応する具象コンポーネントに対して生成されたタスクを、トポロジカルソートの結果の逆順で順番に実行する。
【００７０】
図５は、本発明の第１の実施の形態における、タスク実行処理（ステップＳ５）の詳細を示すフローチャートである。
【００７１】
配備実行部１６０は、順序決定部１３０より取得したトポロジカルソートの結果の最後尾から順番に、コンポーネント（ノード）を１つ抽出する（ステップＳ５１）。配備実行部１６０は、タスク生成部１５０より取得したタスクリストから、抽出したコンポーネントに対応するタスクを取得する（ステップＳ５２）。配備実行部１６０は、取得したタスクを実行し、配備ツールからの配備結果をチェックする（ステップＳ５３）。配備結果が失敗の場合（ステップＳ５４／Ｎ）、配備実行部１６０は、エラーログを出力し（ステップＳ５６）、タスク実行処理を終了する。配備結果が成功の場合（ステップＳ５４／Ｙ）、配備実行部１６０は、トポロジカルソートの結果に含まれる全てのコンポーネント（ノード）についての処理が行われるまで、ステップＳ５１〜Ｓ５４を繰り返す（ステップＳ５５）。
【００７２】
例えば、配備実行部１６０は、図１１のようなトポロジカルソートの結果に従って、配備コンポーネント「C_AWS」に対して生成されたタスクを実行し、配備ツール「AWS」の前処理として、配備環境２００であるＡＷＳのサービスにログインする。次に、配備実行部１６０は、具象コンポーネント「C_AWS_Linux」に対するタスクを実行し、配備ツール「AWS」を用いた配備処理として、ＯＳ「Linux」の仮想マシンを配備する。ＯＳ「Linux」には、パラメータhostname「HOST1」、hostIp「192.168.0.1」が設定される。次に、配備実行部１６０は、配備コンポーネント「C_Ansible」に対するタスクを実行し、配備ツール「Ansible」の前処理として、ＯＳ「Linux」上に配備ツール「Ansible」を起動する。最後に、配備実行部１６０は、具象コンポーネント「C_Ansible_Apache」に対するタスクを実行し、配備ツール「Ansible」を用いた配備処理として、ミドルウェア「Apache」を配備する。ミドルウェア「Apache」には、パラメータhostIp「192.168.0.1」、rootDir「/var/lib/www」、port「80」が設定される。
【００７３】
以上により、本発明の第１の実施の形態の動作が完了する。
【００７４】
次に、本発明の第１の実施の形態の特徴的な構成を説明する。図１は、本発明の第１の実施の形態の特徴的な構成を示すブロック図である。
【００７５】
図１を参照すると、配備装置１００は、コンポーネント情報記憶部１１０、コンポーネント特定部１２０（特定部）、順序決定部１３０、及び、配備実行部１６０を含む。
【００７６】
コンポーネント情報記憶部１１０は、コンポーネント情報１１１を記憶する。コンポーネント情報１１１は、システムを構成する複数の構成要素の各々に対する、配備ツールに依存しない設定情報を含む。コンポーネント情報１１１は、さらに、システムを構成する複数の構成要素の各々について、当該構成要素と当該構成要素の配備に利用可能な複数の配備ツールの各々との組に対する、当該構成要素を当該配備ツールにより配備する配備処理を含む。
【００７７】
コンポーネント特定部１２０は、複数の構成要素の各々について、コンポーネント情報１１１をもとに、複数の配備ツールの内の指定された配備ツールに対応する配備処理を特定する。
【００７８】
順序決定部１３０は、複数の構成要素間の依存関係をもとに、複数の構成要素の各々について特定した配備処理の実行順序を決定する。
【００７９】
配備実行部１６０は、決定された実行順序に従って、複数の構成要素の各々について特定した配備処理を、当該構成要素の設定情報を適用して実行することにより、複数の構成要素を配備する。
【００８０】
次に、本発明の第１の実施の形態の効果を説明する。
【００８１】
本発明の第１の実施の形態によれば、システムを、構成定義ファイルに従って、配備ツールを用いて配備する場合に、ある環境に対して生成されたシステムの構成定義ファイルを、容易に他の環境に対するシステム配備に適用できる。その理由は、配備装置１００が、指定された配備ツールに対応する配備処理を特定し、構成要素間の依存関係をもとに、特定した配備処理の実行順序を決定し、決定された実行順序に従って、特定した配備処理を構成要素の設定情報を適用して実行するためである。
【００８２】
これにより、構成定義ファイルとして、システムの構成要素間の依存関係と構成要素の設定情報を定義し、環境に応じた配備ツールを指定するだけで、異なる環境に対して、同じシステムを容易に配備できる。
【００８３】
また、上述のように、システムを、非特許文献１に記載されているような、配備ツールに依存した構成定義ファイルに従って配備する場合、配備ツールに係る記述には、配備ツール間の起動順序（依存関係）やデータ連携等の記述が含まれる。このため、システムの配備先の環境や構成要素が変わらなくても、配備ツールの組み合わせが変更された場合に、変更された配備ツールや、当該配備ツールと依存関係がある配備ツールの記述を修正する必要があった。
【００８４】
例えば、上述の配備ツールの組み合わせＣｌｏｕｄＦｏｒｍａｔｉｏｎとＣｈｅｆを、ＣｌｏｕｄＦｏｒｍａｔｉｏｎとＰｕｐｐｅｔへ変更したと仮定する。この場合、ＣｌｏｕｄＦｏｒｍａｔｉｏｎは変更されたＣｈｅｆを起動していたため、システム構成に変更が無いにもかかわらず、ＣｌｏｕｄＦｏｒｍａｔｉｏｎに係る記述の修正が必要である。
【００８５】
本発明の第１の実施の形態によれば、このように配備ツールの組み合わせが変更された場合でも、構成定義ファイルの記述の変更を抑えることができる。その理由は、順序決定部１３０が、構成要素間の依存関係をもとに、各構成要素について特定した配備処理の実行順序を決定し、配備実行部１６０が、決定された実行順序に従って、配備処理を実行するためである。これにより、配備ツールに係る記述に、配備ツール間の起動順序（依存関係）を記述する必要がなく、配備ツールの組み合わせが変更された場合でも、当該記述を修正する必要がない。
【００８６】
（第２の実施の形態）
次に、本発明の第２の実施の形態について説明する。本発明の第２の実施の形態では、システム定義の入力後、即座にシステムの配備を行わず、配備に必要な情報を利用者へ提供し、対話的に配備を実行する点において、第１の実施の形態と異なる。
【００８７】
図１２は、本発明の第２の実施の形態における、配備システムの構成を示すブロック図である。
【００８８】
図１２を参照すると、本発明の第２の実施の形態の配備システムでは、配備装置１００の配備実行部１６０が配備実行部１６５に置き換わり、出力装置４００が追加されている。
【００８９】
配備実行部１６５は、配備処理を実行する前に、配備実行計画を、出力装置４００を介して、ユーザへ出力（表示）する。
【００９０】
図１３は、本発明の第２の実施の形態における、タスク実行処理（ステップＳ５）の詳細を示すフローチャートである。
【００９１】
配備実行部１６５は、順序決定部１３０より取得したトポロジカルソートの結果の最後尾から順番に、コンポーネント（ノード）を１つ抽出する（ステップＳ６１）。配備実行部１６５は、タスク生成部１５０より取得したタスクリストから、抽出したコンポーネントに対応するタスクを抽出し、配備実行計画に、順番に登録する（ステップＳ６２）。配備実行部１６５は、トポロジカルソートの結果に含まれる全てのコンポーネント（ノード）についての処理が行われるまで、ステップＳ６１、Ｓ６２を繰り返す（ステップＳ６３）。配備実行部１６５は、配備実行計画を、出力装置４００を介して、ユーザへ出力（表示）する（ステップＳ６４）。
【００９２】
図１４は、本発明の第２の実施の形態における、配備実行計画の出力画面の例を示す図である。図１４の例では、配備実行計画として、配備コンポーネント、及び、具象コンポーネントに対応する抽象コンポーネントが、対応するタスクの実行順に表示されている。例えば、配備実行部１６５は、図１４の出力画面を表示する。なお、配備実行部１６５は、抽象コンポーネントの代わりに具象コンポーネントを表示してもよい。また、配備実行部１６５は、配備実行計画として、さらに、各コンポーネントのパラメータの値や、配備処理、前処理の内容を表示してもよい。
【００９３】
ユーザは、出力された配備実行計画に問題ないと判断した場合、配備実行を指示する。
【００９４】
配備実行部１６５は、入力装置３００を介して、ユーザから配備実行の指示を受け付ける（ステップＳ６５）。配備実行部１６５は、配備実行計画の先頭から、タスクを１つ抽出する（ステップＳ６６）。配備実行部１６５は、抽出したタスクを実行し、配備ツールからの配備結果をチェックする（ステップＳ６７）。配備結果が失敗の場合（ステップＳ６８／Ｎ）、配備実行部１６５は、エラーログを出力し（ステップＳ７０）、タスク実行処理を終了する。配備結果が成功の場合（ステップＳ６８／Ｙ）、配備実行部１６５は、配備実行計画に含まれる全てのタスクが実行されるまで、ステップＳ６６〜Ｓ６８を繰り返す（ステップＳ６９）。
【００９５】
以上により、本発明の第２の実施の形態における動作が完了する。
【００９６】
次に、本発明の第２の実施の形態の効果を説明する。
【００９７】
本発明の第２の実施の形態によれば、システムを配備する前に、システム定義の入力ミスや要件漏れなどの不備を発見、修正できる。その理由は、配備実行部１６５が、各構成要素の配備処理の実行順序を示す配備実行計画を出力し、当該配備実行計画の出力に対して配備実行の指示が入力された場合に、決定した実行順序に従って、配備処理を実行するためである。
【００９８】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【００９９】
この出願は、２０１５年７月２７日に出願された日本出願特願２０１５−１４７４０８を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０１００】
本発明は、情報システムの構成定義ファイルを編集する編集ツールに広く適用できる。また、本発明は、アプリケーションやサーバ等、情報システムの構成要素を組み合わせて、実行環境に配備するシステム配備ツールにも広く適用できる。
【符号の説明】
【０１０１】
１００    配備装置
１０１    ＣＰＵ
１０２    記憶デバイス
１０３    通信デバイス
１０４    入出力デバイス
１１０    コンポーネント情報記憶部
１１１    コンポーネント情報
１２０    コンポーネント特定部
１３０    順序決定部
１４０    パラメータ収集部
１５０    タスク生成部
１６０    配備実行部
１６５    配備実行部
２００    配備環境
３００    入力装置
【図１】
2017017937.tif 000003
【図２】
2017017937.tif 000004
【図３】
2017017937.tif 000005
【図４】
2017017937.tif 000006
【図５】
2017017937.tif 000007
【図６】
2017017937.tif 000008
【図７】
2017017937.tif 000009
【図８】
2017017937.tif 000010
【図９】
2017017937.tif 000011
【図１０】
2017017937.tif 000012
【図１１】
2017017937.tif 000013
【図１２】
2017017937.tif 000014
【図１３】
2017017937.tif 000015
【図１４】
2017017937.tif 000016
【国際調査報告】
2017017937.tif 000017
2017017937.tif 000018
2017017937.tif 000019
2017017937.tif 000020