(57)【要約】クラウドサービスインフラストラクチャのためのドメイン固有プログラミング言語を提供し実行するシステム及び方法が提供される。システムは、クラウドサービス計算インスタンスなどの外部エンティティへの参照を、直接的にドメイン固有プログラミング言語へ統合するために使用され得、開発者はドメイン固有プログラミング言語を直接用いてクラウドサービスを容易に統合することができるようになる。ドメイン固有プログラミング言語を用いれば、変数のように（メモリ内にない）外部エンティティへの参照を用い得る。以下に示すドメイン固有プログラミング言語を用いる場合、レキシカルスコーピングは、言語のネイティブ部分ではないエンティティの集合にマップされ得る。これら及び他の恩恵を促進するために、システムは全ての参照の状態情報を保持し得、プログラムの境界を超えて変数を共有し得る。システムは、状態情報を、ドメイン固有プログラミング言語の言語特性を把握することができる状態情報サービスを介してアクセス可能にし得る。
2017534996.tif 000002
【特許請求の範囲】
【請求項１】
クラウドコンピューティングシステムにインフラストラクチャを構築する方法であって、前記方法は、
ドメイン固有プログラミング言語でユーザによって記述されたソースコードを受け付けることであって、前記ソースコードが、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャの１つ以上のインスタンスを定義する１つ以上の変数を含む、受け付けることと、
コンピューティングインフラストラクチャの前記１つ以上のインスタンスが状態情報サービスに存在するかを識別し、前記１つ以上の変数がコンピューティングインフラストラクチャの前記識別された１つ以上のインスタンスに見合うスコープ内であるかを識別するために、前記状態情報サービスに問い合わせることと、
コンピューティングインフラストラクチャの前記１つ以上のインスタンスが存在し且つコンピューティングインフラストラクチャの前記識別された１つ以上のインスタンスに見合うスコープ内であることが判明した場合に、前記受け付けたソースコードを、前記クラウドコンピューティング環境のコマンドラインインタフェースによって読み取り可能な１つ以上の命令に変換すること、を含む方法。
【請求項２】
請求項１に記載の方法において、ドメイン固有プログラミング言語で記述されたソースコードを受け付けることは、前記ソースコードを、クラウドインフラストラクチャオペレーティングシステムのコマンドラインインタフェースと互換性を有する中間表現に変換すること、を含む。
【請求項３】
請求項１に記載の方法において、前記方法は更に、前記１つ以上の変数の各変数が、前記状態情報サービスに存在し且つコンピューティングインフラストラクチャの前記識別された１つ以上のインスタンスに見合うスコープ内であることが判明した場合に、実装計画を生成すること、を含む。
【請求項４】
請求項３に記載の方法において、前記方法は更に、前記生成された実装計画を、承認のために前記ユーザに送信すること、を含む。
【請求項５】
請求項４に記載の方法において、前記方法は更に、前記ユーザが前記生成された実装計画を承認した場合、前記ドメイン固有プログラミング言語で前記ユーザによって記述された前記ソースコードを前記クラウドコンピューティング環境において実装すること、を含む。
【請求項６】
請求項５に記載の方法において、前記ソースコードを実装することは、前記ソースコードを、クラウドインフラストラクチャオペレーティングシステムのコマンドラインインタフェースと互換性を有する中間表現に変換すること、を含む。
【請求項７】
請求項６に記載の方法において、前記ソースコードを実装することは、コンピューティングインフラストラクチャの実装された１つ以上のインスタンスが前記ソースコードに対応するように、前記クラウドコンピューティング環境のコマンドラインインタフェースによって読み取り可能な前記１つ以上の命令を修正すること、を含む。
【請求項８】
請求項１に記載の方法において、前記ソースコードは、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャの前記１つ以上のインスタンスと関連付けられた前記１つ以上の変数を利用する、１つ以上の関数を含む。
【請求項９】
請求項１に記載の方法において、前記１つ以上の変数は、前記クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャのユーザ定義インスタンスを含む。
【請求項１０】
クラウドコンピューティングシステムにインフラストラクチャを構築する方法であって、前記方法は、
ドメイン固有プログラミング言語でユーザによって記述されたソースコードを受け付けることであって、前記ソースコードが、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャの１つ以上のインスタンスを定義する１つ以上の変数を含む、受け付けることと、
コンピューティングインフラストラクチャの前記１つ以上のインスタンスが状態情報サービスに存在するかを識別し、前記１つ以上の変数がコンピューティングインフラストラクチャの前記識別された１つ以上のインスタンスに見合うスコープ内であるかを識別するために、前記状態情報サービスに問い合わせることと、
前記１つ以上の変数のいずれかが前記状態情報サービスに存在せず、又は前記１つ以上の変数がコンピューティングインフラストラクチャの前記識別された１つ以上のインスタンスに見合うスコープ内でないことが判明した場合に、前記ユーザに通知することと、を含む。
【請求項１１】
請求項１０に記載の方法において、ドメイン固有プログラミング言語で記述されたソースコードを受け付けることは、前記ソースコードを、クラウドインフラストラクチャオペレーティングシステムのコマンドラインインタフェースと互換性を有する中間表現に変換すること、を含む。
【請求項１２】
１つ以上のプログラムを格納する非一時的コンピュータ可読媒体であって、前記１つ以上のプログラムは、クラウドコンピューティングシステムにインフラストラクチャを構築する命令を含み、携帯用電子デバイスで実行されると、前記携帯用電子デバイスに、
ドメイン固有プログラミング言語でユーザによって記述されたソースコードを受け付け、前記ソースコードは、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャの１つ以上のインスタンスを定義する１つ以上の変数を含み、
コンピューティングインフラストラクチャの前記１つ以上のインスタンスが状態情報サービスに存在するかを識別し、前記１つ以上の変数がコンピューティングインフラストラクチャの前記識別された１つ以上のインスタンスに見合うスコープ内であるかを識別するために、前記状態情報サービスに問い合わせ、
コンピューティングインフラストラクチャの前記１つ以上のインスタンスが存在し且つコンピューティングインフラストラクチャの前記識別された１つ以上のインスタンスに見合うスコープ内であることが判明した場合に、前記受け付けたソースコードを、前記クラウドコンピューティング環境のコマンドラインインタフェースによって読み取り可能な１つ以上の命令に変換する、ようにさせる命令を含む非一時的コンピュータ可読媒体。
【請求項１３】
請求項１２に記載の非一時的コンピュータ可読媒体において、ドメイン固有プログラミング言語で記述されたソースコードを受け付けることは、前記ソースコードを、クラウドインフラストラクチャオペレーティングシステムのコマンドラインインタフェースと互換性を有する中間表現に変換すること、を含む。
【請求項１４】
請求項１２に記載の非一時的コンピュータ可読媒体において、前記プロセッサは更に、前記１つ以上の変数の各変数が、前記状態情報サービスに存在し且つコンピューティングインフラストラクチャの前記識別された１つ以上のインスタンスに見合うスコープ内であることが判明した場合に、実装計画を生成するようになされる。
【請求項１５】
請求項１４に記載の非一時的コンピュータ可読媒体において、前記プロセッサは更に、前記生成された実装計画を、承認のために前記ユーザに送信するようになされる。
【請求項１６】
請求項１５に記載の非一時的コンピュータ可読媒体において、前記プロセッサは更に、前記ユーザが前記生成された実装計画を承認した場合、前記ドメイン固有プログラミング言語で前記ユーザによって記述された前記ソースコードを前記クラウドコンピューティング環境において実装するようになされる。
【請求項１７】
請求項１６に記載の非一時的コンピュータ可読媒体において、前記ソースコードを実装することは、前記ソースコードを、クラウドインフラストラクチャオペレーティングシステムのコマンドラインインタフェースと互換性を有する中間表現に変換すること、を含む。
【請求項１８】
請求項１７に記載の非一時的コンピュータ可読媒体において、前記ソースコードを実装することは、コンピューティングインフラストラクチャの実装された１つ以上のインスタンスが前記ソースコードに対応するように、前記クラウドコンピューティング環境のコマンドラインインタフェースによって読み取り可能な前記１つ以上の命令を修正すること、を含む。
【請求項１９】
請求項１２に記載の非一時的コンピュータ可読媒体において、前記ソースコードは、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャの前記１つ以上のインスタンスと関連付けられた前記１つ以上の変数を利用する、１つ以上の関数を含む。
【請求項２０】
請求項１２に記載の非一時的コンピュータ可読媒体において、前記１つ以上の変数は、前記クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャのユーザ定義インスタンスを含む。
【請求項２１】
１つ以上のプログラムを格納する非一時的コンピュータ可読媒体であって、前記１つ以上のプログラムは、クラウドコンピューティングシステムにインフラストラクチャを構築する命令を含み、携帯用電子デバイスで実行されると、前記携帯用電子デバイスに、
ドメイン固有プログラミング言語でユーザによって記述されたソースコードを受け付け、前記ソースコードは、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャの１つ以上のインスタンスを定義する１つ以上の変数を含み、
コンピューティングインフラストラクチャの前記１つ以上のインスタンスが状態情報サービスに存在するかを識別し、前記１つ以上の変数がコンピューティングインフラストラクチャの前記識別された１つ以上のインスタンスに見合うスコープ内であるかを識別するために、前記状態情報サービスに問い合わせ、
前記１つ以上の変数のいずれかが前記状態情報サービスに存在せず、又は前記１つ以上の変数がコンピューティングインフラストラクチャの前記識別された１つ以上のインスタンスに見合うスコープ内でないことが判明した場合に、前記ユーザに通知する、ようにさせる非一時的コンピュータ可読媒体。
【請求項２２】
請求項２１に記載の非一時的コンピュータ可読媒体において、ドメイン固有プログラミング言語で記述されたソースコードを受け付けることは、前記ソースコードを、クラウドインフラストラクチャオペレーティングシステムのコマンドラインインタフェースと互換性を有する中間表現に変換すること、を含む。
【発明の詳細な説明】
【関連出願へのクロスリファレンス】
【０００１】
[0001] 本出願は、２０１４年１１月１３日に提出された米国仮出願第６２／０７９，４０３号の優先権を主張し、これにより当該米国仮出願は参照によってその全体が本明細書に援用される。
【技術分野】
【０００２】
[0002] クラウドサービスインフラストラクチャのためのドメイン固有プログラミング言語を提供し実行するシステム及び方法
【背景技術】
【０００３】
[0003] 多くのクラウドサービスのプロバイダが、カスタマの代わりに計算インスタンスを実行するための様々なクラウドサービスを販売する。例えば、アマゾン社はそのアマゾンウェブサービス（AMAZON WEB SERVICES、AWS）なるサービスを販売し、グーグル社はそのグーグルアップエンジン（GOOGLE APP ENGINE）なるサービスを販売し、更に他社は同様のサービスを販売する。料金と引き換えに、アマゾン社、グーグル社及び他のクラウドサービスプロバイダは、これらのサービスと他のインフラストラクチャの使用を、クラウドサービスインスタンスの形式で限定的な時間分を顧客に提供する。料金は、クラウドサービスインスタンスが実行される時間／日付、クラウドサービスインスタンスのパフォーマンス（例えばスループット、レイテンシ等）、提供されるクラウドサービスインスタンスがスポットインスタンスであるか標準インスタンスであるか、及び／又は他の属性に応じて変わり得る。
【０００４】
[0004] 組織のプロセスにクラウドサービスの使用を統合することは困難であるかもしれない。従来的に、ユーザはクラウドサービスのコマンドラインインタフェース（ＣＬＩ）又はグラフィカルユーザインタフェース（ＧＵＩ）で入力を手動で入力することができる。クラウドインフラストラクチャを生成するプロセスをよりユーザフレンドリにすることは、クラウドインスタンスのインスタンス生成、モニタ、アップデートを試みる従来のプログラミング言語において、専門化されたプログラムを使用することによって達成することができる。
【発明の概要】
【０００５】
[0005] 従って、以下の開示は、クラウドコンピューティングサービスプロバイダによって読み取り可能なコードに変換できるユーザフレンドリな構文を用いて、ユーザがコンピューティング環境を生成することができる、クラウドサービスインフラストラクチャのためのドメイン固有言語に関する。ある例では、ユーザの生成したコードはコンピューティングインフラストラクチャの宣言を含む。当該宣言は、宣言されたインフラストラクチャがクラウドサービスプロバイダに存在するか、及び宣言されたインフラストラクチャがクラウドサービスプロバイダによって提供されるものに見合うスコープ内であるか、を判定することができる状態情報サービスに照らして確認されてよい。
【図面の簡単な説明】
【０００６】
【図１】[0006] 図１は、本発明の実施に従う、クラウドサービスインフラストラクチャのためのドメイン固有プログラミング言語を提供し実行するシステムを図示している。
【図２】[0007] 図２は、本発明の実施に従う、クラウドサービスインフラストラクチャのためのドメイン固有プログラミング言語を提供し実行する、様々なシステムコンポーネントの処理フロー図を図示している。
【図３】[0008] 図３は、本開示の例に従う、クラウドサービスインフラストラクチャのためのコンパイルされたドメイン固有プログラミング言語の例示的なランタイム環境を示す。
【図４】[0009] 図４は、本発明の実施に従う、クラウドサービスインフラストラクチャのためのドメイン固有プログラミング言語をコンパイルする処理を示す。
【図５】[0010] 図５は、本開示の例示に従う、例示的な説明処理を示す。
【図６】[0011] 図６は、本発明の実施に従う、クラウドサービスインフラストラクチャのためのドメイン固有プログラミング言語を実行する処理を示す。
【発明を実施するための形態】
【０００７】
[0012] 図１は、本発明の実施に従う、クラウドサービスインフラストラクチャのためのドメイン固有プログラミング言語（以下、便宜のため「ドメイン固有プログラミング言語」）を提供し実行するシステム１００を説明している。システムは、クラウドサービス計算インスタンスなどの外部エンティティへの参照を、直接的にドメイン固有プログラミング言語へ統合するために使用され得、開発者はドメイン固有プログラミング言語を直接用いてクラウドサービスを容易に統合することができるようになる。
【０００８】
[0013] 非限定的な説明として、外部エンティティは、以下に示すドメイン固有プログラミング言語内で直接参照され得るクラウド計算インスタンス（例えば、クラウドサービスプロバイダによって運用されるコンピュータにおいて実行されるコンピュータインスタンス）として示されるだろう。しかしながら、（例えば、以下に示すドメイン固有プログラミング言語を使用するコードを実行するコンピュータデバイスの所定のメモリの外にある）他の外部エンティティも同様に用いられてよい。一例として、外部エンティティは、ＤＮＳエントリ、バイナリオブジェクト、共有されるキュー、データベーステーブル等を含み得る。
【０００９】
[0014] システムは、オーサリング、ビルド及びランタイムの時点を含む、言語自体における外部エンティティの型及び状態に対する確認を容易にするために用いられ得る。更に、システムは、エラー及びバグを発見するためにテストを実施することを必要とするのとは対照的に、外部エンティティに対するプログラムをオーサリングする間のコンパイル、型のチェック、デバッグを容易にし得る。
【００１０】
[0015] インフラストラクチャ又は他の外部エンティティへの参照となる言語プリミティブ
【００１１】
[0016] プログラミング言語では典型的に、変数はランタイムにおけるメモリ内のアドレスに帰着され得る。例えば、my-thing = 123456と定義された場合、値123456はメモリ内のある位置に置かれる。この定義の後では、my-thingを用いる任意のコードは、そのメモリアドレスへの参照を取得するか、値のコピーを受け取るかする。
【００１２】
[0017] 以下で示されるドメイン固有プログラミング言語を用いれば、変数のように（メモリ内にない）外部エンティティへの参照を用い得る。例えば、mything = this-instanceと定義することにより、this-instanceは、メモリ内のアドレスとは対照的に、ＵＲＬ又は動作している仮想コンピュータの他の識別子に帰着される。これは、オーサリング、ビルド及びランタイムの時点を含む、言語自体における外部エンティティの型及び状態に対する確認を可能にする。参照は、他のプログラム、（例えばコンパイル時における）手動の設定、及び／又は他の処理によって設定され得る。クラウドサービスインフラストラクチャへの参照となる言語プリミティブを用いることによって、システムは、コンパイル及びデバッグ時における、参照の正当性の確認、及びランタイムにおいて有効な参照を有することを容易にする。コンピューティングインフラストラクチャは、物理的なオンサイトデバイスを使用する必要がなく、クラウドサービスによって提供されているコンピューティングシステム内のコンポーネントを参照することができる。例えば、コンピューティングインフラストラクチャは、仮想マシン、ロードバランサ、仮想ネットワーク、データストレージサービス、ドメイン名サービス、ディスクイメージャ、コンテナ、クラスタ及びラムダインストラクション（lambda instruction）のようなコンピューティングデバイスを参照することができる。これらの例は限定を意味するものではなく、例としてのみ提供されたものである。ドメイン固有プログラミング言語は、更に、エラー及びバグを発見するためにテストを実施することを必要とするのとは対照的に、外部エンティティに対する、プログラムをオーサリングする間のコンパイル、型チェック、デバッグを容易にし得る。
【００１３】
[0018] 外部エンティティのアブストラクションにマップするレキシカルスコーピング(lexical scoping)
【００１４】
[0019] 典型的なプログラミング言語では、レキシカルスコーピングは、名称を再利用できるようにコードの部分を組織化し、またプログラムの要素のセグメンテーション及びカプセル化を可能にする方法である。例えば、オブジェクト指向言語におけるプライベートフィールドは、定義されたクラスのインスタンスの外から直接的にそのデータにアクセスすることを防止する。
【００１５】
[0020] 以下に示すドメイン固有プログラミング言語を用いる場合、レキシカルスコーピングは、言語のネイティブ部分ではないエンティティの集合にマップされ得る。例えば、計算インスタンスは、上述した外部エンティティのメソッドへの参照：my-thing = this-instanceを用いて定義され得、ここでthis-instanceは、ランタイム環境における実エンティティへのポインタである。
【００１６】
[0021] 外部エンティティのレキシカルスコーピングを用いる場合、システムはthis-instanceをthisvenueの子要素にし得、ここで、this-venueはエンティティの任意の集合を含み得る。仮にthis-instanceが呼び出しコードのスコープに対してパブリックでなかった場合、コンパイラは直接的な参照の際にエラーを返す。これは、例えば変数のスコープがエンティティの特定の組に限定される場合に起こり得る。外部エンティティは、単一のクラウドサービスプロバイダ又は異なるサービスプロバイダと関連付けられ得、その識別子は所定の変数又は参照と関連付けられ得る。
【００１７】
[0022] サービスへの言語ランタイム状態情報の外面化
【００１８】
[0023] これら及び他の恩恵を促進するために、システムは全ての参照の状態情報と、共有される変数とをプログラムの境界を超えて保持し得る。システムは、状態情報を、ドメイン固有プログラミング言語の言語特性を把握することができる状態情報サービスを介してアクセス可能にし得る。
【００１９】
[0024] コンパイル時において、コンパイルされたコードは、ランタイム環境のインタプリタモジュール（詳細を後に説明する）によって処理されてよく、このランタイム環境インタプリタモジュールは、変数が存在するかを判定し、そして存在する場合に参照のスコープ内であるかどうかを判定するために、言語で用いるスコープにおいて変数を識別する状態情報サービスに問い合わせを行い得る。状態情報サービスはまた、利用可能な関数や演算など、エンティティがどのように使用され得るかについての詳細を明らかにし得る。
【００２０】
[0025] 状態情報サービスは、変数の状態における詳細なバージョン情報を保持し得る。例えば、ユーザＡがコンパイルとプログラムの実行によってエンティティを生成した場合、対応する変数は、１に設定されたシリアルナンバー（又は他のバージョン情報）と併せて状態情報サービス内に現れ得る。ある例では、対応する変数は、プログラム内のコンピューティングインフラストラクチャのインスタンスから得られる固有なハッシュであってよい。エンティティの通常の演算の間に、その状態は（例えば他のインターネットプロトコルのアドレスに）変化する。この変化を生じさせる第２のプログラムは、テーブルを新たなＩＰアドレスで更新し得、そしてシリアルナンバーの値を２に増加させ得る。第３のプログラムがエンティティを参照し、エンティティがその状態を表すバージョン１を有する場合、新たなシリアルナンバーは２であると理解して、最新のバージョンを状態情報サービスに問い合わせ得る。
【００２１】
[0026] 状態情報は、組織が利用可能にしたい全てのエンティティに渡って一般化され、スコープが決定され得る。このように、組織の多くの部分に跨る複数ユーザは、他のチームにおける彼らのピア（peers）の生成物を用いて相互利用し得る。
【００２２】
[0027] システム１００の他の使用は以下に説明され、更なるものは当業者にとって明らかである。いくつかのシステムの機能の高レベルの概要を説明したので、これから、これら及び他の機能を促進する様々なシステム構成要素に注意が向けられるであろう。
【００２３】
[0028] 上述したように、上記インフラストラクチャのプリミティブ及びそれらに適用されるレキシカルスコーピングは、関数を生成するために用いることができ、この関数は、関数に入力される所定の引数に基づいてインフラストラクチャのパターンを生み出すことができる。以下に提供されるコード例は、列挙型（enumeration type）の例である。
Type IcmpDescription:
| Ping
| DestinationUnreachable
| RedirectMessage
【００２４】
[0029] 以下に提供されるコード例は、「icmp」の属性を定義することができるデータ構造体型（data structure type）の例である。以下の例では、icmp型は、属性の値である「型（type）」及び「コード（code）」を有し、これらの属性は整数値として表される。
Type Icmp:
| type: INT
| code: INT
【００２５】
[0030] 以下のコード例はドメイン固有言語を用いる関数の例を示している。以下のコード例はインフラストラクチャの記述をとり、icmp（機器データ）を評価する。
Icmp fromDescription(IcmpDescription icmp):
Case icmp of
| ping      {code: 0, type: 0}
| DestinationUnreachable {code: 0, type: 3}
| Redirect Message   {code: 0, type: 5}
【００２６】
[0031] 上述の関数は、更なる詳細を以下で示す説明関数（explain function）によって、コンパイル時に評価されてよい。
【００２７】
[0032] 例示的なシステムアーキテクチャ
【００２８】
[0033] システム１００は、コンピュータシステム１１０、コンピュータシステム１４０、１つ以上のクラウドサービスプロバイダ１５０、及び他の構成要素の少なくともいずれかを含み得る。
【００２９】
[0034] コンピュータシステム１１０
[0035] コンピュータシステム１１０は、１つ以上のプロセッサ１１２（以下では、適宜、複数のプロセッサ１１２、１つ又は複数のプロセッサ１１２、又は１つのプロセッサ１１２としても置き換え可能に参照される）、１つ以上のストレージデバイス１１４（状態情報サービス１２０、適宜、以下ＳＩＳ１２０を格納し得る）、１つ以上のエンティティ状態情報データベース１３０、及び他の構成要素、の少なくともいずれかを含み得る。プロセッサ１１２は、１つ以上のコンピュータプログラム命令によってプログラムされ得る。例えば、プロセッサ１１２は、ＳＩＳ１２０及び他の命令の少なくともいずれかによってプログラムされ得る。
【００３０】
[0036] コンピュータシステム１４０
【００３１】
[0037] コンピュータシステム１４０は、１つ以上のプロセッサ１４２（以下では、適宜、複数のプロセッサ１４２、１つ又は複数のプロセッサ142、又は１つのプロセッサ142としても置き換え可能に参照される）、１つ以上のストレージデバイス１４４（コンパイラ１５０Ａ、１つ以上のプログラム１５２及び他の命令、の少なくともいずれかを格納し得る）及び他の構成要素、の少なくともいずれかを含み得る。プロセッサ１４２は、１つ以上のコンピュータプログラム命令によってプログラムされ得る。例えば、プロセッサ１４２は、コンパイラ１５０、プログラム１５２及び他の命令の少なくともいずれかによってプログラムされ得る。
【００３２】
[0038] クラウドサービスプロバイダ１６０
【００３３】
[0039] クラウドサービスプロバイダ１６０は、カスタマの代わりに計算インスタンスを実行するための様々なクラウドサービスを販売するエンティティを含み得る。例えば、アマゾン社は、そのアマゾンウェブサービス（AMAZON WEB SERVICES、AWS）サービスを用いるクラウドサービスインスタンスを販売し、グーグル社は、そのグーグルアップエンジン（GOOGLE APP ENGINE）サービスを用いるクラウドサービスインスタンスを販売する。他の例では、クラウドサービスプロバイダはまた、コンテンツデリバリネットワーク、ドメイン名サービス等のような非計算サービスを提供する他の専門化したプロバイダを含んでよい。
【００３４】
[0040] クラウドサービスプロバイダ１６０はまた、クラウドサービスのための市場又は取引所を提供するエンティティを含み得る。例えば、クラウドサービスプロバイダ１６０は、自身のインフラストラクチャを用いてクラウドサービスインスタンスを実際に提供する他の者に代わって、クラウドサービスインスタンスを販売する市場を含み得る。このように、システム１００は、異なるエンティティから様々なクラウドサービスインスタンスを販売し得る取引所を活用し得る。
【００３５】
[0041] 図１では、１つの構成要素として図示するが、コンピュータシステム１１０とコンピュータシステム１４０とは、それぞれが複数の個々の構成要素（例えばコンピュータデバイス）であって、それぞれが以下に説明される機能の少なくともいくつかがプログラムされている個々の要素を含み得る。このように、コンピュータシステム１１０及びコンピュータシステム１４０の少なくともいずれかのいくつかの構成要素は、理解されるように、他の構成要素が他の機能を実行し得る間にいくつかの機能を実行し得る。１つ以上のプロセッサ１１２、１４２のそれぞれは、コンピュータプログラム命令によってプログラムされる１つ以上の物理的なプロセッサを含み得る。以下に説明される様々な命令は単なる例示である。プロセッサ１１２、１４２が以下に説明される機能を実行するようにプログラムされる限り、他の構成及び複数の命令が使用され得る。
【００３６】
[0042] 更に、図１では様々な命令が１つのプロセッサユニット内に共に配置されるものとして図示されるが、プロセッサ１１２、１４２が複数のプロセッサユニットを含む実施では、１つ以上の命令が他の命令からリモートで実行され得ることが理解されるべきである。加えて、プロセッサ１１２に関して以下で説明される少なくともいくつかの機能は、プロセッサ１４２によって実行され得、またその逆もあり得る。例えば、プロセッサ１１２は、コンパイラ１５０、プログラム１５２、及びプログラム１５２のためのランタイム環境の少なくともいずれかによってプログラムされ得る。同様に、プロセッサ１４２は、状態情報サービス１２０とともにプログラムされ得る。
【００３７】
[0043] 以下で説明される、異なる命令によって提供される機能の記載は、説明を目的とするものであって、限定することを意図したものではなく、任意の命令は記載よりも多かれ少なかれ機能を提供し得る。例えば、１つ以上の命令は除去され得、そのいくつか又は全ての機能は他の命令によって提供され得る。他の例では、プロセッサ１１２は、以下では命令の１つに属する機能のいくつか又は全てを実行し得る、１つ以上の追加的な命令によってプログラムされ得る。
【００３８】
[0044] 以下で説明される様々な命令は、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、及び他のメモリの少なくともいずれかを含むストレージデバイス１１４に格納され得る。ストレージデバイスは、プロセッサ１１２によって操作され得るデータと同様、プロセッサ１１２によって実行されるコンピュータプログラムの命令（例えば上述した命令）を格納し得る。ストレージデバイスは、フロッピディスク、ハードディスク、光学ディスク、テープ、又は、コンピュータで実行可能な命令及び／又はデータを格納する他のストレージメディアを含み得る。
【００３９】
[0045] 図１に図示される様々な構成要素は、ネットワーク１０２を介して少なくとも１つの他の構成要素と接続され得る。これらは、任意の１つ以上の、例えば、インターネット、イントラネット、ＰＡＮ（Personal Area Network）、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）、ＳＡＮ（Storage Area Network）、ＭＡＮ（Metropolitan Area Network）、無線ネットワーク、移動体通信ネットワーク、公衆交換電話網、及び他のネットワークの少なくともいずれかを含み得る。図１及び他の図において、図示されるものとは異なる数のエンティティが用いられ得る。更に、様々な実施によれば、以下で説明される構成要素は、ハードウェア及びハードウェアを構成するソフトウェアの少なくともいずれかで実施され得る。
【００４０】
[0046] 以下で説明されるエンティティ状態情報データベース１３０（及び他のデータベースの少なくともいずれか）は、例えば、オラクル社によって商業的に販売されるオラクル（TM）リレーショナルデータベースを含み、或いはインタフェースで接続し得る。上で提供された例示的データベースは限定を意味するものではなく、エンティティ状態情報データベース１３０は、例えば、Informix（TM）、ＤＢ２（Database 2）、Amazon DynamoDB（TM）などの他のデータベースを含み又はインタフェースで接続され、又は、ＯＬＡＰ（On Line Analytical Processing）、ＳＱＬ（Structured Query Language）、ＳＡＮ（storage area network）、Microsoft Access（TM）又は他の、ファイルベース又はクエリフォーマット、プラットフォーム又はリソースを含む他のデータストレージも用いられ、組み込まれ、又はアクセスされ得る。データベースは、１つ以上の物理的なデバイス内及び１つ以上の物理的な場所に存在する１つ以上のそのようなデータベースを含み得る。データベースは、複数の型のデータ及び／又はファイル及び関連付けられたデータ又はファイル記述、管理情報、又は他の任意のデータを格納し得る。
【００４１】
[0047] 例示的なシステム処理の動作
【００４２】
[0048] 図２は、本発明の実施に従う、クラウドサービスインフラストラクチャのためのドメイン固有プログラミング言語を提供し実行する、様々なシステム構成要素の処理フロー図２００を示す。図２に図示される様々な処理の動作及び／又はデータフローは、以下により詳細に説明される。説明される動作は、上で詳細に説明したシステムの構成要素のいくつか又は全てを用いて達成され得、ある実施では、様々な動作が異なるシーケンスで実行され得、かつ、様々な動作が省略され得る。追加的な動作は、図示されたフローチャートに示される動作のいくつか又は全てと共に実行され得る。１つ以上の動作は、同時に実行され得る。従って、図示される（かつ以下でより詳細に説明される）動作は、そもそも例示であり、それ自体は限定するものとして見られるべきではない。
【００４３】
[0049] 動作２０２において、クラウドサービスインフラストラクチャのためのドメイン固有プログラミング言語におけるソースコードが受け付けられ得る。例えば、開発者は、受け付けられてコンパイラ１５０によってコンパイルされるべきソースコードをドラフトし得る。
【００４４】
[0050] コンパイラ１５０によって生成されたコンパイル済コードは、ランタイム環境２０に送信され得る。ランタイム環境２０は、説明動作（explain action）を開始することができ（更に以下で説明される）、更に、変数が存在するか、そして存在する場合に参照のスコープ内であるかどうかを判定するために、ソースコードで用いるスコープにおいて変数を識別するＳＩＳ１２０にクエリを送信することができる。
【００４５】
[0051] 動作２０６において、ＳＩＳ１２０はエンティティ状態情報データベース１３０に問い合わせて、変数及び参照の少なくともいずれかに対する状態情報を取得し得る。
【００４６】
[0052] ＳＩＳ１２０は、（変数の存在、そのスコープ、クラウドサービスプロバイダ１５０によって提供される計算インスタンスなどの外部エンティティへの参照、その利用可能な関数のようにどのようにエンティティが使用されるか、を示し得る）任意の関連する状態情報を取得してランタイム環境の他の構成要素に提供（又は、ＮＵＬＬ又は変数が存在しないことを示す他の指標を返信）し得る。
【００４７】
[0053] 動作２１０において、コンパイラ１５０は、変数が存在しかつ状態情報に基づきスコープ内にある場合に、実行可能なプログラム（以下、適宜プログラム１５２Ａとして参照される）を生成し得る。プログラム１５２Ａは、コンパイラ１５０によって既にコンパイルされている他のプログラム（１５２Ｂ、...、Ｎ）とともにランタイム環境２０に配置され得る。図３に関し、ランタイム環境について以下で詳細に説明する。
【００４８】
[0054] 動作２１２において、ランタイム環境２０はプログラム１５２Ｂを実行し得る。例えば、プログラム１５２Ｂは、人間のユーザ、処理、及び他のユーザの少なくともいずれかによって、ランタイム環境２０において実行されるように呼び出される。ランタイム環境２０は、変数が存在するか、そして存在する場合に当該変数が参照のスコープ内であるかどうかを判定するために、プログラム１５２Ｂで用いるスコープにおいて変数を識別するＳＩＳ１２０に問い合わせ得る。例えば、ランタイム環境２０は、ネットワーク１０２を介してＳＩＳ１２０へクエリを送信し得る。
【００４９】
[0055] 動作２１４において、ＳＩＳ１２０は、動作２０６に関して説明したように、エンティティ状態情報データベース１３０に問い合わせ得る。
【００５０】
[0056] 動作２１６において、ＳＩＳ１２０は、動作２０８に関して以前に説明したように、任意の関連する状態情報を取得しランタイム環境２０へ提供し得る。ランタイム環境は、呼び出すコンパイル済コード（プログラム１５２Ｂ）のスコープ内に所定の変数が無い場合に、エラー（例えばランタイムフォルト（runtime fault））を生じさせ得る。そうでない場合、ランタイム環境２０は、プログラム１５２Ｂの実行中における、参照されるエンティティ（例えばクラウドサービスプロバイダ１６０において動作する計算インスタンス）に関する任意の状態変化を把握するために、プログラム１５２Ｂにおける所定の変数の現在の状態を実行時に取得し得る。
【００５１】
[0057] ランタイム環境２０におけるプログラムの例示的な動作において、ユーザは、エンティティを参照しエンティティを生成させる変数を含み得るプログラム１５２Ａを、コンパイルして実行し得る。例えば、生成されたエンティティは、限定無しに、クラウドサービスプロバイダ１６０における計算インスタンスを含み得る。換言すれば、以下に示すドメイン固有言語を用いれば、変数のインスタンス化は、対応する計算インスタンスを参照して変数が生成されるようになされ得る。実施において、プログラム１５２Ａのためのソースコードは、変数が参照するクラウドインスタンスを特定／定義し得る。或いは、設定可能なパラメータの設定によってクラウドインスタンスを定義し得る。コンパイルされた場合、ＳＩＳ１２０は、変数、その参照、その状態、計算インスタンスがどのように用いられ得るか、及び／又は、他の状態情報を、エンティティ状態情報データベース１３０を用いて格納し得る。
【００５２】
[0058] プログラム１５２Ｂはまた変数を含む。プログラム１５２Ｂがコンパイルされた場合、説明動作はランタイム環境において実行されてよく（更なる詳細は後に説明される）、ランタイム環境は、変数がプログラム１５２Ｂのスコープ内であるかを判定するためにＳＩＳ１２０に問い合わせを行う。同様に、プログラム１５２Ｂが実行された場合、ランタイム環境２０は、変数に関連する現在の状態情報を取得するためだけでなく、変数がスコープ内であるかを判定するためにＳＩＳ１２０に問い合わせ得る。
【００５３】
[0059] ある例では、プログラム１５２Ｂは変数を更新させ得る。例えば、プログラム１５２Ｂは、置換用計算インスタンスに、クラウドサービスプロバイダ１６０における既存の計算インスタンスを置き換えさせ、指定可能な識別子（例えばインターネットプロトコルアドレス）を、置換用計算インスタンスへの参照に変更させ得る。このような変更に応じて、ランタイム環境２０は、ＳＩＳ１２０に更新を提供して、エンティティ状態情報データベース１３０を変数の更新された情報で更新し得る。他の例では、（ユーザがクラウドコンピューティング環境インタフェースを手動で動作させるなど、）外部のアクタによって開始される、コンピューティングインフラストラクチャのインスタンス（例えば変数）への変更は、元の形式にリバートすることができ、理解されるように、置き換えられた形式は、ドメイン固有プログラミング言語を通じてユーザによって特定された計算インスタンスの元のインスタンスと一致しない。
【００５４】
[0060] プログラム１５２Ｎもまた変数を含む。プログラム１５２Ｎからの変数は、上述したようにコンパイル及びランタイムにおいて正当性が確認され得る。プログラム１５２Ｎは、実行されると変数に関連する現在の状態情報を取得し得る。例えば、（計算インスタンスが生成されるようにし得た）プログラム１５２Ａによって生成された計算インスタンスへの参照の代わりに、プログラム１５２Ｂによって更新されたように、プログラム１５２Ｎに含まれる変数は、現在の計算インスタンスを参照し得る。このようにして、異なるプログラムは同じ変数を更新し得、これは変数に対する参照が同様に更新されるようにし得る。従って、以下に示すドメイン固有言語を用いることにより、異なる開発者は、（クラウドサービスプロバイダ１６０における計算インスタンスなどの）異なるエンティティを、コードの言語内でネイティブに参照し得る。
【００５５】
[0061] 図３は、本開示の例に従う、クラウドサービスインフラストラクチャのためのコンパイルされた、ドメイン固有プログラミング言語の例示的なランタイム環境について説明する。図３に説明されるように、カスタマ／クライアントコンピュータ３００において、ユーザは、クラウドベースのコンピューティングサービス上で実施するためのコンピューティングインフラストラクチャを特定するドメイン固有プログラミング言語を用いて、コンピュータコードを記述することができる。
【００５６】
[0062] ひとたびユーザがコードを生成すると、コードはステップ３０４においてコンパイルされ、ユーザによって生成されたユーザフレンドリな構文から、インフラストラクチャオペレーティングシステムのコマンドラインインタフェースによって理解可能な（ステップ３０６に示される）中間表現に変換される。ステップ３０８において、インフラストラクチャオペレーティングシステムは、コードが表すものをビルドしトラッキングすることにより、コンパイル済コード３０６を実行することができる。
【００５７】
[0063] その後コードは、インタプリタ及びプラナーモジュール３１０に送信されてよく、インタプリタ及びプラナーモジュールは、コマンドラインインタフェース言語（すなわち中間表現３０６）をインフラストラクチャオペレーティングシステムによって実行可能な特定の命令の組に変換する。ある例では、インタプリタマネージャは、１つ以上のプランニングモジュールを用いて命令をビルドすることができる。インタプリタマネージャは、このことを、いくつかの例では、入力においてリソーステーブルを受け付けて、ユーザによって提供された構文内の任意の省略が埋められたリソーステーブルを生成する、一連のプランニングモジュールを用いることにより達成することができる。ある例では、プランニングモジュールは、コンピューティングインフラストラクチャーのプロパティを特定する、ビルドされるべきリソーステーブルを受信することができる。インタプリタマネージャは、（コンパイル済のドメイン固有コードの形式で）ユーザによって送信されたリソーステーブルを確認することができ、そして、どのインフラストラクチャが必要であるかについてのユーザの宣言に基づいて、当該リソーステーブルを一連のプランニングモジュールに送信する。
【００５８】
[0064] プランニングモジュールは、ユーザのリソーステーブルを変更して、インタプリタマネージャに返信する。この処理は、ステップ３１２においてリソーステーブルの最終的な正しいバージョンが完成するまで、他のプランニングモジュールとも繰り返される。その後インタプリタマネージャは、リソーステーブルを、クラウド上に構築されるべきコンピュータインフラストラクチャの低レベル宣言として参照され得る、機械命令ファイルへ変換する。この低レベル宣言はその後、ビルダ／ドライバ３１４へ送信される。ここで、リソーステーブルは、クラウドプロバイダ３１６のアプリケーションプログラムインタフェースと連動することができる言語に変換される。
【００５９】
[0065] この動作の一部として、インタプリタとプラナーモジュール３１０は、ドメイン固有コンピューティング言語においてユーザが生成したコンピューティングインフラストラクチャのユーザ宣言インスタンスを、宣言されたインスタンスのスコープと同様、入力することができる。インタプリタは、（上述した）外部状態情報サービスデータベースに問い合わせて、ユーザによって宣言されたコンピューティングインスタンスの型が存在するか、そして存在する場合には、状態情報サービスがインタプリタに関連する任意の状態情報を提供することができるかを判定することができる。
【００６０】
[0066] ひとたびコンピューティングインフラストラクチャがクラウドコンピューティング環境上に構築されると、実装されたインフラストラクチャは「永続化された(persisted)」ものになり得る。ここで、永続化は、実装されたインフラストラクチャが、ドメイン固有プログラミング言語で表された、初めにユーザが宣言したコンピューティングインフラストラクチャのインスタンスと比較することができることを意味する。何らかの相違が発見された場合、クラウドのインフラストラクチャの実装がユーザの望むインフラストラクチャと一致するように、コンピューティングインフラストラクチャの実装がインタプリタ３１０によって修正されてよい。
【００６１】
[0067] 図４は、本発明の実施に従う、クラウドサービスインフラストラクチャのためのドメイン固有プログラミング言語をコンパイルする処理４００を示す。図４に図示される様々な処理の動作及び／又はデータフローは、以下により詳細に説明される。説明される動作は、上で詳細に説明したシステムの構成要素のいくつか又は全てを用いて達成され得、ある実施では、様々な動作が異なるシーケンスで実行され得、かつ、様々な動作が省略され得る。追加的な動作は、図示されたフローチャートに示される動作のいくつか又は全てと共に実行され得る。１つ以上の動作は、同時に実行され得る。従って、図示される（かつ以下でより詳細に説明される）動作は、そもそも例示であり、それ自体は限定するものとして見られるべきではない。
【００６２】
[0068] 動作４０２において、ドメイン固有プログラミング言語におけるソースコードが取得され得る。
【００６３】
[0069] 動作４０４において、変数が存在するか、そして存在する場合に当該変数が参照のスコープ内であるかどうかを判定するため、状態情報サービスは、言語で用いるスコープにおいて変数を識別するための問い合わせを受け得る。動作４０４は、ソースコードに現れる変数に対し、必要に応じて繰り返され得る。上述したように、状態情報サービスは、（以下で詳細に説明される）説明動作の間に問い合わせを受け得、この説明動作は、変数が存在するか、そして存在する場合にユーザ生成コードにおいて参照されるものがスコープ内であるかどうかを判定するために、ランタイム環境に配置されたインタプリタが状態情報サービスに問い合わせを行うことができるものである。
【００６４】
[0070] 動作４０６において、状態情報はクエリに基づいて取得され得る。
【００６５】
[0071] 動作４０８において、変数が存在するか、及び／又はスコープ内であるかの判定が判定され得る。
【００６６】
[0072] 動作４１０において、変数が存在するか、及びスコープ内であるかの判定に応じて、ソースコードがクラウドサービスにおける実装のためのランタイム環境に送信され得る。
【００６７】
[0073] 動作４１２において、変数が存在しない又はスコープ内でないとの判定に応じて、コンパイルエラーが発生して通信され得る。
【００６８】
[0074] 図５は、本開示の例示に従う、例示的な説明処理を示す。図５に示す説明動作において、ステップ５０２、５０４、５０６、５０８及び５１０は、図３の対応箇所（すなわち、それぞれステップ３０２、３０４、３０６、３０８及び３１０）と実質的に同一の方法で動作する。しかしながら、図３において説明された処理とは異なり、インタプリタで生成されたリソーステーブルを機械命令ファイルに変換するのではなく、代わりに、ステップ５１２において処理は、注釈付のリソーステーブルをインフラストラクチャオペレーティングシステムＣＬＩ５０８に返信する。
【００６９】
[0075] 上述したように、インタプリタは、動作の一部として、コンピューティングインフラストラクチャのユーザ宣言インスタンスを入力し、更にインスタンスが存在するかを判定するために状態情報サービスデータベースに問い合わせることができる。コンピューティングインフラストラクチャのインスタンスが存在しないと判定された場合、状態情報サービスはインタプリタに対して、宣言されたインスタンスが存在しないことを提示することができ、当該インスタンスの使用はステップ５１２において通知され得る。
【００７０】
[0076] また一方、全ての宣言された変数が存在する場合、ユーザは、ステップ５１４において、インフラストラクチャがどのように実装されるかについての計画を提示されてよい。ステップ５１４において、ユーザは、受け付けた実装計画を受け入れられるかを決定し、もし受け入れられる場合、処理はステップ５１６へ移動する。ここで、ステップ５１２において生成された注釈付きのコードは、クラウドコンピューティングサービスプロバイダのコマンドラインインタフェースと互換性のある機械コードに変換される。
【００７１】
[0077] 図６は、本発明の実施に従う、クラウドサービスインフラストラクチャのためのドメイン固有プログラミング言語を実行する処理６００を示す。図６に図示される様々な処理の動作及び／又はデータフローは、以下により詳細に説明される。説明される動作は、上で詳細に説明したシステムの構成要素のいくつか又は全てを用いて達成され得、ある実施では、様々な動作が異なるシーケンスで実行され得、かつ、様々な動作が省略され得る。追加的な動作は、図示されたフローチャートに示される動作のいくつか又は全てと共に実行され得る。１つ以上の動作は、同時に実行され得る。従って、図示される（かつ以下でより詳細に説明される）動作は、そもそも例示であり、それ自体は限定するものとして見られるべきではない。
【００７２】
[0078] 動作６０２において、ドメイン固有プログラミング言語を用いたソースコードからコンパイルされたプログラムを実行するコマンドが受け付けられ得る。
【００７３】
[0079] 動作６０４において、変数が存在するか、そして存在する場合に当該変数が参照のスコープ内であるかどうかを判定するため、状態情報サービスは、言語で用いるスコープにおいて変数を識別するための問い合わせを受け得る。動作６０４は、ソースコードに現れる変数に対し、必要に応じて繰り返され得る。
【００７４】
[0080] 動作６０６において、状態情報はクエリに基づいて取得され得る。
【００７５】
[0081] 動作６０８において、変数が存在するか、及び／又はスコープ内であるかの判定が判定され得る。
【００７６】
[0082] 動作６１０において、変数が存在しない又はスコープ内でないとの判定に応じて、ランタイムエラーが発生して通信され得る。
【００７７】
[0083] 動作６１２において、変数が存在し且つスコープ内であるとの判定に応じて、プログラムが実行され得る。動作６１２は、全ての変数が処理されるまで繰り返され得る。ある実装では、コードの実行はクラウドサービスプロバイダにおける計算インスタンスがインスタンス化されるようにし得る。これらの実装では、状態情報（例えば、ＩＰアドレス、バージョン、どのように用いるか等）は状態情報サービスを介して格納され得る。このようにして、同じ変数を用いる他のプログラムは、インスタンス化された計算インスタンスのために状態情報サービスにアクセスし得る。
【００７８】
[0084] 動作６１４において、変数に関連付けられたエンティティの状態情報への更新がプログラムの実行中に生じたかについての判定がなされ得る。例えば、計算インスタンスに対応する変数を使用するプログラムが、計算インスタンスに関連付けられたＩＰアドレスを変更してもよい。動作６１４は、全ての変数が処理されるまで繰り返され得る。
【００７９】
[0085] 更新が発生したことの判定に応じて、動作４１６では、状態情報が状態情報サービスを介して更新され得る。
【００８０】
[0086] 動作６１８において、コードの実行は（エラー状態を有することなく）正常に終了し得る。
【００８１】
[0087] 上述の説明は、説明の目的のために、特定の実施形態を参照して説明された。しかしながら、上記説明は包括的であること又は開示された正確な形式に限定することを意図するものではない。上記技術を考慮した多くの修正及び変形が可能である。実施形態は、技術の原理及び実用的な利用を最もよく説明するために選択され、説明されたものである。これにより、当業者は、意図された特定の用途に適したものとして本技術と様々な修正を伴う様々な修正を最も有効に利用することができる。
【００８２】
[0088] 従って、上記に従う本開示のいくつかの例は、クラウドコンピューティングシステムにインフラストラクチャを構築する方法であって、この方法は、ドメイン固有プログラミング言語でユーザによって記述されたソースコードを受け付けることであって、ソースコードが、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャの１つ以上のインスタンスを定義する１つ以上の変数を含む、受け付けることと、コンピューティングインフラストラクチャの１つ以上のインスタンスが状態情報サービスに存在するかを識別し、１つ以上の変数がコンピューティングインフラストラクチャの識別された１つ以上のインスタンスに見合うスコープ内であるかを識別するために、状態情報サービスに問い合わせることと、コンピューティングインフラストラクチャの１つ以上のインスタンスが存在し且つコンピューティングインフラストラクチャの識別された１つ以上のインスタンスに見合うスコープ内であることが判明した場合に、受け付けたソースコードを、クラウドコンピューティング環境のコマンドラインインタフェースによって読み取り可能な１つ以上の命令に変換することと、を含む方法に対するものである。上述の１つ以上の例に追加して或いは代替して、いくつかの例では、ドメイン固有プログラミング言語で記述されたソースコードを受け付けることは、ソースコードを、クラウドインフラストラクチャオペレーティングシステムのコマンドラインインタフェースと互換性を有する中間表現に変換することを含む。上述の１つ以上の例に追加して或いは代替して、いくつかの例において当該方法は更に、１つ以上の変数の各変数が状態情報サービスに存在し、且つコンピューティングインフラストラクチャの識別された１つ以上のインスタンスに見合うスコープ内であることが判明した場合に、実装計画を生成することを含む。上述の１つ以上の例に追加して或いは代替して、いくつかの例において当該方法は更に、生成された実装計画を、承認のためにユーザに送信することを含む。上述の１つ以上の例に追加して或いは代替して、いくつかの例において当該方法は更に、ユーザが生成された実装計画を承認した場合、ドメイン固有プログラミング言語でユーザによって記述されたソースコードをクラウドコンピューティング環境において実装することを含む。上述の１つ以上の例に追加して或いは代替して、いくつかの例では、ソースコードを実装することは、ソースコードを、クラウドインフラストラクチャオペレーティングシステムのコマンドラインインタフェースと互換性を有する中間表現に変換することを含む。上述の１つ以上の例に追加して或いは代替して、いくつかの例では、ソースコードを実装することは、コンピューティングインフラストラクチャの実装された１つ以上のインスタンスがソースコードに対応するように、クラウドコンピューティング環境のコマンドラインインタフェースによって読み取り可能な１つ以上の命令を修正することを含む。上述の１つ以上の例に追加して或いは代替して、いくつかの例では、ソースコードは、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャの１つ以上のインスタンスと��連付けられた１つ以上の変数を利用する、１つ以上の関数を含む。上述の１つ以上の例に追加して或いは代替して、いくつかの例では、１つ以上の変数は、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャのユーザ定義インスタンスを含む。
【００８３】
[0089] 本開示のいくつかの例は、クラウドコンピューティングシステムにインフラストラクチャを構築する方法であって、この方法は、ドメイン固有プログラミング言語でユーザによって記述されたソースコードを受け付けることであって、ソースコードが、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャの１つ以上のインスタンスを定義する１つ以上の変数を含む、受け付けることと、コンピューティングインフラストラクチャの１つ以上のインスタンスが状態情報サービスに存在するかを識別し、１つ以上の変数がコンピューティングインフラストラクチャの識別された１つ以上のインスタンスに見合うスコープ内であるかを識別するために、状態情報サービスに問い合わせることと、１つ以上の変数のいずれかが状態情報サービスに存在しない、又は１つ以上の変数のいずれかがコンピューティングインフラストラクチャの識別された１つ以上のインスタンスに見合うスコープ内にない場合に、ユーザに通知することと、を含む方法に対するものである。上述の１つ以上の例に追加して或いは代替して、いくつかの例では、ドメイン固有プログラミング言語で記述されたソースコードを受け付けることは、ソースコードを、クラウドインフラストラクチャオペレーティングシステムのコマンドラインインタフェースと互換性を有する中間表現に変換することを含む。
【００８４】
[0090] 本開示のいくつかの例は、１つ以上のプログラムを格納する非一時的コンピュータ可読媒体であって、１つ以上のプログラムは、クラウドコンピューティングシステムにインフラストラクチャを構築する命令を含み、携帯用電子デバイスで実行されると、このデバイスに、ドメイン固有プログラミング言語でユーザによって記述されたソースコードを受け付け、ソースコードが、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャの１つ以上のインスタンスを定義する１つ以上の変数を含み、コンピューティングインフラストラクチャの１つ以上のインスタンスが状態情報サービスに存在するかを識別し、１つ以上の変数がコンピューティングインフラストラクチャの識別された１つ以上のインスタンスに見合うスコープ内であるかを識別するために、状態情報サービスに問い合わせ、コンピューティングインフラストラクチャの１つ以上のインスタンスが存在し且つコンピューティングインフラストラクチャの識別された１つ以上のインスタンスに見合うスコープ内であることが判明した場合に、受け付けたソースコードを、クラウドコンピューティング環境のコマンドラインインタフェースによって読み取り可能な１つ以上の命令に変換する、ようにさせる命令を含む非一時的コンピュータ可読媒体に対するものである。上述の１つ以上の例に追加して或いは代替して、ドメイン固有プログラミング言語で記述されたソースコードを受け付けることは、ソースコードを、クラウドインフラストラクチャオペレーティングシステムのコマンドラインインタフェースと互換性を有する中間表現に変換することを含む。上述の１つ以上の例に追加して或いは代替して、プロセッサは更に、１つ以上の変数の各変数が状態情報サービスに存在し、且つコンピューティングインフラストラクチャの識別された１つ以上のインスタンスに見合うスコープ内であることが判明した場合に、実装計画を生成するようにする。上述の１つ以上の例に追加して或いは代替して、プロセッサは更に、生成された実装計画を、承認のためにユーザに送信するようになされる。上述の１つ以上の例に追加して或いは代替して、プロセッサは更に、ユーザが生成された実装計画を承認した場合、ドメイン固有プログラミング言語でユーザによって記述されたソースコードをクラウドコンピューティング環境において実装するようになされる。上述の１つ以上の例に追加して或いは代替して、ソースコードを実装することは、ソースコードを、クラウドインフラストラクチャオペレーティングシステムのコマンドラインインタフェースと互換性を有する中間表現に変換することを含む。上述の１つ以上の例に追加して或いは代替して、ソースコードを実装することは、コンピューティングインフラストラクチャの実装された１つ以上のインスタンスがソースコードに対応するように、クラウドコンピューティング環境のコマンドラインインタフェースによって読み取り可能な１つ以上の命令を修正することを含む。上述の１つ以上の例に追加して或いは代替して、ソースコードは、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャの１つ以上のインスタンスと関連付けられた��つ以上の変数を利用する、１つ以上の関数を含む。上述の１つ以上の例に追加して或いは代替して、１つ以上の変数は、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャのユーザ定義インスタンスを含む。
【００８５】
[0091] 本開示のいくつかの例は、命令のセットを格納する非一時的コンピュータ可読媒体であって、命令のセットがコンピューティングデバイスによって実行されると、このコンピューティングデバイスに、ドメイン固有プログラミング言語でユーザによって記述されたソースコードを受け付け、ソースコードは、クラウドコンピューティング環境上に構築されるコンピューティングインフラストラクチャの１つ以上のインスタンスを定義する１つ以上の変数を含む、コンピューティングインフラストラクチャの１つ以上のインスタンスが状態情報サービスに存在するかを識別し、１つ以上の変数がコンピューティングインフラストラクチャの識別された１つ以上のインスタンスに見合うスコープ内であるかを識別するために、状態情報サービスに問い合わせ、１つ以上の変数のいずれかが状態情報サービスに存在しない、又は１つ以上の変数のいずれかがコンピューティングインフラストラクチャの識別された１つ以上のインスタンスに見合うスコープ内にないことが判明した場合に、ユーザに通知する、ようにさせる非一時的コンピュータ可読媒体に対するものである。上述の１つ以上の例に追加して或いは代替して、ドメイン固有プログラミング言語で記述されたソースコードを受け付けることは、ソースコードを、クラウドインフラストラクチャオペレーティングシステムのコマンドラインインタフェースと互換性を有する中間表現に変換することを含む。
【００８６】
[0092] 本開示及び例は添付の図面を参照して十分に説明されたが、様々な変更及び修正が当業者にとって明らかであることに留意されるべきである。そのような変更及び修正は、本開始及び例の範囲内に含まれるものとして特許請求の範囲によって定義されるように理解されるべきである。
【図１】
2017534996.tif 000003
【図２】
2017534996.tif 000004
【図３】
2017534996.tif 000005
【図４】
2017534996.tif 000006
【図５】
2017534996.tif 000007
【図６】
2017534996.tif 000008
【国際調査報告】
2017534996.tif 000009