(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023167974
(43)【公開日】2023-11-24
(54)【発明の名称】システム構築装置
(51)【国際特許分類】
G06F 8/30 20180101AFI20231116BHJP
G06F 8/60 20180101ALI20231116BHJP
【FI】
G06F8/30
G06F8/60
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2022079548
(22)【出願日】2022-05-13
(71)【出願人】
【識別番号】509186579
【氏名又は名称】日立Astemo株式会社
(74)【代理人】
【識別番号】110002572
【氏名又は名称】弁理士法人平木国際特許事務所
(72)【発明者】
【氏名】伊藤 大生
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AA07
5B376AA10
5B376AA17
5B376BC24
5B376BC31
5B376BC38
5B376BC43
5B376EA17
(57)【要約】 (修正有)
【課題】ユーザが構築情報を変更せずシステムの構成を変更した場合にユーザの書き方に合わせた形で構築情報とシステムの構成の差異を修正する。
【解決手段】所定の実行環境上にインフラストラクチャーリソース及びインフラストラクチャーリソースの設定値を含むシステムを構築するシステム構築装置であって、所望の要件を入力する入力部(ポータル画面表示部)、所望の要件を満たすシステムを定義する第一ソースコードを作成するシステムソースコード作成部、実行環境上に、システムをデプロイするデプロイ部、実行環境上に構築されたシステムが変更された場合に、変更されたシステムを定義する第二ソースコードと第一ソースコードとの差分を検出する設定変更検出部及び検出した差分を第一ソースコードに反映させる設定変更反映部とを備える。設定変更反映部は、第一ソースコードに適用されたコーディングルールに基づいて差分を第一ソースコードに反映させる。
【選択図】
図2
【特許請求の範囲】
【請求項1】
所定の実行環境上にインフラストラクチャーリソース及び該インフラストラクチャーリソースの設定値を含むシステムを構築するシステム構築装置であって、
所望の要件を満たすシステム構築の要求を入力する入力部と、
前記所望の要件を満たすシステムを定義する第一ソースコードを作成するシステムソースコード作成部と、
前記実行環境上に、前記システムを前記要求に基づいてデプロイして構築するデプロイ部と、
前記実行環境上に構築された前記システムが変更された場合に、変更された該システムを定義する第二ソースコードと前記第一ソースコードとの差分を検出する設定変更検出部と、
前記設定変更検出部により検出された前記差分を前記第一ソースコードに反映させる設定変更反映部と、を備え、
前記設定変更反映部は、前記第一ソースコードに適用されたコーディングルールに基づいて前記差分を前記第一ソースコードに反映させる、
ことを特徴とするシステム構築装置。
【請求項2】
請求項1に記載のシステム構築装置であって、
前記差分に前記設定値の変更が含まれる場合に、前記設定変更反映部は、前記第二ソースコードの設定値を前記コーディングルールに基づいて修正し、前記第一ソースコードを修正する
ことを特徴とするシステム構築装置。
【請求項3】
請求項1に記載のシステム構築装置であって、
前記差分に前記インフラストラクチャーリソースの追加が含まれる場合に、前記設定変更反映部は、追加された前記インフラストラクチャーリソースのソースコードを取得し、該ソースコードを前記コーディングルールに基づいて修正し、前記第一ソースコードを修正する
ことを特徴とするシステム構築装置。
【請求項4】
請求項3に記載のシステム構築装置であって、
前記設定変更検出部は、前記システムを特定するメタデータに基づいて、
追加された前記インフラストラクチャーリソースが新規のインフラストラクチャーリソースであるか否か判定する
ことを特徴とするシステム構築装置。
【請求項5】
請求項1に記載のシステム構築装置であって、
前記入力部はポータル画面表示部を含み、前記要件は機能要件と非機能要件とを含み、
前記ポータル画面表示部は、入力された前記機能要件または前記非機能要件を満たすシステムの候補を利用者に提示する
ことを特徴とするシステム構築装置。
【請求項6】
請求項5に記載のシステム構築装置であって、
前記デプロイ部は、前記提示されたシステムの候補に対する前記利用者の選択に基づいて、前記利用者が選択したシステムを構築するための構築情報を作成し、前記システムを前記実行環境上に構築する
ことを特徴とするシステム構築装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、所定の実行環境上にシステムを構築するシステム構築装置に関する。
【背景技術】
【0002】
近年、クラウドコンピューティング技術の発展に伴い、IT(Information Technology)リソースの仮想化が進んでいる。こうした技術の発達により、仮想サーバやコンテナなどの仮想化技術とソースコードや設定ファイルなどに基づいてシステムをデプロイするIaC(Infrastructure as Code)とを活用したシステムの自動構築技術が注目されている。
【0003】
特許文献1の技術によれば、システム要件が記載されたオーダーシートに基づいて、オーダーシートをソースコードに変換しリソースのデプロイを自動化する技術が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開第2021-157612号公報
【特許文献2】特開第2021-140372号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1に記載の技術を用いることで、ユーザがコーディング知識を持ち合わせていない場合においても、システム要件に合わせてシステムを自動構築することが可能となる。一方で、ユーザがソースコードを変更せずに、デプロイされたシステムの構成を変更した場合に、対象システムのソースコードと、対象システムの構成が異なるという課題がある。
【0006】
この課題に関して、特許文献2は、システムの設定変更の有無を検出し、検出された設定変更をソースコードに反映する技術を記載している。
【0007】
特許文献2においては、構築対象システムが備える機器を監視対象としており、システムに新規機器を追加するような変更に対してソースコードに反映することができないという課題がある。また、ソースコードの書き方であるコーディングルールはユーザによって異なることが多いため、ソースコードへの反映方法によっては、修正されたソースコードのコーディングルールが一貫性に欠けてしまうおそれがある。したがって、ソースコードの管理やユーザの理解を容易にする目的で、反映したのちにソースコードが一貫性を有するように修正する必要がある。
【0008】
本発明は、以上のような課題に鑑みてなされたものであり、ユーザがソースコードを変更せず、システムの構成を変更した場合に、システムへの新規リソース追加も含めて、ユーザの書き方に合わせた形で、ソースコードとシステムの構成の差異を修正することを目的とする。
【課題を解決するための手段】
【0009】
本発明に係るシステム構築装置は、所定の実行環境上にインフラストラクチャーリソース及び該インフラストラクチャーリソースの設定値を含むシステムを構築するシステム構築装置であって、所望の要件を満たすシステム構築の要求を入力する入力部と、所望の要件を満たすシステムを定義する第一ソースコードを作成するシステムソースコード作成部と、実行環境上に、システムを要求に基づいてデプロイして構築するデプロイ部と、実行環境上に構築されたシステムが変更された場合に、変更された該システムを定義する第二ソースコードと第一ソースコードとの差分を検出する設定変更検出部と、設定変更検出部により検出された差分を第一ソースコードに反映させる設定変更反映部と、を備え、設定変更反映部は、第一ソースコードに適用されたコーディングルールに基づいて差分を第一ソースコードに反映させる。
【発明の効果】
【0010】
本発明に係るシステム構築装置によれば、ユーザがシステムの構築情報を変更せずにシステムの構成を変更した場合に、コーディングルールを統一した形で、当初のシステムの構築情報と変更されたシステムの構成との差異を修正することができる。
【図面の簡単な説明】
【0011】
【
図1】実施例1に係るシステム構築装置100のハードウェア構成図。
【
図2】実施例1に係るシステム構築装置100の機能ブロック構成図。
【
図3】実施例1に係るシステム構築装置100が実行する処理のフローチャート。
【
図4】
図3のフローチャート中のステップS101の具体例を説明する図。
【
図5A】
図3のフローチャート中のステップS102の具体例を説明する図。
【
図5B】
図3のフローチャート中のステップS103の具体例を説明する図。
【
図5C】
図3のフローチャート中のステップS103の具体例を説明する図。
【
図6】
図3のステップS104とステップS105のデプロイ処理に係るシステムソースコードの一例を示す図。
【
図7】
図3のフローチャート中のステップS106とS107の具体例を説明するフローチャート。
【
図8】
図7のフローチャート中のステップS202において参照される、既存の設定値282の判断方法について具体例を説明する図。
【
図9】
図7のフローチャート中のステップS209の具体例を説明するフローチャート。
【
図10】実施例2に係るシステム構築装置100が実行する処理のフローチャート。
【発明を実施するための形態】
【0012】
<実施例1>
図1は、本実施例に係るシステム構築装置100のハードウェア構成の一例を示している。システム構築装置100は、
図1に示すように、演算装置110と、記憶装置120と、入出力I/F(Interface)130と、通信I/F(Interface)140等のハードウェアを備える。
【0013】
演算装置110は例えばCPU(Central Processing Unit)であり、CPUによる処理によって後述する種々の機能を発揮する。
【0014】
記憶装置120は、例えばRAM(Random Access Memory)及びROM(Read Only Memory)を含み、演算装置110が用いるデータを格納する。
【0015】
入出力I/F130は、例えばタッチパネル機能を有するディスプレイであり、演算装置110による処理結果や後述するポータル画面210のユーザインターフェースを画面上に表示する。
【0016】
通信I/F140は、例えば通信チップ又はNIC(Network Interface Card)であり、後述する実行環境280や利用者201との間の通信に用いる。
【0017】
システム構築装置100の各部がデータを受け付ける場合、入出力I/F130を介してデータを受け付けても良く、また、通信I/F140を介してデータを受け付けても良い。
【0018】
図2は、システム構築装置100が有する各機能部の構成の一例を示す機能ブロック図である。システム構築装置100は、ポータル画面210と、リポジトリ220と、システムソースコード作成部230と、デプロイ部240と、設定変更検出部250と、設定変更反映部260と、コーディングルール保存部270と、を含んで構成される。
【0019】
本実施例では、あらかじめデプロイ用のテンプレート221やモジュール222のソースコードが指定されたリポジトリ220に登録されている。リポジトリ220の例としては、クラウドサービスでは、GitHub(https://github.com/)、OSSでは、GitLabといったものである。ソースコードの例については、
図6を用いて後述する。
【0020】
なお、
図2では、複数のテンプレート221とモジュール222を、1つのリポジトリ220で管理する例を示しているが、複数のプロジェクトのそれぞれに対応するソースコードごとにリポジトリ220が分かれている構成であってもよい。
【0021】
ここで、ソースコードとは、特定のシステム281を構築するために活用されるものである。例えば、1つのシステム281が1つのテンプレート221に対応する構成だけでなく、システム281の一部を構成するひとまとまりの機能であるモジュール222もソースコードに含まれる。その際は、複数のモジュール222を組み合わせて1つのシステム281のシステムソースコードを作成する。なお、本装置100で管理したり表示したりするための各種の情報には、システム281を構築するためのソースコードであるテンプレート221やモジュール222、システムソースコードの実体または参照等が含まれる。
【0022】
システム構築装置100は、システム構築装置100の利用者201に対してポータル画面210を不図示の表示装置上に表示する。ポータル画面210の例については、
図4と
図5を用いて後述する。また。ポータル画面210には不図示のCPUが搭載されており、リポジトリ220内のテンプレート221及びモジュール222から、後述するように利用者の選択に従ってシステムの候補を提示する。
【0023】
利用者201は、ポータル画面210を用いて今回、構築したいシステム281を選択する。例えば、利用者201がクラウドサービスの機能要件及び非機能要件を入力し、事前に用意されたテンプレート221を提示する。テンプレート221は、過去の実績に基づき各要件を満たすパブリッククラウドサービス、プライベートクラウドサービスなどが組み合わされたサービスである。
【0024】
非機能要件は、ネットワークに関する要件を含んでよい。ネットワークに関する要件として、パブリックIPの利用の有無、ファイアウォール利用の有無、暗号化機能の利用の有無、等が例として挙げられるが、これらに限らず、ネットワークに関する様々な要件を含んでよい。
【0025】
機能要件は、利用する実行環境280が、複数種類のクラウドのうちのいずれかであるかを示す情報を含んでもよい。機能要件は、上述した要件の他、システム281の目的、インフラに関連する様々な要件を含んでよい。
【0026】
その後、提示されたテンプレート221の各インフラストラクチャーリソース283を同様の機能を実現可能な別インフラストラクチャーリソース283に変更したり、インフラストラクチャーリソース283の追加や削除を行い、カスタマイズする。そして、カスタマイズ後に、各インフラストラクチャーリソース283がデプロイするために必要とする設定値282をパラメタシートなどから入力することで、構築したいシステム281が選択される。
【0027】
利用者201が構築したいシステム281を選択すると、システムソースコード作成部230が、リポジトリ220から選択されたシステム281のテンプレート221やモジュール222を用いてシステムソースコードを作成する。
【0028】
システムソースコードを作成後、デプロイ部240は実行環境280上にデプロイ処理を実施する。実行環境280は、システム281を動作させるための環境である。実行環境280は、例えば、パブリッククラウドサービス、プライベートクラウドサービス、OpenStack、Kubernetes等のオーケストレーションツールで管理されるITリソースのクラスタ等である。また、利用者201が選択したシステム281を動作させる実行環境280については、利用者201が指定する形式であってもよい。このとき実行環境280は、利用者201毎に異なる実行環境であってもよいし、1つの実行環境を共用する形であってもよい。
【0029】
デプロイ部240によるデプロイ処理が行われた結果、実行環境280には、システムソースコードに基づいてインフラストラクチャーリソース283、インフラストラクチャーリソース283の設定値282等を含む、システム281が構築される。ここで、インフラストラクチャーリソース283は、システムソースコードの記述に応じて、1または複数であってよい。
【0030】
そして、利用者201は、実行環境280上で、構築されたシステム281に必要な変更を加え、利用者201の用途にあった開発(システム281に対する変更)を行う。
【0031】
設定変更検出部250は、構築対象のシステム281の設定変更の有無を検出する。設定変更検出部250は、システム281の設定変更が有る場合に、システムソースコード作成部230が作成したシステムソースコードによって定義されるシステム281の構成と実行環境上における現在のシステム281との差分として設定変更内容を検出・抽出する。
【0032】
設定変更反映部260は、コーディングルール保存部270に保存されたコーディングルールに基づいて、設定変更検出部250が検出した差分をシステムソースコード作成部230が作成したシステムソースコードに反映させる。ここで、コーディングルールは例えば、変数名の定義として各ベンダーが提示する標準的な変数名から派生したものであることや、IDなどの変数がハードコーディングされていないことなどが挙げられる。
【0033】
なお、以降の図および説明では、実行環境280としては、パブリッククラウドサービスのIaaS(Infrastructure as a Service)パブリッククラウド、デプロイ処理としては、Terrafrom、テンプレート221やモジュール222としては、Terraformが規定するHCL(HashiCorp Configuration Language)で記述されたソースコードを例に挙げて説明する。しかしながら、本実施例は、上述の構成に限られるものではない。例えば、実行環境280としては、Kubernetes、実行環境280に構築する対象としては、コンテナ、デプロイ処理としては、Helmといった組合せを採用してもよい。
【0034】
図3は、本発明の実施例1に係るシステム構築装置100が実行する処理の一例を示すフローチャートである。以下
図3の各ステップについて説明する。また、以下では
図3に示す各ステップの概要を説明し、その詳細については後述する。
【0035】
利用者101は、ポータル画面210から所望の要件(機能要件及び非機能要件)を入力する(ステップS101)。
【0036】
ポータル画面210上には、入力された機能要件および非機能要件を実現するシステム281の候補が提示される(ステップ102)。
【0037】
利用者201は、ポータル画面210に提示されたシステム281をデプロイするために必要な情報を入力する(ステップS103)。必要な情報は、例えば、システム281に含まれる各インフラストラクチャーリソース283の設定値282である。設定値282としては例えば、各インフラストラクチャーリソース283の名前やインフラストラクチャーリソース283の採用・運用により発生する料金の請求先などが含まれる。また各インフラストラクチャーリソース283の提供者により規定されている設定値282であってもよい。さらに、利用者201は各インフラストラクチャーリソース283を別のインフラストラクチャーリソース283へ変更してもよい。
【0038】
システムソースコード作成部230は、ポータル画面210に提示されたシステム281に含まれるインフラストラクチャーリソース283の情報とそのシステム281をデプロイするために必要な情報を入力として、システムソースコードを生成する(ステップS104)。
【0039】
デプロイ部240は、システムソースコード作成部230が生成したシステムソースコードを用いて、システム281を実行環境280上に構築する。
【0040】
設定変更検出部250は、利用者201がシステム281を直接変更したか否かを監視・検出する。そして、設定変更が検出された場合、設定変更検出部250は、変更内容を検出・抽出する(ステップS106)。設定変更検出部250は、どのような手法により変更された内容を検出しても良い。設定変更検出部250は、差分のみを抽出しても良い。
【0041】
設定変更反映部260は、コーディングルール保存部270に保存された、システムソースコード作成部230が採用したコーディングルールを参照し、設定変更検出部250が抽出した差分をシステムソースコードに反映させる。以上の工程により処理は終了する。
【0042】
図4は、
図3のステップS101においてポータル画面210上に表示される画面の具体例を説明する図である。
図4に示すように、ポータル画面210上には要件入力画面300が表示される。利用者201はポータル画面210上で、システム281で実現したい目的や、システム281に求める可用性とシステムの性能、システムを運用するネットワーク条件を要件入力画面300上で選択する。
【0043】
図4においては、システム281によって実現したい目的として、サービス類型301という項目で開発型や分析型、連携型の選択肢を表示する例を示した。利用者201がシステム281で実現したい目的を変更すると、ポータル画面210上で表示されるシステム281のインフラストラクチャーリソース283の種類がその目的にしたがって変化する。具体例としては、分析型が選択された場合に、システム281がデータを収集し分析を行うように設計される。このような自動化により利用者201は、通常システム281の設計でかかる工数を低減することができる。選択肢は一例であり、その他の選択肢であってもよい。
【0044】
図4においては、可用性として、可用性302という項目で本番向けやPoC(Proof of Concept)向けの選択肢を表示する例を示した。なお、PoCとは、新しい概念や理論、原理、アイディアの実証を目的とした、試作開発の前段階における検証やデモンストレーションのことをいう。利用者201が可用性を変更すると、ポータル画面210上で表示されるシステム281のインフラストラクチャーリソース283の構成や設定値282が選択された可用性にしたがって変化する。具体例としては、本番向けが選択された場合に、システム281が複数のリージョン(例えば東京と大阪)に分散してデプロイされ、あるリージョンで災害が起きた際にもシステム281が動作し続けるように設計される。すなわち冗長性が担保される。選択肢は1例であり、その他の選択肢であってもよい。
【0045】
図4においては、性能として、性能303の項目でレベル1やレベル2、レベル3の選択肢を表示する例を示した。利用者201が性能を変更すると、ポータル画面210上で表示されるシステム281のインフラストラクチャーリソース283の設定値282がその性能にしたがって変化する。具体例としては、レベル3が選択された場合に、システム281のインフラストラクチャーリソース283の型番が最も高価な型番に設定される。選択肢は一例であり、その他の選択肢であってもよい。
【0046】
図4においては、ネットワークの条件として、外部接続304という項目で外部接続ありや外部接続なしを表示する例を示した。利用者201がネットワークの条件を変更すると、ポータル画面210上で表示されるシステム281のネットワーク接続に関するインフラストラクチャーリソース283と設定値282がそのネットワークの条件にしたがって変化する。具体例としては、外部接続ありが選択された場合に、外部接続を前提として、ネットワーク接続インフラストラクチャーリソースとしてファイアウォールがデプロイされる。選択肢は一例であり、その他の選択肢であってもよい。
【0047】
図4に表示される要件は、一例であり、その他の要件であってもよい。さらには、
図4においては、システム281で実現したい目的の代わりに、過去のシステム281を選択肢として表示をしてもよい。その場合、過去のシステム281をデプロイした際の要件が入力される。
【0048】
図5Aは、
図3におけるステップS102において行われる処理の具体例を説明する図である。システム構築装置100は、ステップS101で入力された機能要件および非機能要件を実現するシステム281案をポータル画面210上に提示する。利用者201は、ポータル画面210に提示されたシステム281をデプロイするために必要な情報を入力する(
図5B参照)。さらには、利用者201は各インフラストラクチャーリソース283を別のインフラストラクチャーリソース283へ変更してもよい。
【0049】
図5Bは、
図3におけるステップS103においてポータル画面210に提示されたシステム281をデプロイするために必要な情報を入力する方法の一例である。
図5Aにおいて「パラメタ入力」を選択すると、
図5Bに示す画面301が表示される。そして、本実施例においては、
図5Aで選択されているインフラストラクチャーリソースをデプロイするために必要な各種パラメタが記載されたエクセルシートをパラメタシートとしてアップロードし、各インフラストラクチャーリソース283が必要とする設定値282を入力する例を示した。
【0050】
図5Cは、
図3におけるステップS103において各サービスを別のサービスへ変更する際の例である。
図5Aの画面300上で「カスタマイズ」を選択すると、
図5Cの画面320が表示される。本実施例においては、データを格納するリソースを変更する例を示した。ユーザが別のリソースを選択すると、ユーザが選択したリソースに変更される。
【0051】
図6は、
図3のステップS104とステップS105のデプロイ処理に係るシステムソースコードの一例を示す図である。本実施例においては、デプロイ処理としては、Terrafromを用いる場合について説明する。Terraformとは、HashiCorp社により開発されているオープンソースのインフラ自動構築ツールである。
【0052】
テンプレート221は、一般に、どのようなインフラストラクチャーリソース283をデプロイするのかを定義するmain.Tf(400)のようなソースコードと、各インフラストラクチャーリソース283に与える変数および当該変数のデフォルト値が定義されたvariables.Tf(410)のような形式である変数ファイルと、各インフラストラクチャーリソース283に与える変数の設定値282が定義されたauto.input.tfvars(420)のような形式である変数入力ファイルとを含む。
【0053】
例えば、記述401(「resource “aws_s3_bucket”“s3_bucket”」)は、リソースとして「aws_s3_bucket」をデプロイすることを意味している。また、記述401(「bucket = “${var.foo}”」)は、variables.Tf(410)に定義された記述411(「variable “foo”{}」)を読み込むことを意味している。
【0054】
そして、デプロイ処理時に、変数key「foo」の変数に値を指定しなければ、デフォルト値である「foo:1」が用いられる。なお、デプロイ処理時に、別の値、例えば、変数key「foo」の変数に、auto.input.tfvars(420)内で値「foo = “dev-var”」を指定すれば、記述411は、「foo:“dev-var”」のように生成される。
【0055】
さらに、テンプレートファイルには、プログラム的な要素、例えば、if文を含んでいてもよい。Terraformでは、使用可能なプログラム的な要素が定義されており、countという変数によって、リソースを何個構築するかを制御できる。auto.input.tfvars(420)内で値「S3_count = 1」を指定すれば、「resource “aws_s3_bucket” “s3_bucket”」は一つ生成される。これにより、
図5Bで入力された情報に基づいてカウントを制御することにより、リソースをカスタマイズすることができる。
【0056】
以上、ステップS104で生成されたシステムソースコードに基づいてデプロイ部240はデプロイツールを用いて実行環境280上にインフラストラクチャーリソース283をデプロイさせる。
【0057】
図7は、
図3におけるステップS106とステップS107における具体的な処理手順の一例を示すフローチャートである。以下
図7の各ステップについて説明する。
【0058】
設定変更検出部250は、利用者201がシステム281を実行環境280上で直接変更したことを検出する(ステップS201)。具体例としては、
図3のステップS105にてシステム281が構築された際に、クラウドベンダーが用意しているシステム281を各クラウドベンダーのソースコードとしてエクスポートする機能を用いて基準となるソースコードを取得した後に、逐次エクスポート機能により取得したソースコードと基準となるソースコードとの差分を取得してもよい。
【0059】
差分の取得方法としては、上述のように各システム281が構築されている環境からエクスポートして取得することが望ましい。各クラウドベンダーが同じシステム281であることを示すメタデータを標準で用意しており、それによってシステム281への新規機器の追加の検知も可能になるからである。また、
図2のステップS105にてシステム281を構築する際に、同じシステムであることを示すメタデータを付与することによっても可能である。
【0060】
続いて、設定変更検出部250は、設定変更が検出されたかどうかを確認する(ステップS202)。設定変更が検出された場合は、ステップS203に進み、設定変更が検出されなかった場合は、処理を終了する。
【0061】
設定変更があった場合(ステップS202で“Yes”)、設定変更検出部250は、設定変更の種類を確認する(ステップS203)。設定変更の種類には、インフラストラクチャーリソース283に関する設定変更とインフラストラクチャーリソース283の設定値282に関する設定変更の2種類が存在する。インフラストラクチャーリソース283に関する設定変更としては、新規にインフラストラクチャーリソース283を追加、削除する場合があり、インフラストラクチャーリソース283の設定値282に関する設定変更は、インフラストラクチャーリソース283の設定値282を変更した場合である。インフラストラクチャーリソース283に関する設定変更が検出された場合は、ステップS207に進み、インフラストラクチャーリソース283の設定値282に関する設定変更が検出された場合は、ステップS204に進む。なお、ここでいう設定値282とは、
図5Bに示したパラメタシートに記載されたパラメタである。
【0062】
設定変更が設定値282の変更であった場合、設定変更反映部260は、既存の設定値282に関する設定変更かどうかを確認する(ステップS204)。既存の設定値282とは、システムソースコードの中ですでに定義されている設定値282のことを示す。一例としては、VM(Virtual Machine)をインフラストラクチャーリソース283として設定していた場合を想定する。なお、VMとは物理ハードウェアシステム上に作成され (場所はオフプレミスまたはオンプレミス)、固有の CPU、メモリー、ネットワーク・インタフェース、ストレージを持ち、仮想コンピュータシステムとして機能する仮想環境のことである。
【0063】
そして、VMをシステムソースコードとして定義している部分で、VMのサイズをsmallと設定していたとする。その後、利用者201によって手動でVMのサイズがmediumに変更された場合、VMのサイズはシステムソースコードとしてすでに定義されている設定値282であるため、既存の設定値282であると判断される。また、システムソースコードとして定義されていない設定値、例えばVMのタグを追加した場合は、システムソースコードとして定義されていない設定値282であるため、既存の設定値282ではないと判断される。既存の設定値282に関する設定変更の場合は、ステップS205に進み、そうではない場合は、ステップS206に進む。
【0064】
図8は、ステップS202において参照される、既存の設定値282の判断方法について具体例を説明する図である。システム構築装置100は、システムソースコードとしてどのインフラストラクチャーリソース283がどの変数を定義しているかという情報を持つ。例えば、インフラストラクチャーリソース283がVMである場合、ある変数がシステムソースコードの「./tempA,」というパスの1-9行目に定義されており、また、システムソースコードの「./module」というパスの10-20行目で呼び出されていることがわかる。これを用いることで、差分として検出されたインフラストラクチャーリソース283名とその変数名を入力として、既存の設定値282として存在するかどうかを検索し、判断する。
【0065】
既存の設定値282の設定変更が検出された場合、設定変更反映部260は、システムソースコードとしてどのインフラストラクチャーリソース283がどの変数を定義しているかという情報を用いて、該当設定値282の現在値を差分の設定値に変更する。これにより、元々のコーディングルールに基づいて設定変更を修正することが可能である。
【0066】
既存のパラメタの設定変更が検出されない場合、設定変更反映部260は、システムソースコードとしてどのインフラストラクチャーリソース283がどの変数を定義しているかという情報を用いて、該当設定値282を新規設定値としてシステムソースコードに追加する(ステップS206)。その後、ステップS205に進み、現在の設定値282に設定する。これにより、元々のコーディングルールに基づいて設定変更を修正することが可能である。
【0067】
設定変更がインフラストラクチャーリソース283の変更であった場合、設定変更反映部260は、既存のインフラストラクチャーリソース283に関する設定変更かどうかを確認する(ステップS207)。既存のインフラストラクチャーリソース283とは、システムソースコードの中ですでに定義されているインフラストラクチャーリソース283のことを示す。一例としては、VMのインフラストラクチャーリソース283をシステムソースコードとして定義していた場合、利用者201が手動で別のVMを追加した場合、既存のインフラストラクチャーリソース283であると判断される。また、インフラストラクチャーリソース283として定義されていない新たなVMを追加した場合は、既存のインフラストラクチャーリソース283ではないと判断される。さらに、追加されたVMが現状のシステムソースコードに含まれていない場合であっても、VMのインフラストラクチャーリソース283のソースコードをリポジトリ220内にとして持っている場合には、既存のインフラストラクチャーリソース283であると判断される。既存のリソースに関する設定変更の場合は、ステップS208に進み、そうではない場合は、ステップS209に進む。
【0068】
既存のリソースの設定変更が検出された場合(ステップS207で“Yes”)、設定変更反映部260は、システムソースコードに既存のインフラストラクチャーリソース283の追加を行う(ステップS208)。具体例としては、差分として得られた追加されたインフラストラクチャーリソース283の名前を用いて、あらかじめリポジトリ220に登録された各インフラストラクチャーリソース283のソースコードプログラムを検索する。その後、特定されたインフラストラクチャーリソース283のソースコードプログラムをシステムソースコードに追加する。なお、ここでは既存リソースの追加について説明したが、設定変更がリソースの削除である場合もあり、その場合にはソースコードプログラム内の該当するリソースを定義する部分を削除すればよい。
【0069】
上述の通り、システムソースコードのソースコードプログラムには、使用するインフラストラクチャーリソース283を定義する部分と、インフラストラクチャーリソース283の設定値282を定義、設定する部分が存在する。すなわち、システムソースコードに変更があった場合には、システムソースコード内の、使用するインフラストラクチャーリソース283を定義する部分に、登録されたソースコードプログラムのインフラストラクチャーリソース283を定義する部分を追加する。また、システムソースコード内の、インフラストラクチャーリソース283で使用する変数を定義する部分に、登録されたソースコードプログラムの使用する変数を定義する部分を追加する。そして、システムソースコード内の、インフラストラクチャーリソース283で使用する設定値282を設定する部分に、登録されたソースコードプログラムの使用する設定値282を設定する部分を、それぞれ追加する。
【0070】
ここで、使用する設定値282を設定する部分に関しては、差分情報の変数名とソースコードプログラムでの変数名の対応付けを行う必要がある。対応付けの方法は従来いくつか提案されている。例えば、差分情報で出力される変数名とソースコードプログラムの変数名の対応付けを予め人手により行う方法、差分情報で出力される変数名とソースコードプログラムの変数名の類似度を計算し対応付けを行う方法などである。これにより、元々のコーディングルールに基づいて設定変更を修正することが可能である。
【0071】
既存のリソースの設定変更が検出されない場合、すなわち、新規のインフラストラクチャーリソース283の追加が検出された場合には、設定変更反映部260は、新規のインフラストラクチャーリソース283のソースコードプログラムの取得を行い、コードディングルールに基づいて修正を行い、追加を行う(ステップS209)。この処理について
図9を用いて詳述する。
図9は、ステップS209における具体的な処理手順の一例を示すフローチャートである。以下
図9の各ステップについて説明する。
【0072】
設定変更反映部260は、差分情報が含むインフラストラクチャーリソース283の名前から該当インフラストラクチャーリソース283のソースコードプログラムを検索する(ステップS301)。これは、具体例としては、Terraformでは検索のためのAPI(Application Programming Interface)が公開されており、特定のURLに検索用のパラメタを追加して、検索結果を取得することができる。一例としては、「https://registry.terraform.io/v1/modules/search?q=network」に対し、GETメソッドを行うことにより、「network」という名前のリソースを検索することができる。また、利用者201が所属する団体で管理する共有リポジトリを設定してもよい。さらに、該当インフラストラクチャーリソース283の公式ページに記載されている該当インフラストラクチャーリソースを説明するページからソースコードプログラムの例をウェブスクレイピングにより取得してもよい。
【0073】
設定変更反映部260は、取得されたインフラストラクチャーリソース283のソースコードプログラムの精査を行う(ステップS302)。具体例としては、ステップS301で取得されたリソースのソースコードプログラムの候補が複数ある場合に、候補の中には、該当のインフラストラクチャーリソースを含まないソースコードプログラムが存在する可能性がある。そのため、複数候補のソースコードプログラムの解析を行い、該当インフラストラクチャーリソースの文字を含んでいるかを確認する。そのあと、その文字を含んでいないソースコードプログラムを候補から削除する。また、ソースコードプログラムが持つメタデータを用いて候補を精査してもよい。具体例としては、ソースコードプログラムの人気度を示すスターの数が多いものを選択してもよい。これにより、複数の取得されたソースコードプログラムから一つのソースコードプログラムを選択する。
【0074】
そして、設定変更反映部260は、ステップS302で行った精査により候補が存在するかどうかを確認する(ステップS303)。候補数が1の場合は、ステップS304に進み、候補数が0の場合は、処理を終了する。
【0075】
候補数が1であった場合(ステップS303で“Yes”)、設定変更反映部260は、ステップS302で精査を行い一つ選択されたソースコードプログラムの修正を行う(ステップS304)。ここで、ソースコードプログラムの修正とは、利用者201が指定したコーディングルールに基づいて、取得したソースコードプログラムを書き換えることを指す。コーディングルールの具体例としては、ソースコードプログラムの変数名を利用者201が指定する命名規則に従って変換する方法がある。これは、構築ツールでリソースに対して設定項目名は定義されているが、その設定項目名に対しての変数名は開発者が命名を行うため、その命名規則が統一されているとは限らないためである。
【0076】
該当の変数名について、ソースコードプログラムのコード解析を行う。コード解析の手法は、従来いくつか提案されている。例えば、ソースコードプログラムをプログラミング言語の文法に基づいて字句解析を行い、トークン列に変換する。変換したトークン列から木構造に変換する。変換結果の木構造を基づいて、変数名を確認し、命名規則に則って変換を行う。具体例としては、設定項目名にリソース名を前に追加しアンダーバーでつなげることや、すべて大文字にすることなどである。
【0077】
また、コーディングルールの他の例としては、ディレクトリ構成をもとのソースコードプログラムに合わせるというものがある。例えば、ソースコードプログラムとして、各リソースを別のソースコードプログラムファイルとして切り出して、それぞれをモジュールとして呼び出しを行う方式が存在する。その場合、ディレクトリ構成をモジュールとして呼び出しを行う方式と、一つのソースコードプログラムでディレクトリ構成を実現する方式でディレクトリ構成は異なる。モジュールとして呼び出しを行う方式の場合は、取得したソースコードプログラムをモジュールディレクトリ上に配置を行い、取得したソースコードプログラムを呼び出す部分を元々のソースコードプログラムに追加する。
【0078】
以上、設定変更反映部260が自動でソースコードプログラムの追加を行う説明を行ったが、方法は必ずしも自動追加に限るものではなく、その他利用者201に通知を行い、利用者201に新規リソースのソースコードプログラムを作成するように促し、作成されたソースコードプログラムを取得する形でもよい。
【0079】
本実施例に係るシステム構築装置100は、システム281の設定変更を検出し、その設定変更をコーディングルールに基づいてシステムソースコードへ反映する。コーディングルールに基づいて設定変更を修正することにより、システム281の設定変更の反映について利用者201が想定したソースコードプログラムとして管理できる。したがってシステム構築装置100は、利用者201が手動で設定変更を行った場合の構築情報への反映を自動で行うために余分な工数をかけることなく、また、自動の設定変更に対して自らのコーディングルールに基づいて修正する必要がないので、設定変更の反映作業の工数を抑制することができる。
【0080】
また、本実施例に係るシステム構築装置100においては、利用者201がポータル画面210上でシステム281の機能要件と非機能要件を入力し、要件を満たすシステム281を提示し、利用者201がカスタマイズし、システム281の構築を自動で行う。これにより、利用者201はシステム281の設計やシステム281の自動構築技術の知識がない場合でも、要件にあったシステム281を作成することができる。
【0081】
<実施例2>
次に、本発明の実施例2に係るシステム構築装置について説明する。実施例1においては、利用者201がポータル画面210上でシステム281の機能要件と非機能要件を入力し、要件を満たすシステム281を提示し、利用者201がカスタマイズする例を説明した。実施例2では、ポータル画面210上での要件入力画面の表示を行わず、利用者201が記述したシステムソースコードに基づいてシステム構築を行う。これにより、利用者201がシステム281の自動構築技術に精通しているなど、利用者201が自らシステムソースコードを作成する場合においても、システムソースコードに基づいてシステム281を作成、管理することができる。
【0082】
図10は、本実施形態2においてシステム構築装置100がシステムを構築し管理する手順を説明するフローチャートである。以下
図10の各ステップについて説明する。
【0083】
システム構築装置100は、利用者201からシステムソースコードを受け付ける(ステップS401)。受け付け方法の具体例としては、ポータル画面210上に
図5Bと同様の画面を表示して、システムソースコードをアップロード可能にしてもよい。また、ポータル画面210にシステムソースコードを記述可能なテキストエディタを表示し、利用者201が直接システムソースコードを記述してもよい。
【0084】
デプロイ部240は、ステップS401で受け付けたシステムソースコードに基づいてデプロイ処理を行う(ステップS402)。この処理は
図3のステップS104と同様である。本実施例においては、デプロイ処理をユーザが行ってもよい。その場合、Terrafromを用いる例としては、ユーザの環境でTerrafromの構築コマンドを用いてシステムの構築を行う。
【0085】
ステップS403及びS404は、
図3のステップS106及びS107と同様である。本実施例において、デプロイ処理を利用者201が行った場合、設定変更を検出する対象のシステム281とシステムソースコードによる構築情報に関する情報をユーザが入力を行い、設定変更の検出と反映を行う。
【0086】
以上説明したように、本発明の実施例2では、利用者201が記述したシステムソースコードに基づいてシステム構築を行う。これにより、利用者201がシステムの自動構築技術に精通しているなど、利用者201が自らシステムソースコードを作成したい場合においても、システムソースコードに基づいてシステムを作成、管理することができる。
【0087】
以上で説明した本発明の実施例によれば、以下の作用効果を奏する。
(1)本発明に係るシステム構築装置は、所定の実行環境上にインフラストラクチャーリソース及び該インフラストラクチャーリソースの設定値を含むシステムを構築するシステム構築装置であって、所望の要件を満たすシステム構築の要求を入力する入力部と、所望の要件を満たすシステムを定義する第一ソースコードを作成するシステムソースコード作成部と、実行環境上に、システムを要求に基づいてデプロイして構築するデプロイ部と、実行環境上に構築されたシステムが変更された場合に、変更された該システムを定義する第二ソースコードと第一ソースコードとの差分を検出する設定変更検出部と、設定変更検出部により検出された差分を第一ソースコードに反映させる設定変更反映部と、を備え、設定変更反映部は、第一ソースコードに適用されたコーディングルールに基づいて差分を第一ソースコードに反映させる。
【0088】
上記構成により、ユーザがシステムの構築情報を変更せずにシステムの構成を変更した場合に、コーディングルールを統一した形で、当初のシステムの構築情報と変更されたシステムの構築情報との差異を修正することができる。
【0089】
(2)差分に設定値の変更が含まれる場合に、設定変更反映部は、第二ソースコードの設定値をコーディングルールに基づいて修正し、第一ソースコードを修正する。また、差分にインフラストラクチャーリソースの追加が含まれる場合に、設定変更反映部は、追加されたインフラストラクチャーリソースのソースコードを取得し、該ソースコードをコーディングルールに基づいて修正し、第一ソースコードを修正する。これにより、システムのソースコードに加えられる変更がどのような種類であっても、適切に修正を反映させることができる。
【0090】
(3)設定変更検出部は、システムを特定するメタデータに基づいて、追加されたインフラストラクチャーリソースが新規のインフラストラクチャーリソースであるか否か判定する。これにより、従来技術において想定されていなかった新規リソースの追加が行われていた場合にも、適切にソースコードを修正することが可能になる。
【0091】
(4)入力部はポータル画面表示部を含み、要件は機能要件と非機能要件とを含み、ポータル画面表示部は、入力された機能要件または非機能要件を満たすシステムの候補を利用者に提示する。これにより、利用者が機能要件と非機能要件とを切り分けて候補を選択することが可能になり、利用者にとって利便性が向上する。さらに、システムの候補が自動的に選択・提示されることにより、利用者に対して所望の要件を追加。修正するための気づきを与えることが可能になる。
【0092】
(5)デプロイ部は、提示されたシステムの候補に対する利用者の選択に基づいて、利用者が選択したシステムを構築するための構築情報を作成し、システムを実行環境上に構築する。これにより、システム構築装置のリポジトリ内に保存された情報を活用して、迅速なシステム構築を実現できる。
【0093】
本発明は、前述した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えることが可能であり、また、ある実施形態の構成に他の実施形態の構成を加えることも可能である。また、各実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【符号の説明】
【0094】
100:システム構築装置、210:ポータル画面(入力部・ポータル画面表示部)、220:リポジトリ、230:システムソースコード作成部、240:デプロイ部、250:設定変更検出部、260:設定変更反映部、270:コーディングルール保存部、280:実行環境、281:システム、282:設定値、283:インフラストラクチャーリソース