(57)【要約】      （修正有）【課題】タスク定義に基づき、タスクを実行するために１つ又は複数のコンテナを稼働させるシステムを提供する。【解決手段】コンテナサービスは、タスク定義に従ってソフトウェアイメージを起動するためのリクエストを受信するように構成され、このタスク定義は、ソフトウェアコンテナのためのリソースの割り当てを特定する。コンテナサービスはその後、配置スキームに従って、タスク定義に従って中でソフトウェアイメージを起動するクラスタに登録された一揃いのコンテナインスタンスのサブセットを決定する。一揃いのコンテナインスタンスのサブセットを決定すると、コンテナサービスは、タスク定義に従って一揃いのコンテナインスタンス内の１つまたは複数の稼働中のソフトウェアコンテナとしてソフトウェアイメージを起動することができる。【選択図】図１
2019149192.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサによって実行される際、実行可能な命令を含むメモリと、を備えるシステムであって、前記命令は前記システムに少なくとも、
実行するタスクの名前、前記タスクに対するコンテナイメージの場所及び前記タスクのポートを示す、タスク定義を取得させ、
仮想マシンインスタンスのクラスタ内で、前記タスクを実行する１つ又は複数のコンテナを稼働し且つ前記タスクに割り当てられたリソースの量を示す要求を受け取らせ、
スケジューラを介して、前記１つ又は複数のコンテナを稼働するために利用可能な仮想マシンインスタンスをクラスタから選択させ、
前記コンテナイメージに基づき、前記利用可能な仮想マシンインスタンスにおいて及び前記タスク定義に従って、前記１つ又は複数のコンテナを稼働させ、前記システムに少なくとも、
前記タスク定義に基づき、前記場所から前記コンテナイメージを取得させ、
前記１つ又は複数のコンテナにリソースの量を割り当てさせ、
前記１つ又は複数のコンテナに前記ポートを指定させ、
前記タスクを実行するために前記１つ又は複数のコンテナを稼働させる、システム。
【請求項２】
前記リソースの量は、前記利用可能な仮想マシンインスタンスに割り当てられた前記リソースの数量の一部である、請求項１に記載のシステム。
【請求項３】
前記タスク定義は、特定の種類の仮想マシンインスタンスのアフィニティ及びアンチアフィニティを示す、アフィニティ情報を含み、
前記利用可能な仮想マシンインスタンスを選択させる前記実行可能な命令はさらに、前記アフィニティ情報に基づき、前記システムに、前記利用可能な仮想マシンインスタンスを選択させる命令を含む、請求項１又は２に記載のシステム。
【請求項４】
ロードバランサは、前記クラスタの前記仮想マシンインスタンスでのトラフィックをバランスする、請求項１〜３のいずれか一項に記載のシステム。
【請求項５】
ドッカーコンテナエンジンは、前記利用可能な仮想マシンインスタンスで稼働する前記１つ又は複数のコンテナを管理する、請求項１〜４のいずれか一項に記載のシステム。
【請求項６】
前記タスク定義はさらに、
前記１つ又は複数のコンテナがグループに指定されたことと、
前記グループのメンバーは同じ仮想マシンインスタンスで稼働するように組み込まれていることと、を特定する、請求項１〜請求項５のいずれか一項に記載のシステム。
【請求項７】
前記実行可能命令はさらに、前記システムに、
前記利用可能な仮想マシンインスタンスで稼働する前記１つ又は複数のコンテナに関連するメトリックを取得させ、
前記メトリックをリソース監視サービスに提供する命令を備える、請求項１〜６のいずれか一項に記載のシステム。
【請求項８】
前記メトリックは、
前記１つ又は複数のコンテナによる中央処理装置の利用、
前記１つ又は複数のコンテナによる中央処理装置の実行時間、
前記１つ又は複数のコンテナによって使用されるメモリの量、
のうちの少なくとも１つを含む、請求項７に記載のシステム。
【請求項９】
コンピュータ実装式の方法であって、
処理を稼働する仮想マシンインスタンスのクラスタを形成する、１つ又は複数のアプリケーションプログラミングインタフェース（ＡＰＩ）コールをコンピューティングリソースサービスプロバイダの顧客から受け取ることと、
前記１つ又は複数のＡＰＩコールに応答して、
複数の仮想マシンインスタンスを起動することと、
前記複数の仮想マシンインスタンスをクラスタ識別子に関連付けすることと、
前記複数の仮想マシンインスタンスのうちの各仮想マシンインスタンスに対し、
前記仮想マシンインスタンスにおいてソフトウェアコンテナを起動し、
前記ソフトウェアコンテナにおいて前記プロセスの少なくとも一部を実行する、コンピュータ実装式の方法。
【請求項１０】
前記ソフトウェアコンテナは、前記仮想マシンインスタンスで稼働する他のソフトウェアコンテナからは隔離されて稼働されるユーザスペースインスタンスである、請求項９に記載のコンピュータ実装式の方法。
【請求項１１】
前記クラスタは、前記インスタンスを含む複数のインスタンスと対応付けられている、請求項９又は１０に記載のコンピュータ実装式の方法。
【請求項１２】
前記複数の仮想マシンインスタンスを起動することは、仮想プライベートクラウド内で前記複数の仮想マシンインスタンスを起動することをさらに含む、請求項９〜１１のいずれか一項に記載のコンピュータ実装式の方法。
【請求項１３】
前記ソフトウェアコンテナは、タスク定義によって特定される方法で他のソフトウェアコンテナとリンクされる、請求項９〜１２のいずれか一項に記載のコンピュータ実装式の方法。
【請求項１４】
前記コンピュータ実装式の方法はさらに、
前記プロセスに対応付けされた、ソフトウェアイメージの場所を示し、
前記ソフトウェアコンテナに割り当てられる前記仮想マシンインスタンスのコンピューティングリソースの量を特定するために使用可能な情報を含む、タスク定義を取得し、
前記複数の仮想マシンインスタンスのうちの各仮想マシンインスタンスは、さらに、
前記場所から前記ソフトウェアイメージを取得し、
前記ソフトウェアコンテナに、前記仮想マシンインスタンスの前記コンピューティングリソースの量を割り当て、
前記ソフトウェアイメージに基づき、少なくとも一部のプロセスを実行する、請求項９〜１３のいずれか一項に記載のコンピュータ実装式の方法。
【請求項１５】
前記ソフトウェアイメージは、前記ソフトウェアイメージの形成時における前記ソフトウェアコンテナの状態を示すデータである、請求項１４に記載のコンピュータ実装式の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、「ＳＹＳＴＥＭ  ＦＯＲ  ＭＡＮＡＧＩＮＧ  ＡＮＤ  ＳＣＨＥＤＵＬＩＮＧ  ＣＯＮＴＡＩＮＥＲＳ」と題する２０１４年１１月１１日に出願された同時係属米国特許出願第１４/５３８，６６３号の優先権を主張しており、その内容はその全体が参照により本明細書に組み込まれる。
【背景技術】
【０００２】
それぞれのコンピューティングリソースを維持することに関連する費用及びオーバーヘッドを削減することを求める企業及び個人は代わりに、コンピューティングリソースサービスプロバイダによって顧客に提供される、多数の仮想マシンインスタンスにわたるリモートプログラム実行及びリモートデータストレージなどのリモートコンピューティングサービスを購入するようになっている。そのようなリモートコンピューティングサービスは、コンピューティングリソースサービスプロバイダの顧客の多様なコンピューティングニーズを満たすように構成可能でありスケーラブルであることが多い。しかしながら多数の仮想マシンインスタンス上で稼働している種々のアプリケーションを管理することは顧客にとって難しい場合もあり、そのようなアプリケーションは、他のコンピューティングシステムに対して移植することが不可能である、またはリソースに対する高まるニーズを満たすように拡張性がない場合もある。
【発明の概要】
【課題を解決するための手段】
【０００３】
１つまたは複数のプロセッサによってクラスタに登録されたコンピュータシステムインスタンス内で実行されるように構成されたソフトウェアコンテナのソフトウェアイメージを取得するコンテナサービスのためのシステム及び方法。コンテナサービスは、タスク定義に従ってソフトウェアイメージを起動するためのリクエストを受信するように構成され、このタスク定義は、ソフトウェアコンテナのためのリソースの割り当てを特定する。コンテナサービスはその後、配置スキームに従って、タスク定義に従って中でソフトウェアイメージを起動するクラスタに登録された一揃いのコンテナインスタンスのサブセットを決定する。一揃いのコンテナインスタンスのサブセットを決定すると、コンテナサービスは、タスク定義に従って一揃いのコンテナインスタンス内の１つまたは複数の稼働中のソフトウェアコンテナとしてソフトウェアイメージを起動することができる。
【０００４】
本開示による種々の実施形態を図面を参照して記載する。
【図面の簡単な説明】
【０００５】
【図１】一実施形態によるコンテナサービスと対話する顧客の一例を示す。
【図２】一実施形態によるコンテナサービスの一例を示す。
【図３】一実施形態によるコンテナサービスの仮想化の一例を示す。
【図４】一実施形態によるコンテナインスタンスの一例を示す。
【図５】一実施形態によるコンテナインスタンスにおけるリソースの割り当ての一例を示す。
【図６】一実施形態によるクラスタ上でタスクを起動するための一例のワークフローを示すブロック図である。
【図７】一実施形態によるクラスタを形成する一例を示すブロック図である。
【図８】一実施形態によるコンテナインスタンスの登録の一例を示すブロック図である。
【図９】一実施形態によるタスクの登録の一例を示すブロック図である。
【図１０】一実施形態によるタスクの開始の一例を示すブロック図である。
【図１１】一実施形態によるタスクの停止の一例を示すブロック図である。
【図１２】一実施形態によるタスクの登録取り消しの一例を示すブロック図である。
【図１３】一実施形態によるコンテナの登録取り消しの一例を示すブロック図である。
【図１４】一実施形態によるクラスタの削除の一例を示すブロック図である。
【図１５】一実施形態によるコンテナの管理及びスケジューリングのためのシステムの一例のサービス設計の図を示す。
【図１６】種々の実施形態を実装することができる環境を示す。
【発明を実施するための形態】
【０００６】
以下の記載において種々の実施形態を記載することにする。説明する目的で、これらの実施形態の理解の徹底を期すために、特有の構成及び詳細が記載される。しかしながら、これらの実施形態はまたこの特有の詳細なしでも実施され得ることは当業者に明らかであろう。さらに、記載されている実施形態を不明確なものにしないために、よく知られた特徴は省略または簡略化される場合もある。
【０００７】
記載され提案される技術は、コンピューティングリソースサービスプロバイダの顧客のためにソフトウェアコンテナを稼働するためのソフトウェアコンテナインスタンスのクラスタを形成するためのシステム及び方法を含む。ソフトウェアコンテナインスタンスは、コンテナ化をサポートするように構成された仮想マシンインスタンスであって良く、ソフトウェアコンテナインスタンスは、顧客のニーズに適応するために必要に応じてクラスタに登録されたり、クラスタから登録を取り消したりすることができる。各々のソフトウェアコンテナインスタンスは、コンテナエージェントを含むことができ、これはコンピュータシステムの１つまたは複数のプロセッサによって実行される際、ソフトウェアコンテナ及びソフトウェアコンテナインスタンスによって種々のタスクを行うように構成されたアプリケーションであり、これらのタスクには、コンテナインスタンスを登録する、コンテナインスタンスの登録を取り消す、タスクを開始する、タスクを停止する、タスクの状態を提供する、タスクのハートビートを信号で知らせる、及びタスクイベントを報告するなどが含れる。ソフトウェアコンテナはデータ及び１つまたは複数のプロセスを含むことができ、これらのプロセスは、コンテナ化をサポートするように構成されたコンピュータシステムインスタンス内で実行される際、同一のコンピュータシステムインスタンス内で稼働中の他のプロセスから隔離させることができる。
【０００８】
ソフトウェアコンテナは、タスク定義に従ってタスクとして稼働するように構成されて良く、タスクの定義は、タスク定義ファイルとして記憶されて良い。タスク定義ファイルは、１つのグループとして開始するように指定された１つまたは複数のソフトウェアコンテナを記述することができる。ソフトウェアコンテナのソフトウェアイメージは、ソフトウェアコンテナインスタンス内において実行するように構成されたソフトウェアイメージが生成されたときのソフトウェアコンテナの特定の状態の完全なコピーを表すことができ、コンピューティングリソースサービスプロバイダまたはタスク定義において特定されたその場所に提供されて良い。タスク定義はまた、リソース要件、コンテナ間の関係、使用されるネットワークポート及び共有されるリソースを特定することもできる。
【０００９】
タスク定義のタスクを開始するためのリクエストを受信すると、スケジューラは、配置スキームに従って、クラスタ内のどのソフトウェアコンテナインスタンスがタスクを稼働するかを決定することができる。場合によっては、コンピューティングリソースサービスプロバイダが、どこでソフトウェアコンテナを稼働するかを決定するためのマルチテナントスケジューラを提供する場合もあり、また場合によっては、コンピューティングリソースサービスプロバイダは、顧客がそれぞれの独自のスケジューラを準備し、動作方法をカスタマイズするためにそれらを構成することを許可する場合もある。場合によっては、スケジューラは、タスク定義において特定されるリソース要件を考慮に入れて、ランダム選択スキームを利用してランダムに（何らかの確率的な分散スキームに従って）またはラウンドロビン式に所与のソフトウェアコンテナをホストするコンテナインスタンスを選択するように構成される場合もある。コンテナエージェントは、そのそれぞれのソフトウェアコンテナインスタンス内でタスクを開始するように構成されて良い。一部の実施形態では、テレメトリエージェントが、稼働中のソフトウェアコンテナに関する制御グループメトリック及びログイベント情報などのデータを収集し、そのデータをテレメトリサービスに報告するように構成される場合もある。テレメトリサービスは、そのコンテナインスタンス内のソフトウェアコンテナの状態を顧客が監視することを可能にすることができ、顧客は、テレメトリサービスを介して、収集したデータに基づいて警戒を高めるために様々なコンテナイベント及び基準に応じて行う行動を特定することができる。
【００１０】
記載され提案される技術は、ソフトウェアコンテナを管理するための一揃いのマルチテナントコンテナ化サービスを提供することによって、コンピューティングの分野、とりわけ仮想化及びコンテナ化の分野を向上させる。加えて記載され提案される技術は、コンピューティングシステムのリソースを効率的に割り当てることを可能にし、それらが互いの間でリソースを競い合うことがないように、ソフトウェアアプリケーションを隔離することによって、コンピュータシステムの機能性を向上させる。さらに記載され提案される技術は、移植性を改善し、マルチテナントサービスを提供し、かつ需要が増減するにつれてリソースを自動的にスケーリングすることによって、一般的な仮想化システム対して意義のある利点を与える。
【００１１】
図１は、一実施形態が実施され得る環境１００の一態様を示す。図１に示されるように、環境１００は、ネットワーク１０６を介してコンピューティングリソースサービスプロバイダ１１０のコンテナサービス１０８に対して、ソフトウェアコンテナ１１８に関するタスク定義ファイル１０４と共にタスクを起動するためのリクエストを送る顧客１０２を含むことができる。図２のスケジューラ２０８などのスケジューラが、タスク定義ファイル１０４において特定されるソフトウェアコンテナ１１８がコンテナインスタンスのクラスタ１１６のどのコンテナインスタンス１１４において起動されるべきかを決定することができる。一部の実施形態において、ソフトウェアコンテナは、例えばコンピューティングリソースサービスプロバイダ１１０のブロックレベルデータ記憶サービスによって提供される記憶ボリュームなど、コンピューティングリソースサービスプロバイダ１１０の他のサービス１２２によって提供されるリソース１２０を共有するように構成される場合もある。
【００１２】
顧客１０２は、コンテナサービスの顧客アカウントに対応付けられた個人であって良い、または顧客アカウントに対応付けられた個人に代わって行動するように認証された個人、システム、リソースコンピューティングデバイスまたは他のエンティティである場合もある。さらに顧客１０２のリソースは、他のユーザが利用できるようにされる場合もある。例えば顧客１０２は、コンテナインスタンス１１４を利用して他のユーザのためにオンライン市場を提供することができ、このような他のユーザはこのとき、コンテナサービスを通して顧客１０２によって提供されたオンライン市場を通して物品及びサービスを売買することができる。顧客１０２は、ネットワーク１０６を介してコンピューティングリソースサービスプロバイダ１１０のコンテナサービス１０８と通信することができ、このネットワーク１０６は、インターネット、イントラネット、インターネットサービスプロバイダ（ＩＳＰ）ネットワーク及び／または以下に記載するような何らかの他のそのようなネットワークなどの通信ネットワークであって良い。
【００１３】
一部の例において、「タスク定義」または「タスク定義ファイル」は、１つのグループとして始動するように指定された一揃いのリンクされたコンテナ（すなわちホストコンピューティングシステム上で稼働する際、互いに対応付けられた一揃いのコンテナ）を特定するファイルを指すことができる。タスク定義ファイル１０４はさらに、コンテナ１１８が単一の物理的マシン上で共有することが可能なディスクまたはネットワークの場所を特定する場合もある。タスク定義ファイル１０４はこのとき、この一揃いのコンテナ１１８を起動するのに利用される場合もある。一部の実施態様では、タスク定義ファイル１０４は、複数の物理的マシンにわたって広がるコンテナ１１８を規定しリンクさせる場合もある。１つのタスク定義ファイル１０４が多くのタスクを包含しスケジュールに組み込む場合もある。一部の例では、「タスク」は、タスク定義ファイル１０４のインスタンス化を指す場合もあり、１つまたは複数のコンテナ１１８で構成される場合もある。タスクは、新たなタスクの定義をタスクに加えることによって修正される場合もある。
【００１４】
タスク定義ファイル１０４は、クラスタ１１６内にコンテナ１１８を配置するのに必要とされる全ての情報を包含することができ、クラスタ１１６はアプリケーションプログラミングインターフェースコールを通して管理することができる。
【００１５】
タスクの定義付けの一例は、
{      ‘ｄｂ’: 
{
‘Ｉｍａｇｅ(イメージ)’ : ‘ｆｏｒｅｓｔ/ｐｏｓｔｇｒｅｓｑｌ’，
‘Ｐｏｒｔｓ（ポート）’ :   [‘５４３２’]，
‘ＣＰＵ’ : １０００，
‘Ｍｅｍｏｒｙ（メモリ）’ : １０７３７４１８２４
}，
‘ｗｅｂ’ : 
{
‘Ｉｍａｇｅ（イメージ）’ : ‘ｈｕｂ．ｗｅｂ．ｃｏｍ/ｒａｉｌｓ:ｌａｔｅｓｔ’，
‘Ｐｏｒｔｓ（ポート）’ :   [‘８０００:８０００’]，
‘ｌｉｎｋｓ（リンク）’ :   [‘ｄｂ’]，
‘ＣＰＵ’ : １０００，
‘Ｍｅｍｏｒｙ（メモリ）’ : １０７３７４１８２４
}
}
【００１６】
一例のタスク定義は、「ｄｂ」という名称の第１のタスクがパス「ｆｏｒｅｓｔ/ｐｏｓｔｇｒｅｓｑｌ．」に配置されるソフトウェアイメージを有することを特定する。第１のタスクは、１０００から１ギガバイトのメモリの処理用シェアが割り当てられ、第１のタスクはポート５４３２を使用する。同様にタスク定義はまた、「ｗｅｂ」という名称の第２のタスクが、パス「ｈｕｂ．ｗｅｂ．ｃｏｍ/ｒａｉｌｓ:ｌａｔｅｓｔ．」に配置されるソフトウェアイメージを有することも特定する。第２のタスクは、１０００から１ギガバイトのメモリの処理用シェアが割り当てられ、第２のタスクはポート８０００:８０００を使用する。タスク定義は、第２のタスク（「ｗｅｂ」）が第１のタスク（「ｄｂ」）にリンクすることが許されることを指摘する。この例で使用される一部の装置は、例えば中央処理装置シェアの固定された数字として与えられる処理能力など、固定された数字として提示されるが、動的なリソース割り当てを可能にするために、代わりに他の装置及び他のタイプの値（例えば総処理能力のパーセンテージ、総メモリのパーセンテージ）が使用される場合もあることが企図されることに留意されたい。
【００１７】
コンテナサービス１０８は、顧客１０２がクラスタ１１６内のコンテナ１１８を実行することを可能にするためにコンピューティングリソースサービスプロバイダ１１０によって提供されるサービスであって良い。コンテナサービス１０８は、図２に関連して記載されるコンテナサービス２００と同様であって良い。コンピューティングリソースサービスプロバイダ１１０は、図１５に関連して記載されるコンピューティングリソースサービスプロバイダ１５０２と同様のコンピューティングリソースサービスプロバイダであって良く、個別にまたは分散コンピュータシステムのサービスの組み合わせとしてその顧客に１つまたは複数のコンピューティングリソースサービスを提供することができる。コンピューティングリソースサービスプロバイダ１１０の１つまたは複数のコンピューティングリソースサービスは、ネットワーク１０６を介してアクセス可能であって良く、例えば仮想コンピュータシステムサービス、ブロックレベルデータ記憶サービス、暗号サービス、オンデマンドデータ記憶サービス、通知サービス、認証サービス、ポリシー管理サービス、タスクサービス及び／または他のそのようなサービスなどのサービスを含むことができる。記載される全ての実施形態が記載される全てのサービスを含むわけではなく、明白に記載されるものに加えて、またはその代替として追加のサービスが提供される場合もある。
【００１８】
一例として、コンピューティングリソースサービスプロバイダ１１０は、データ記憶サービス、仮想コンピュータシステムサービス及び／またはウェブサービスなどのコンピューティングリソースを提供するエンティティであって良い。。コンピューティングリソースサービスプロバイダ１１０の顧客は、ウェブサービスインターフェースまたは任意の他のタイプの顧客インターフェースであり得るインターフェースを介して１つまたは複数のサービスと通信することができる。コンピューティングリソースサービスプロバイダによって提供される各々のサービスは、その独自のインターフェースを有し、これらのサービスのサブセットは、共通のインターフェースに加えて、またはその代替としてこれに対応する個別のインターフェースを有する場合もある。
【００１９】
一部の例では、「コンテナインスタンス」は、ソフトウェアコンテナを起動及び稼働するように構成されたコンピュータシステムインスタンス（仮想または非仮想の、オペレーティングシステムを稼働する物理的コンピュータシステムなど）を指す場合もある。よってコンテナインスタンス１１４は、顧客１０２によって提供されるタスク定義ファイル１０４に従ってコンテナ１１８を稼働するように構成されて良い。１つまたは複数のコンテナインスタンスは、クラスタを備えることができる。一部の例では、「クラスタ」は、クラスタに登録された（すなわち、これに対応付けられた）１つまたは複数のコンテナインスタンスのセットを指す場合がある。よってコンテナインスタンス１１４は、クラスタ１１６に登録された多くの様々なコンテナインスタンスのうちの１つであって良く、クラスタ１１６の他のコンテナインスタンスは、コンテナ１１８と同一のまたは異なるタイプのコンテナを稼働するように構成されて良い。クラスタ内のコンテナインスタンスは、異なるインスタンスタイプまたは同一のインスタンスタイプであって良く、顧客１０２は、２つ以上のクラスタを有する場合もある。よって顧客１０２は、１つまたは複数のクラスタを起動し、その後、アプリケーションプログラミングインターフェースコールを介して各々のクラスタ内のコンテナ１１８のユーザとアプリケーションの隔離を管理することができる。クラスタに関するさらなる詳細は、図２の記載において見いだすことができる。
【００２０】
コンテナ（ソフトウェアコンテナまたは隔離されたユーザスペースインスタンスとも呼ばれる）は、プログラム、データ及びシステムライブラリを含めたコンピュータシステムインスタンスの下で稼働する軽量仮想化インスタンスであって良い。コンテナが稼働される際、稼働プログラム（すなわちプロセス）は、同一のコンピュータシステムインスタンスにおいて稼働中の他のプロセスから隔離される。よってコンテナ１１８は、コンテナインスタンス１１４のオペレーティングシステム上で稼働し、（例えばオペレーティングシステムによって割り当てられたメモリ、ＣＰＵ及び記憶装置を使用して）かつ互いからの隔絶を達成することができる（例えば各々のコンテナは、オペレーティングシステムのファイルシステムの隔絶された視野を有することができる）。コンテナ１１８の各々はその独自のネーム空間を有することができ、コンテナ１１８内で稼働中のアプリケーションは、コンテナのネーム空間内で利用可能なリソースに対してのみアクセス権を有することによって隔離される。よってコンテナ１１８は、その独自のネーム空間内において１つまたは複数の単一のアプリケーションを稼働するための効率的な方法であり得る。コンテナカプセル化システムによって、別々のユーザ空間インスタンスを稼働するために仮想マシンを始動し維持することに関連するオーバーヘッドなしで、１つまたは複数のコンテナが単一のオペレーティングインスタンス内において稼働することが可能になる。コンテナカプセル化システムの一例はドッカーコンテナエンジンである。
【００２１】
コンテナ１１８は、コンテナインスタンス１１４に割り当てられたリソースから特定されたリソースのみを有するように起動させることができる、すなわちコンテナは、特定の量のメモリを有し、かつ特定された量の処理パワーを超えて利用しないように起動させることができる。コンテナ１１８のためのリソース割り当ては、タスクの定義ファイル１０４において特定されて良い。複数のコンテナが単一のホストコンピュータまたはホストコンテナインスタンス上で同時に稼働する場合もあり、ホストのリソースをコンテナ間で効率的に割り当てることができる。いくつかの実施形態において、１つのホストが、一人の顧客のみからコンテナインスタンスにおいて稼働するコンテナをサポートする場合もある。他の実施形態において、単一のホストによって、複数の顧客がホスト上で稼働コンテナインスタンスを有することを可能にする場合もある。後者の場合は、コンテナサービスがセキュリティを与えることで、顧客が他人のコンテナ、クラスタまたは他のコンテナインスタンスにアクセスすることができないことを保証しても良い。
【００２２】
異なるタイプのタスクは、異なるリソース要件を有し、異なる寿命を有する可能性がある。よってコンテナ１１８は、コンテナインスタンスの基礎となるオペレーティングシステムから独立して、コンテナサービス１１０内のスケジューラサービスによって稼働するように動的にスケジュール設定されて良く、したがってコンテナインスタンス１１４の基礎となるオペレーティングシステムは極めてベーシックなものであって良い。あるいは、コンテナ１１８は、クラスタ１１６のコンテナインスタンス１１４内にインストールされたスケジューラによって稼働するようにスケジュール設定される場合もある。
【００２３】
他のサービス１２２は、図１５に関連して記載したコンピューティングリソースサービスプロバイダ１５０２のサービス１５０８〜２０及び１５２４などのサービスであって良い。同様に、他のリソース１２０は、ブロック−レベルデータ記憶サービスの記憶ボリュームなどの仮想化されたインスタンス間で共有することができるリソースを含む場合がある。
【００２４】
図２は、本開示の一実施形態の一例のコンテナサービス２００を示す。図２に示されるように、環境２００は、１つまたは複数のコンテナインスタンス２１８内の１つまたは複数のコンテナを管理するフロント−エンドサービス２０４を介して通信するコンピューティングリソースサービスプロバイダの顧客２０２を含んで良い。指摘したように、コンテナサービス２００によって提供される、またはコンテナサービス２００に接続されるコンテナカプセル化システムによって、顧客が、コンテナをサポートするオペレーティングシステムのコンテナ内で１つまたは複数のアプリケーションを構成することを可能にすることができる。コンテナ内で稼働中のプロセス及びリソースは、親コンテナインスタンスの他のプロセスならびに同一のホストシステムの他のコンテナ内で稼働中のプロセス及びリソースから隔離させることができる。顧客は、コンテナに割り当てられるメモリの量及び処理能力を特定することができる。ベースコンテナならびにその中のアプリケーション及びデータはその後、コンテナインスタンスのオペレーティングシステム上で稼働するためにプログラムに必要とされる１つまたは複数のプログラム、データ及び任意のシステムの依存関係（例えばライブラリ、ファイルなど）を含めた１つのイメージとしてパッケージされて良い。一部の例では、「イメージ」は、そのイメージが生じたときのベースコンテナの特定の状態の完全なコピーを指す場合もある。その後このイメージを利用して１つまたは複数の同一のコンテナを起動することができ、このコンテナの各々は特定された量のリソースが割り当てられ、互いから隔離されて良い。コンテナは、同一または異なる物理マシン上で起動させることができ、各々のコンテナは、ベースコンテナとまさに同一の方法で稼働することを予想することができる。
【００２５】
コンテナインスタンス２１８の各々は、一対のエージェント、すなわちコンテナエージェント２２２と、テレメトリエージェント２２４とを含むように構成されて良く、これらによって、コンテナを管理することを可能にし、クラスタの状態の情報を提供することができ、かつロギング及びテレメトリデータ収集を可能にすることができる。コンテナサービス２００は、テンプレートサービス２０６、１つまたは複数のスケジューラ２０８、ルータサービス２１０及びテレメトリサービス２１２を含めた一揃いのサービスで構成されて良い。コンテナサービス２００は、マルチテナントサービス（すなわち、コンテナサービス２００のリソースが同時に複数の顧客に奉仕しても良い）として構成され得るため、及びコンテナサービス２００によって提供されるサービスが、コンテナインスタンス２１８の外に存在し、そこから隔てられているため、顧客２０２は、これらのサービスによって与えられる機能を実現するために、それぞれのコンテナインスタンス２１８内に個別のソフトウェアアプリケータをインストールする必要がない。顧客２０２は、フロント−エンドサービス２０４を介してウェブサービスアプリケータプログラミングインターフェースファンクションコールを作成することによって、これらのサービスによって提供される機能を利用することができ、このフロント−エンドサービスは、顧客２０２からリクエストを受け取り、そのリクエストを適切なコンテナマネージャバックエンドサービス２１４などの適切なサービスに転送するように構成されて良い。
【００２６】
指摘したように、顧客はフロント−エンドサービス２０４を介して１つまたは複数のクラスタを起動し、その後各々のクラスタ内でのユーザとアプリケーションの隔離を管理することができる。例えば顧客は、「インスタンス１−１０」は第１のクラスタを有するべきであり、「インスタンス１１−１５」は第２のクラスタを有するべきであると特定することができる。その後、顧客がコンテナに対する起動リクエストを提示する際、顧客は、第１のクラスタにおけるコンテナを起動すべきか第２のクラスタにおけるコンテナを起動すべきかを特定することができる。
【００２７】
各々のクラスタは、クラスタを互いから一意に区別するクラスタ識別子（ＩＤ）を有することができる。クラスタは、そのそれぞれのクラスタＩＤを参照することによって特定することができる。顧客は、異なるタイプのタスクのために異なるクラスタを利用することができる。例えば顧客は、サービスの起動のために第１のクラスタを利用し、バッチジョブを実行するために第２のクラスタを利用することができる。第１のクラスタ内のインスタンスは、サーバを稼働するために最適化されており、第２のサーバのインスタンスは、バッチジョブなどの短期の非常駐ジョブを提示するために最適化されて良い。
【００２８】
クラスタに関して利用可能なアプリケーションプログラミングインターフェースファンクションコールには、ＣｒｅａｔｅＣｌｕｓｔｅｒ（クラスタ形成）、ＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒ（クラスタ記述）、ＬｉｓｔＣｌｕｓｔｅｒｓ（クラスタリスト）及びＤｅｌｅｔｅＣｌｕｓｔｅｒ（クラスタ削除）が含まれて良い。ＣｒｅａｔｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールによって、クラスタを形成することができる。場合によっては、クラスタが形成された後、フロントエンドサービス２０４が、新たに形成されたクラスタのクラスタＩＤを顧客に提供することができる。このクラスタＩＤによって顧客がコンテナインスタンスをクラスタに登録することが可能になり、例えば顧客は、クラスタＩＤをパラメータとしてＲｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅ(登録コンテナインスタンス)アプリケーションプログラミングインターフェースコールに渡すことによって、コンテナインスタンスをクラスタに登録させることができる。加えてまたは代替として、顧客は、ＣｒｅａｔｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールに対するパラメータとして顧客に属する１つまたは複数の既存のコンテナインスタンスを特定することで、クラスタの形成と同時に１つまたは複数の既存のコンテナインスタンスをクラスタに登録させることができる。同様に、場合によっては、顧客がＣｒｅａｔｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールのパラメータにおいて、クラスタを形成する際、形成されかつクラスタに登録されるべきコンテナインスタンスの量を特定する場合もある。クラスタ形成アプリケーションプログラミングインターフェースファンクションコールは、図７にさらに示される。
【００２９】
ひとたびクラスタが形成され稼働すると、クラスタに関する情報をリクエストするために、ＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールが顧客２０２またはアプリケーションによって使用されて良い。ＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールに応答して返される情報には、どのアプリケーションがクラスタ内で稼働しているかのリスト、クラスタが利用可能なリソース及びそのタイプが含まれて良い。ＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールから返される情報をその後ＳｔａｒｔＴａｓｋ(タスク開始)アプリケーションプログラミングインターフェースコールのためのパラメータとして使用して、記述されるクラスタ内でタスクを起動することができる。
【００３０】
スケジューラ２０８は、記述されるクラスタ内でタスクを起動するように構成されて良い。あるいはスケジューラ２０８ではなく、顧客２０８がその独自のスケジューラを実装し、スケジュール設定されたタスクに関する配置の決定を行うために顧客のスケジューラの配置ロジックに関連してＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールによって取り出された情報を利用する場合もある。顧客は彼／彼女の独自のスケジューラによって使用されるべき配置アルゴリズムを設計及び／またはアップロードすることができる、あるいはコンピューティングリソースサービスプロバイダによって顧客に提供される可能な配置アルゴリズムのリストから選択する場合もある。コンテナサービス２００は、利用可能なリソースに基づいて、顧客のスケジューラによってなされた配置決定を受け入れるか拒絶するかを決定することができる。
【００３１】
スケジューラ２０８は、一揃いのタスクをクラスタと共に稼働するように最適にスケジュール設定するように構成されたマルチテナントサービスであり得る。この方法では、顧客２０２は、タスクを実行すべき場所を選択する必要がない。スケジューラ２０８の配置スキームは、クラスタにわたって均等にタスクを分散するように構成されて良く（例えばラウンドロビン式、確率的な分散スキームなど）、利用可能なリソースの最も効率的な使用を行うためにクラスタによる現在のまたは予測されるリソース消費に基づいてタスクを分散するように構成される場合もある。スケジューラ２０８は、コンテナマネージャバックエンドサービス２１４を介してクラスタマネージャメタデータ及びクラスタ内のコンテナインスタンス２１８のアベイラビリティに関する他の情報を取得することができる。クラスタマネージャメタデータ及び他の情報は、このクラスタに割り当てられたコンテナインスタンス２１８の現在の状態、コンテナインスタンス内の利用可能なリソース、コンテナインスタンス内で稼働中のコンテナに関するデータ、及び配置決定を行うためにスケジューラ２０８が使用することができる他の情報を含むことができる。ＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールによって、クラスタマネージャバックエンドサービスに特定されたクラスタに関するクラスタメタデータを提供させることができる。
【００３２】
スケジューラ２０８は、セキュリティルール、セキュリティグループ及び／またはセキュリティロールに少なくともある程度基づいて、アフィニティを有するタスクと、アンチアフィニティを有するタスクにタスクを分散する。例えば特定のセキュリティグループ内のタスクは、可能性がある、または実行可能であるときはいつでも同一のコンテナインスタンス上で起動されるように構成されて良い、あるいは逆に別々のコンテナインスタンス内で起動されるようにスケジュール設定される場合もある。別の例として、タスクが特定のセキュリティグループに割り当てられる、または特定のセキュリティロールを有するように指定され、割り当てられた特定のセキュリティグループまたは指定されたセキュリティロールに基づいてタスクが特有のクラスタまたは特有のクラスタインスタンスにおいて稼働するように割り当てられる、あるいは他のタスクに対してリソースに対する優先権を有する場合もある。アフィニティ／アンチアフィニティに基づいたタスクの分散は、コンテナ、コンテナインスタンス及びタスクにおける関係性を示す「タグ」の割り当てを含む。少なくともある程度アフィニティに基づいた分散の一例として、２つのコンテナインスタンスが、「一般用」としてタグ付けされ、１つのコンテナインスタンスが「データベース」としてタグ付けされる場合がある。タスク定義において、タスクは、そのタスクが、一般用としてタグ付けられたコンテナインスタンスのうちの１つ（または複数）において起動されるアフィニティを与える「一般用」の起動制約によって特定することができる。アンチアフィニティのタスク定義の一例として、特定のコンテナインスタンスが、「安全な−クレジット−カード−処理」としてタグ付けされ、特定の他のコンテナインスタンスが「ｈｔｔｐ−ウェブサイト」としてタグ付けされる場合がある。ｈｔｔｐ−ウェブサイトコンテナは、信頼できない外部エンティティからの取引を供給している可能性があるため、そのようなコンテナをクレジットカード処理タスクと共有しないことが望ましい場合がある。よってタスク定義は、「ｈｔｔｐ−ウェブサイト」がクレジットカード処理タスクに対してアンチアフィニティであることで、クレジットカード処理コンテナが、「ｈｔｔｐ−ウェブサイト」とタグ付けされたコンテナインスタンスにおいて起動されないことを保証することを示すように構成される。この例において、スケジューラ２０８は、タスク定義において任意のタグをパースし、それを使用して、タグに関連する判断基準を満たさないコンテナインスタンスを取り除くように構成することができる。次に、スケジューラ２０８は、取り除かれたセットからそのコンテナをホストするコンテナインスタンスを選択することができる。
【００３３】
いくつかの実施形態において、スケジューラ２０８は、コンテナエージェント２２２と直接通信することでタスクを起動する場合がある。他の実施形態では、スケジューラ２０８は、エージェント通信サービス２２０と通信する場合もあり、このエージェント通信サービス２２０がその後、その通信をコンテナエージェント２２２へと中継することができる。さらに他の実施形態では、スケジューラ２０８は、コンテナマネージャバックエンドサービス２１４に配置決定を伝えることができ、このコンテナマネージャバックエンドサービス２１４が通信をコンテナエージェント２２２またはエージェント通信サービス２２０に直接中継することができる。指摘したようにいくつかの実施形態において、顧客２０２は代替として、スケジューラ２０８を利用するのではなく、タスク管理のためにその独自のスケジューラを実装する場合もある
【００３４】
場合によっては、コンテナは、リソースを求めて競り合うように構成され、対立した場合には、特定のセキュリティロールに対応付けられたコンテナが他のコンテナに対して優先権を有することができる。全ての場合において、配置スキームはコンテナインスタンスにおける利用可能なリソース及びコンテナのリソース要件を考慮に入れることができることに留意されたい。例えば、特定のタスクがコンテナインスタンスにおいて利用可能なリソースを超えるリソース要件を有する場合、コンテナインスタンスが特定のタスクのために選択されない場合もある。しかしながら一部の実施態様では、コンテナインスタンスはなおも選択され得るが、特定のタスクの稼働をサポートするのに十分なリソースがコンテナインスタンス内で利用可能になるまで特定のタスクの起動を遅らせる場合もある。
【００３５】
コンテナはまた、コンピューティングリソースサービスプロバイダによって提供される他のリソースを利用するように構成される場合もある。例えば各々のコンテナは、仮想ネットワークインターフェースを有するように構成されることでコンテナが仮想ネットワークを介して他のコンテナ及び／またはコンピューティングリソースサービスプロバイダの他のリソースと通信することを可能にすることができる。同様に、セキュリティ証明書がコンテナ毎のベースで割り当てられることで、コンテナは、コンピューティングリソースサービスプロバイダによって提供される他のリソースにアクセスするためにその独自のセキュリティ証明書を有することができる。加えてコンテナサービスは、コンテナに向けられた仕事量をロードバランスするためにロードバランスサービスと一体化されるように構成される場合もある。例えば顧客は、顧客のコンテナ及び／または顧客のインスタンスの仮想ネットワークに対応付けられたインターネットプロトコルアドレスのリストをロードバランスサービスのロードバランサーに提示し、インターネットプロトコルアドレス間の仕事量のバランスを取ることができる。加えて、コンテナサービスは、自動スケーリングサービスと一体化されることでコンテナによって利用されるリソースを必要に応じて動的に調節することが可能になる場合もある。
【００３６】
例えば顧客は、単一のクラスタに対して複数のスケジューラを実装する場合があり、複数のスケジューラが、クラスタ内のどのインスタンスに関してコンテナを起動するかを決定する。複数のスケジューラが、例えばどこでコンテナを起動するかを決定するためにオプティミスティック同時実行制御法を使用することによって配置スキームに従って互いと競合する場合がある。例えばオプティミスティック同時実行を使用する各々のスケジューラは、一般にコンテナは互いに干渉することがなく、１つのコンテナが、別のコンテナが読み取った修正データを有するような状況において、読み取り用のコンテナが再始動し、修正データを再度読み取ることができる。
【００３７】
場合によっては、、スケジューラは、利用可能なリソースを最大限にするように構成される場合がある。例えばクラスタは長期稼働サービスを稼働するために主に利用されて良く、１つまたは複数の短い寿命のバッチジョブを稼働するための要望が生じている。そのような一例において、利用可能なリソースを最大限にするように構成されたスケジューラは、バッチジョブのために最も適した場所として、バッチジョブをサポートするためにまさに十分な処理パワーを備えたインスタンスを捜すことができる。あるいはスケジューラは、最も少ないその処理パワーを利用するインスタンスを捜し、このインスタンスに対してバッチジョブをスケジュール設定する場合もある。
【００３８】
一部の実施態様において、メタ−スケジューラが、１つまたは複数のスケジューラの頂点において階層的に稼働するように構成される場合もあり、メタ−スケジューラは、どこでバッチジョブを起動するかを決定することができる。例えば一実施態様において、２種類のタスク、すなわち短期間のバッチジョブタスクと、長期間のサービスがある場合がある。２種類のタスクは、異なる配置ルールを有する可能性があり、例えば１つまたは複数の特定されたクラスタ内の利用可能なコンテナインスタンスの間で均等にサービスタスクを分散するのが望ましいのに対して、バッチジョブタスクは、空間処理サイクルを有する任意の利用可能なコンテナインスタンスにおいて稼働するように構成される場合がある。場合によっては、各々のセットの配置ルールに対して異なるスケジューラが割り当てられる場合もある。しかしながらそのような配置ルールが互いに競合する、あるいは互いに矛盾する場合、または適切なスケジューラを決定し、特定のタスクに割り当てる必要があるケースでは、メタ−スケジューラは、どの競合するタスクを優先するべきかを決定し、スケジューラ間で情報を同期させる、またはタスクを配置するのに適切なスケジューラを決定することができる。
【００３９】
クラスタは、フロントエンドサービス２０４に対して行われるアプリケーションプログラミングインターフェースコールを介して管理されて良い。例えばアプリケーションプログラミングインターフェースコールは、どのクラスタが利用可能であるか、及びどのコンテナがどのクラスタで稼働中であり得るかのリストをリクエストするために行うことができる。ＬｉｓｔＣｌｕｓｔｅｒｓアプリケーションプログラミングインターフェースコールは、顧客がアクセス権を有する全てのクラスタをリストにすることができる。ＤｅｌｅｔｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールは、指定されたクラスタを削除することができ、図１４を参照してさらに記載される。
【００４０】
コンテナインスタンスのために利用可能なアプリケーションプログラミングインターフェースファンクションコールは、ＲｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅ（コンテナインスタンス登録）、ＤｅｓｃｒｉｂｅＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅ（コンテナインスタンス記述）及びＤｅｒｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅ（コンテナインスタンスの登録取り消し）を含むことができる。ＲｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅアプリケーションプログラミングインターフェースコールは、コンテナインスタンスがひとたびインスタン化されると、そのコンテナインスタンスをクラスタマネージャに登録するためにコンテナインスタンスのコンテナエージェントによって使用されて良い。一部の実施態様において、クラスタマネージャは、クラスタに関するメタデータで構成される（例えばコンテナインスタンスのグルーピング）。他の実施態様において、クラスタマネージャは、顧客によってインストールされた、またはコンピューティングリソースサービスプロバイダによって利用可能になった構成管理ソフトウェアを含む場合がある。スケジューラはその後、どのコンテナインスタンス内でコンテナを起動させるべきかを決定する際、クラスタマネージャに登録されたコンテナインスタンス２１８を参照することができる。ＲｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅは図８を参照してさらに記載される。ＤｅｓｃｒｉｂｅＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅアプリケーションプログラミングインターフェースコールは、コンテナインスタンスに対して利用可能なリソース及びコンテナインスタンス内で稼働中のタスクを含めた、コンテナインスタンスに関する情報を返すことができる。
【００４１】
コンテナは、クラスタ内に十分なリソースを備えたいかなる利用可能なコンテナインスタンスにおいても稼働され得るため、十分なコンテナインスタンスが利用可能であるならば、必要に応じてコンテナをクラスタ内でスケールアップまたはスケールダウンすることができる。クラスタ内のコンテナインスタンスの数が不十分である場合、追加のコンテナインスタンスを形成し、クラスタマネージャを通してクラスタに記録することができる。クラスタ内に過剰なコンテナインスタンスがある場合、クラスタマネージャを介して一部のコンテナインスタンスがクラスタから登録を取り消される場合もある。 ＤｅｒｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅアプリケーションプログラミングインターフェースコールを利用して、指定されたクラスタから、ＲｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅアプリケーションプログラミングインターフェースコールを利用して登録されたコンテナインスタンスの登録を取り消すことができる。ＤｅｒｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅは図１３に関連してさらに記載される。
【００４２】
タスク定義に関して利用可能なアプリケーションプログラミングインターフェースファンクションコールには、ＲｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎ（タスク定義登録）、ＤｅｓｃｒｉｂｅＴａｓｋＤｅｆｉｎｉｔｉｏｎ（タスク定義記述）、ＬｉｓｔＴａｓｋＤｅｆｉｎｉｔｉｏｎｓ（タスク定義リスト）及びＤｅｒｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎ（タスク定義登録取り消し）が含まれて良い。ＲｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎアプリケーションプログラミングインターフェースコールは、タスクを起動するためにタスク定義を登録するのに使用されて良く、これは図９に関連してさらに記載される。ＤｅｓｃｒｉｂｅＴａｓｋＤｅｆｉｎｉｔｉｏｎアプリケーションプログラミングインターフェースコールは、タスク定義ファイルの内容を含めたタスク定義に関する情報を返すのに使用されて良い。ＬｉｓｔＴａｓｋＤｅｆｉｎｉｔｉｏｎｓアプリケーションプログラミングインターフェースコールは、顧客にとって利用可能なタスク定義のリストを返すことができる、または特定のクラスタＩＤまたはコンテナインスタンスＩＤに対応付けられたタスク定義のリストを返すことができる。ＤｅｒｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎアプリケーションプログラミングインターフェースコールは、ＲｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎアプリケーションプログラミングインターフェースコールを利用して登録されたタスク定義の登録を取り消すことができ、これは図１２に関連してさらに記載される。
【００４３】
タスクに関するアプリケーションプログラミングインターフェースファンクションコールには、ＳｔａｒｔＴａｓｋ（タスク開始）、ＤｅｓｃｒｉｂｅＴａｓｋ（タスク記述）、ＬｉｓｔＴａｓｋｓ（タスクリスト）及びＳｔｏｐＴａｓｋ（タスク停止）が含まれて良い。顧客はタスク定義ファイル（またはそのそれぞれの識別子）をパラメータとしてＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースコールに渡すことができ、コンテナインスタンスまたはクラスタをさらに特定することでコンテナインスタンスまたはクラスタ内の１つまたは複数のタスクを起動することができる。例えば顧客は、ＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールに応答してクラスタの１つまたは複数のコンテナインスタンスＩＤを取得することができ、１つまたは複数の識別されたコンテナインスタンス上でタスク定義ファイルを実行するように指定することができる。顧客がタスクを直接稼働する場合、それらのタスクは、ＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースを呼び出し、中で起動するコンテナインスタンスを特定することができる。あるいはスケジューラ２０８がＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースを利用してタスクを起動する場合もある。加えて顧客２０２が、ＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースを利用してタスクを起動するようにその独自のスケジューラを構成する場合もある。
【００４４】
スケジューラ２０８または顧客がインストールしたスケジューラが、タスク定義ファイル内のタスクを開始するように構成され、クラスタ内でどこにタスクを配置すべきかを決定する場合もある。例えばスケジューラ２０８は、クラスタのコンテナインスタンスの間で均等にタスクを分散する、何らかのカイ二乗分布においてタスクを分散するように決定する場合があり、あるいは何らかの他の発見的方法または一揃いの制約に従ってクラスタのコンテナインスタンスの間でタスクを分散する場合もある。例えば複数のタスクを概説するタスク定義ファイルを渡すことによってＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースコールに渡されたパラメータは、複数のタスクが開始されるべきであることを特定することができる。一部の実施態様において、顧客２０２は、単一のクラスタまたはコンテナインスタンスを特定するのではなく、クラスタまたはコンテナインスタンスのリストを特定する場合があり、スケジューラ２０８は、どのコンテナインスタンスにおいてタスクを実行するかを決定することができる。ＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースコールは、図１０を参照してさらに記載される。
【００４５】
ＤｅｓｃｒｉｂｅＴａｓｋアプリケーションプログラミングインターフェースコールは、割り当てられたリソース、寿命及び稼働状況に関する情報を含め、コンテナエージェント２２２から稼働中のタスクに関する情報を返すのに使用されて良い。ＬｉｓｔＴａｓｋｓアプリケーションプログラミングインターフェースコールは、全ての稼働中のタスクのリストまたは特定されたクラスタまたはコンテナインスタンスにおいて稼働中の全てのタスクのリストを返すのに使用されて良い。ＳｔｏｐＴａｓｋアプリケーションプログラミングインターフェースコールは、ＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースコールを利用して開始された特定される稼働中のタスクを停止するためにコンテナエージェント２２２に命令するのに使用されて良い。ＳｔｏｐＴａｓｋアプリケーションプログラミングインターフェースコールは、図１１に関連してさらに記載される。
【００４６】
コンテナサービス２００は、図１５の認証システム１５１８などのコンピューティングリソースサービスプロバイダの認証システムと相互作用することで、フロントエンドサービス２０４に対してなされたアプリケーションプログラミングインターフェースコールを認証することができる。一部の実施形態において、別々のセキュリティグループ及びセキュリティロールが、単一のホスト上の異なるコンテナに対して構成され、これらの異なるコンテナに割り当てられる場合もある。コンテナサービス２００はまた、仮想プライベートクラウド内のコンテナまたはコンテナインスタンス２１８を起動するように構成される場合もある。
【００４７】
一部の実施形態において、コンテナは、例えばブロック−レベルデータ記憶サービス及び／またはオン−デマンドデータ記憶サービスなどのコンピューティングリソースサービスプロバイダの他のサービスにアタッチするように構成される場合もある。場合によっては、コンテナは、アタッチしたサービスを他のコンテナと共有するように構成される場合もある。一例として、顧客のコンテナインスタンスは、コンピューティングリソースサービスプロバイダのブロック−レベル記憶サービスのブロック−レベル記憶ボリュームに対してマップされる場合があり、そのインスタンス内のコンテナは、ブロック−レベル記憶ボリュームから読み出す及び／またはそこに書き出すことが可能であるように各々構成されて良い。一部の例では、１つのクラスタまたは複数のクラスタ内の全てのコンテナインスタンスが、その稼働中のコンテナとブロック−レベル記憶ボリュームを共有することが可能になり得るように、ブロック−レベル記憶ボリュームは、例えば１つのクラスタまたは複数のクラスタ内の全てのコンテナインスタンスなど複数のコンテナインスタンス間で共有される場合もある。別の例として、コンテナインスタンスは、２０の異なるブロック−レベル記憶ボリュームに対してマップされる場合もあるが、コンテナ用に特定されるのは２つのブロック−レベル記憶ボリュームのみである。
【００４８】
テンプレートサービス２０６は、顧客２０２がそのコンテナのためにタスク定義を定義することを可能にするように構成されて良い。一部の例では「タスク定義」は、例えばコンテナの数、そのタイプ、その構成要素、他のコンテナに対するその関係性、関連するインスタンスを記述する情報及び他のメタデータなどの、コンテナの１つのグループを定義し得るスクリプトまたは一揃いのメタデータを指す場合がある。タスク定義はまた、連係して起動されるべきコンテナのグループを特定する場合もある。テンプレートサービス２０６は、顧客２０２からタスク定義を受け取り、タスク定義をデータベース２１６内に記憶し、顧客２０２がそのタスク定義を形成する、見る、更新する、消去する及びそうでなければ管理することを可能にする。
【００４９】
テンプレートサービス２０６は、タスク定義を定義するための能力を顧客２０２に与えることができる。テンプレートサービス２０６は、能力を有する顧客が、タスク定義ファイルをアップロードすることによってタスク定義を提供することを可能にする、または顧客が種々のオプションから選択する及び／もしくは変更デフォルト設定を変更することでタスク定義ファイルを動的に形成することを可能にすることによってタスク定義を提供する場合もある。テンプレートサービス２０６は、顧客がタスク定義を登録することを可能にすることができる。テンプレートサービス２０６はまた、現在登録されているタスク定義を編集するために編集インターフェースを提供する場合もある。テンプレートサービス２０６は、コンテナマネージャバックエンドサービス２１４に対してタスク定義を提供してデータベース２１６内に記憶させることによって、少なくともある程度タスク定義を登録することができる。
【００５０】
一部の例では、「フリート」が、本開示のコンテナインスタンスまたはコンテナサービス２００の他のアプリケーションなどのインスタンスを稼働中の一セットのコンピュータシステム（仮想または物理的）を指す場合がある。フリートはサブ−フリートにさらに分割されてよく、各々のサブ−フリートは、そのサブ−フリートに専用のコンテナマネージャバックエンドサービス及びエージェント通信サービスによってサポートされて良い。エージェント通信サービス２２０は、そのサブ−フリート内のコンテナインスタンス上に稼働するコンテナエージェント２２２及びテレメトリエージェント２２４と通信するように構成されて良い。
【００５１】
コンテナマネージャバックエンドサービス２１４は、このバックエンド上のサブ−フリートに対して、本開示において記載されるクラスタ管理ソフトウェアまたはクラスタマネージャメタデータなど他の管理サービス及びリソースを提供するように構成されて良い。コンテナマネージャバックエンドサービスは、テンプレートサービス２０６からタスク定義を受け取り、タスク定義をデータベース２１６内に記憶し、コンテナインスタンス２１８またはエージェント通信サービス２２０からクラスタマネージャメタデータを受け取り、リクエストがあり次第スケジューラ２０８または顧客がインストールしたスケジューラにタスク定義情報及びクラスタマネージャメタデータを提供するように構成されて良い。コンテナマネージャバックエンドサービスは、ＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールに応答して、例えばクラスタマネージャメタデータなど、特定されたクラスタに関する情報を提供するように構成されて良い。
【００５２】
エージェント通信サービス２２０及びコンテナマネージャバックエンド２１４は、サブ−フリート内の別々のコンピュータシステム上に実装されて良く、サブ−フリート内の別々の仮想マシンインスタンスは、サブ−フリート内の同一のコンピュータシステム及び／または仮想マシンインスタンスを共有することができる、またはそれとは別のコンピュータシステム上で稼働するが、そのそれぞれのサブ−フリートと通信する場合もある。１つのサブ−フリートにつき複数のコンテナインスタンス２１８が存在する場合もある。場合によっては、、各々のサブ−フリートは単一のクラスタを表す場合もある。別の場合では、クラスタは、複数のサブ−フリートにまたがる場合もある。さらに別の場合では、各々のサブ−フリートは、２つ以上のクラスタをホストする場合もある。ルータサービス２１０は、フロント−エンドサービス２０４からのリクエストを適切なサブ−フリートに送るように構成されて良い。一部の実施形態において、ルータサービス２１０は、単一のサブ−フリートにリクエストを送ることができる。他の実施形態ではルータサービスが複数のサブ−フリート間でリクエストを送る場合もある。
【００５３】
テレメトリサービス２１２は、制御グループメトリック（例えばコンテナ内で稼働中のプロセスに関する情報）及びコンテナログを集約し、集約されたメトリックとログをリソース監視サービスに提供することで、顧客２０２が、そのそれぞれのコンテナインスタンスのプロセッサ、記憶装置及びネットワーク利用などのリソースの利用を監視することができるように構成されて良い。制御グループメトリックには、コンテナのプロセスによって使用されるメモリの量、プロセスが発生させたページフォールトの回数、コンテナのプロセスによる中央処理装置の利用、コンテナのプロセスに代わって中央処理装置がシステムコールを実行する時間、コンテナのプロセスによる読み取り及び書き込みの回数、ならびにコンテナのプロセスに関してキューに入れられた入／出力操作の回数などの情報が含まれる。
【００５４】
コンテナマネージャバックエンドサービス２１４は、フロント−エンドサービス２０４を介して顧客２０２からそれぞれのコンテナに関する配置リクエストを受け取るように構成されて良く、リクエストされたリソースがコンテナに対して利用可能であることを保証することができる。コンテナマネージャバックエンドサービス２１４はその後、所望されるコンテナの状態をデータベース２１６に書き出すことができる。一部の実施態様では、コンテナマネージャバックエンドサービスは、データベース２１６内に記憶され得るクラスタマネージャメタデータに対する責任を担っており、これは、リクエストされたとき、スケジューラ２０８または顧客がインストールしたスケジューラに提供されて良い。加えて、コンテナマネージャバックエンドサービスは、ライフサイクルイベント及びハートビート（例えば通常動作を示すためにコンテナエージェント２２２によって送信される周期的な信号）に関する情報など個々のコンテナエージェント２２２から規則的に情報を受け取ることができる。場合によっては、、このような情報は、フロント−エンドサービス２０４を介して適切な構成要素またはエンティティに伝達される場合もある。一部の実施態様では、コンテナエージェントは、エージェント通信サービス２２０を介してこのような情報を伝達し、エージェント通信サービス２２０がその後、この情報をコンテナマネージャバックエンドサービス２１４に直接伝達する場合もある、または他の実施態様では、情報をデータベース２１６に記憶し、それに対してコンテナマネージャバックエンドサービス２１４が情報を読み取ることができる。
【００５５】
データベース２１６は、コンテナサービス２００の分散コンピューティングシステム内に配置されたデータ記憶装置であって良い、または例えばリレーショナルデータサービスなどの、コンピューティングリソースサービスプロバイダの種々のサービスのデータ記憶装置である場合もある。一部の実施形態において、データベース２１６は、トランザクションログを共有する一揃いの分散されたデータベースである場合もある。エージェント通信サービス２２０は、クラスタ内の全てのエージェントの状況を追跡するように構成されて良く、そのそれぞれのインスタンスに対してランコマンド及び状態遷移をプッシュすることができる。一部の実施形態において、コンテナサービスの他の構成要素によるコンテナ及びコンテナインスタンス２１８との通信は、エージェント通信サービス２２０を介して行われる。各々のフリートは、フリートのコンテナエージェント２２２間でメッセージを取り次ぐ少なくとも１つのエージェント通信サービスを有することができる。
【００５６】
コンテナエージェント２２２は、顧客２０２が所有するインスタンスにおいて稼働するように構成されたソフトウェアアプリケーションであって良く、そのそれぞれのコンテナインスタンス２１８と、コンテナマネージャバックエンドサービス２１４などの他のサービス及びエンティティとの間のインターフェースとして機能することができる。例えばコンテナエージェント２２２は、コンテナへのまたはコンテナからの全ての通信がコンテナエージェントを通過するように、そのそれぞれのコンテナインスタンス２１８の稼働中のタスクと、他のエンティティ及びサービスとの間の仲介手段として機能することができる。この方法において、コンテナエージェントは、コンテナサービス２００によって稼働するコンテナと、特定のコンテナカプセル化システムの間でコマンドを解読し翻訳するように構成されて良い。これにより、タスクまたはタスク定義に対して更新を行う必要なしに特定のコンテナカプセル化システムに変更を行うことが可能になり、すなわち特定のカプセル化システムに対する変更を反映するにはコンテナエージェント２２２のみを更新させる必要がある。
【００５７】
よってコンテナインスタンス２１８の各々は、その中で稼働し、それぞれのコンテナマネージャバックエンドサービスと通信するそれぞれのコンテナエージェントを有することができる。コンテナエージェントはそれ自体が、そのそれぞれのコンテナインスタンスを監視するように構成されたコンテナであって良く、コンテナを起動し、コンテナを追跡し、かつクラスタ状態を監視するのに使用できる情報をシステムに提供することができる。コンテナエージェントはまた、そのそれぞれのコンテナインスタンスを登録する、及び登録を取り消す、そのそれぞれのコンテナインスタンス内でタスクを開始する及び停止する機能を果たすこともできる。コンテナエージェントはまた、そのそれぞれのコンテナインスタンスを記述するためのリクエスト、そのそれぞれのコンテナインスタンスにおいて稼働中のタスクをリストにするためのリクエスト、及びそのそれぞれのコンテナインスタンスにおいて稼働中のタスクを記述するためのリクエストに応じるように構成されて良い。コンテナエージェント２２２は、それぞれのコンテナインスタンス２１８内のコンテナの健全さを監視するように構成されて良く（例えばコンテナインスタンスが動作中であることを合図で示すハートビートを報告する、コンテナの寿命を報告する、及びコンテナの状況及びコンテナのエラーの発生を報告する）、特定のイベントの発生に基づいて行動を行うようにさらに構成されて良い。例えばコンテナがエラーに遭遇し、動作を止めたことをコンテナエージェントが検知した場合、コンテナエージェントは、自動的に新たなコンテナが生成されて正常に動作しないコンテナに置き換わるようにすることができる。他の実施形態においてスケジューラ２０８は、コンテナエージェント２２２によってそれに対して報告されたイベントに応じて特定の行動を採ることができる。上記の例では、新たなコンテナを生成させ正常に動作しないコンテナに置き換わるようにするのはスケジューラ２０８である場合もある。コンテナの所有者である顧客は、スケジューラ２０８及び／またはコンテナエージェントに対して状況、イベント及び行動を特定することができる。例えば顧客は、例えばエラーまたは停電などが原因で顧客のコンテナが動作を止めた場合、スケジューラ２０８またはコンテナエージェントが、動作しないコンテナのための置き換えコンテナを生成しないように指定する場合もある。代わりに顧客は、スケジューラ２０８またはコンテナエージェントが問題が発生したことを顧客に通知する（例えば状況指示器を変化させる、ｅメールを送るなどによって）ように指定する場合もある。
【００５８】
コンテナエージェント２２２及び／またはテレメトリエージェント２２４は、そのそれぞれのコンテナインスタンス２１８がインスタンス化される際、自動的に起動するように構成されて良い。新たなコンテナカプセル化システムがコンテナサービス２００によって実装された場合、コンテナインスタンス２１８及びコンテナに対して必要な変更は、新たなコンテナカプセル化システムに適合するように構成された新たなコンテナエージェントが形成され、コンテナエージェント２２２がこの新たなコンテナエージェントと交換されることのみであり得る。そのような場合では、顧客２０２は、コンテナサービス２００によって同一のアプリケーションプログラミングインターフェースを利用することが可能であるべきであり、新たなコンテナエージェントは、顧客２０２が新たなカプセル化システムに変更されたことに気づくことなく、同一のアプリケーションプログラミングインターフェースをサポートするように構成されるべきである。
【００５９】
コンテナエージェント２２２は、コンテナカプセル化システムに対して情報を伝達するようにコンテナカプセル化システムによってポーリングされて良い。コンテナエージェント２２２は、コンテナインスタンス２１８を登録するまたはその登録を取り消し、コンテナマネージャバックエンドサービス２１４から命令を受け取り、テレメトリエージェント２２４が始動され稼働中であることを保証することができる。コンテナエージェント２２２はまた、コンテナインスタンス２１８内のコンテナを更新し、イベントストリームを介してコンテナインスタンス２１８内で稼働中のコンテナの状態を監視することもできる。
【００６０】
テレメトリエージェント２２４は、制御グループメトリック及びコンテナカプセル化システムログなどのテレメトリデータを収集し、そのようなテレメトリデータをテレメトリサービス２１２に提供するように構成されて良い。テレメトリサービス２１２は、コンピューティングリソースサービスプロバイダのリソース監視サービスのためにテレメトリエージェント２２４から受信したデータを集約するように構成されて良く、このコンピューティングリソースサービスプロバイダは、集約されたデータに基づいて警告または何らかの他の行動をトリガーするように構成されて良い。例えばテレメトリエージェント２２４がコンテナのエラー状態を示すログをテレメトリサービス２１２に伝達した場合、テレメトリサービス２１２は、リソース監視サービスに対してエラー状況を提供することができ、このリソース監視サービスは、コンテナにエラーがあったことを顧客に通知する警告をトリガーすることによって対応する。別の例として、リソース監視サービスは、テレメトリサービス２１２によって提供されたメトリック（例えばコンテナのプロセスによる中央処理装置の利用）の１つが閾値を超えた場合、警告をトリガーする場合もある。一部の実施態様では、テレメトリサービス２１２は、警報状況及び閾値を特定するように構成可能である場合もあることに留意されたい。アラームをトリガする例には、コンテナの所有者の顧客に対してテキストメッセージを提供する、コンテナの所有者の顧客にｅメールを送る、及び／または視覚的な指示（赤いアイコン、ポップアップウィンドウなど）をコンテナの状態を表示するインターフェースに表示するなどが含まれる。
【００６１】
コンテナサービス２００はまた、データボリュームをコンテナにリンクすることを可能にすることもできる。そのようなデータボリュームは、コンテナ内の指定されたディレクトリであって良く、コンテナインスタンスのデフォルトファイルシステムを回避し得る１つまたは複数の他のコンテナと共有されて良い。この方法において、データは、持続的に記憶され、コンテナインスタンス内の他のコンテナの間で共有されて良い。データボリュームは、タスク定義ファイル内のエントリを介するように構成されて良い。一部の実施態様において、あるコンテナに対する１つまたは複数のデータボリュームの作成及び選択は、フロント−エンドサービス２０４に伝達する目的で構成されたユーザインターフェースを介して達成される場合もある。コンテナサービス２００は、他のデータ記憶サービスを利用する場合もあり、例えばデータボリュームのための記憶装置を提供するためのコンピューティングリソースサービスプロバイダの、図２のオンデマンドデータ記憶サービス１５１４またはブロック−レベルデータ記憶サービス１５１０などである。他の実施態様では、データボリュームは、データボリュームのためのコンテナインスタンスの本来備わった記憶装置を利用する場合もある。
【００６２】
コンテナサービス２００は、コンピューティングリソースサービスプロバイダの他のサービスと組み合わされる場合がある。例えばコンテナインスタンスは、コンピューティングリソースサービスプロバイダの自動スケーリングサービスの自動スケーリンググループにタグ付けされる及び／または割り当てられる場合がある。この方法において、自動スケーリングサービスは、コンテナインスタンスによるリソースの利用を監視し、コンテナインスタンスによるリソースの需要の急激な増加など、必要に応じてリソースを動的に調節する／割り当てることができる。同様にコンテナサービス２００は、コンピューティングリソースサービスプロバイダのロード−バランサーサービスと組み合わされる場合もある。例えばロード−バランサーサービスは、コンテナインスタンス間の仕事量のバランスを取るために、コンテナまたはコンテナインスタンスへのトラフィックを分散させることができる。
【００６３】
一例として、顧客は、自動スケーリンググループに割り当てられたコンテナインスタンス２１８を利用してウェブサイトを操作することができる。ウェブサイトは、インターネットを介して複数のユーザからリクエストを受け取ることができ、ロード−バランサーサービスのロードバランサーは、ロード−バランシング分散スキームに従ってコンテナインスタンス２１８に対するリクエストを分散させることができる。ロード−バランサーサービスは、リソースの利用を最適化する及び／または任意の特定のホストコンピュータの過負荷を避けるために、ロードバランサーに割り当てられたコンテナインスタンス２１８へのリクエストを分散させるように構成されたコンピュータシステムまたは仮想コンピュータシステムであって良い。例えばロードバランサーは、サーバラックに接続された、またはそうでなければデータセンター内に含まれる物理ハードウェアを含むことができる。別の例では、ロードバランサーは、ホストコンピュータによってサポートされる１つまたは複数の仮想マシンを含む場合もある。同時に自動スケーリングサービスは、リクエストを受信するためにコンテナインスタンス２１８によって必要とされるリソースがより多くなるか、またはより少なくなるかを検知し、必要に応じてコンテナインスタンス２１８により多くのまたはより少ないリソースを割り当てることができる。
【００６４】
図３は、一実施形態が実施され得る環境３００の一態様を示している。具体的には図３は、少なくとも１つの実施形態によってコンテナインスタンス３２０として構成される複数の仮想マシンを実行するコンテナサービス１５２２と同様のコンテナサービスを描いている。コンテナサービスは、コンピューティングリソースサービスプロバイダ３０４の顧客３０２に対してシステムハードウェア３４０を提供することで、コンテナ３１０内で計算サービスを行うコンテナサービスを提供することができる。システムハードウェア３４０は、ホストコンピュータシステムとも呼ばれる１つまたは複数のホスト３４２を含むことができる。ホスト３４２の各々は、データ計算、操作または記憶タスクを行うための命令を実行するように構成された、コンピュータまたはサーバなどの任意のデバイスまたは装置であって良い。ホスト３４２は、任意の必要とされる処理能力を備えることができ、これには例えば中央処理装置、グラフィックスプロセッシングユニットまたはデジタル信号プロセッサなどの１つまたは複数のプロセッサが含まれる。ホスト３４２はまた、メモリ（例えばスタティックメモリ及びダイナミックメモリ）、バス及びハンドシェーキング、通信またはデータ転送プロトコルに準拠する入／出力ポートを装備する場合もある。システムハードウェア３４０はまた、記憶ディスク及びテープなどの記憶デバイス及びネットワーキング設備を含む場合もある。記憶デバイスは、図１５に関連して記載されるブロック−レベルデータ記憶サービス１５１０などのデータ記憶サービスによって管理されるネットワーク記憶デバイスであって良い。
【００６５】
システムハードウェア３４０における仮想化レイヤ３４４によって、システムハードウェア３４０を使用して、１つまたは複数のコンテナインスタンス３２０がその上で動作し得る計算リソースを提供することが可能になる。仮想化レイヤ３４４は、コンテナインスタンス３２０のための仮想コンピューティングプラットフォームを提供するのに使用される任意のデバイス、ソフトウェアまたはファームウェアであって良い。ホスト３４２上で実行する仮想化レイヤ３４４によって一揃いのシステムハードウェア３４０を使用して、コンテナインスタンス３２０をサポートするのに必要な計算リソースを提供することが可能になる。さらに物理ホスト３４２が、同一のシステムハードウェア３４０上の同一のまたは異なるタイプの複数の仮想レイヤをホストする場合もある。各々のコンテナインスタンス３２０は、種々の仮想コンピュータ構成要素、例えば１つまたは複数の仮想プロセッサ、仮想メモリ及び仮想記憶装置を含む場合がある。コンテナインスタンス３２０はコンピューティングリソースサービスプロバイダ３０４の顧客に提供されて良く、顧客は、各々のコンテナインスタンス３２０上でオペレーティングシステム３０６及びアプリケーションを稼働することができる。仮想レイヤ３４４の一つの例にはハイパーバイザが含まれる。
【００６６】
コンピューティングリソースサービスプロバイダ３０４によって作動される図２のフロント−エンドサービス２０４などのリクエストインターフェースによってリクエストを受信することができる。リクエストインターフェース３１４が、このリクエストを適切なコンテナインスタンスに向けることができる。各々のコンテナインスタンス３２０は１つまたは複数のソフトウェアエージェント３０８を含むことができる。ソフトウェアエージェント３０８は、顧客３０２がそのそれぞれのコンテナ３１０及びコンテナインスタンスを管理することを可能にするように構成されて良い。ソフトウェアエージェント３０８はさらに、イベントのロギングを行い、コンテナ３１０及びコンテナインスタンス３２０に関連するテレメトリデータを集めるように構成されて良い。そのようなソフトウェアエージェント３０８の例は、図２に関連して記載されるコンテナエージェント２２２及びテレメトリエージェント２２４である。
【００６７】
オペレーティングシステム３０６は、コンテナインスタンス３２０内で稼働するのに適した任意のオペレーティングシステムであって良く、これはコンテナ化スキームが、オペレーティングシステム３０６の下に稼働中の他のプロセスから、例えばコンテナ３１０などの仮想化インスタンスを隔離することを可能にする隔離技術を提供する。そのようなオペレーティングシステムの例には、Ｌｉｎｕｘ（登録商標）カーネルにおけるリソース隔離機能をサポートするＬｉｎｕｘ（登録商標）オペレーティングシステムの種々の実施態様が含まれる。指摘したように、コンテナ３１０は、１つまたは複数のタスク定義に従ってアプリケーションイメージから起動されたオペレーティングシステム３０６内の仮想化されたインスタンスであって良く、そのそれぞれのコンテナインスタンス３２０からリソースが割り当てられて良い。
【００６８】
図４は、一実施形態が実施され得る環境４００の一態様を示している。図４に示されるように、環境４００は、コンテナエージェント４２２によって監視されており、テレメトリエージェント４２４に対してメトリック及びログ情報を提供するコンテナインスタンス４１８内で起動された一揃いのコンテナ４０２を含むことができる。コンテナエージェント４２２は、エージェント通信サービス２２０と同様のエージェント通信サービス４２０などのエージェント通信サービスを介して監視情報を伝達することができる。コンテナエージェント４２２はまた、テレメトリエージェント４２４とも通信することができ、コンテナエージェント４２２は、テレメトリエージェント４２４の健全さを周期的に監視して、テレメトリエージェント４２４が稼働していることを保証することもできる。テレメトリエージェント４２４が稼働を停止する、またはそうでなければエラーに遭遇した場合、コンテナエージェント４２４は必要に応じてテレメトリエージェント４２４を再始動することができる。一部の実施形態において、コンテナエージェント２２２からの監視情報は、アプリケーションプログラミングインターフェースコールに応答してフロント−エンドサービス２０４に提供される場合もある。テレメトリエージェント４２４は、テレメトリサービス２１２と同様のテレメトリサービス４１２に対してメトリック及びログ情報を伝達することができる。。一部の実施形態において、テレメトリエージェントは、テレメトリサービス４１２と直接通信する場合もあり、他の実施形態ではテレメトリエージェント４２４は、フロント−エンドサービス４０４を介してテレメトリサービス４１２と通信する場合もある。
【００６９】
コンテナ４０２は、本開示の他の場所で考察したコンテナと同様であり、コンテナインスタンス内の他のプロセスから隔離された、様々な寿命の（例えば短期間のバッチジョブ、長期間のバックグラウンドプロセスなど）稼働中の仮想化インスタンス（タスクとも呼ばれる）であって良い。コンテナ４０２に関するメトリックは、テレメトリエージェント４２４によって集められ、集約され、テレメトリサービス４１２に提供されて良い。コンテナエージェント４２２は、コンテナ４０２と、コンテナ４０２のネーム空間外のリソース、サービス及び他のエンティティの間の媒介手段として機能する。一部の実施態様において、コンテナ４０２は、ブロック−レベルデータ記憶ボリュームなどの外部リソースを共有するように構成される場合もある。このような実施態様の一部では、コンテナ４０２によって共有される外部ソースへのアクセス及びそれとの通信は、コンテナエージェント４２２を介して行うことができる。他の実施態様では、コンテナインスタンス４１８またはコンテナインスタンス４１８のオペレーティングシステムが、コンテナ４０２が、コンテナエージェント４２２を介することなく、共有されるリソースにアクセスするまたはそれと通信することを可能にすることをサポートする場合もある。
【００７０】
クラスタマネージャ４０６は、どのコンテナインスタンス４１８の中でコンテナ４０２が起動されるべきかを決定するための一揃いのルールを有するように構成されたメタデータまたはクラスタ管理ソフトウェアであって良い。例えばコンテナインスタンス４１８がインスタント化される際、そのコンテナエージェント４２２は、コンテナインスタンス４１８がコンテナをホストするために顧客が利用可能であることを示す情報によってクラスタマネージャ４０６を更新することができる。その後、コンテナを起動するためのリクエストがフロント−エンドサービス４０４を介して顧客またはスケジューラから受信された場合、スケジューラは、クラスタマネージャ４０６を参照してコンテナインスタンス４１８を選択し、コンテナインスタンス４１８のコンテナエージェント４２２にコンテナを起動するように告げることができる。クラスタマネージャ４０６はまた、特定のタイプのコンテナイベントに応じてどんな行動を採るべきかを指定するように構成される場合もある。例えばコンテナ４０２の１つが正常に動作せず、かつ／または動作を止めた場合、コンテナエージェント４２２はクラスタマネージャ４０６を参照して正常に動作しないまたは動作不能のコンテナを再起動するかどうかを判断することができる。
【００７１】
一部の実施形態において、スケジューラは、エージェント通信サービス４２０と通信する、またはコンテナエージェント４２２と直接通信して、タスクを起動するようにコンテナエージェント４２２に命令する場合もあることに留意されたい。他の実施形態において、スケジューラは、配置及び起動命令をコンテナマネージャバックエンド４１４に伝達し、これがその後、例えば直接またはエージェント通信サービスを介してコンテナエージェント４２２に起動命令を伝達することによって、スケジューラからの配置オーダーに従ってコンテナを起動させる。クラスタマネージャ４０６は、マルチテナントであって良く、例えばクラスタマネージャ４０６は、コンピューティングリソースサービスプロバイダの複数の顧客のクラスタを管理するための情報を有するように構成されて良い。
【００７２】
指摘したように、コンテナマネージャバックエンド４１４は、例えばクラスタマネージャ４０６など、特定のサブ−フリート内のコンテナ及びコンテナインスタンスをサポートする他のプロセスのためにある環境を提供するように構成されて良い。コンテナエージェント４２２は、コンテナエージェント４２２によって監視されているコンテナ４０２に関する寿命及び健全さの情報をクラスタマネージャ４０６に提供するように構成されて良い。一部の実施態様では、コンテナエージェント４２２がメトリック及びログ情報を収集し、この情報をテレメトリエージェント４２４に渡す、または直接テレメトリサービスに渡す。同様に一部の実施態様において、コンテナエージェント４２２は、エージェント通信サービス４２０を介してクラスタマネージャ４０６を更新する場合もある。いくつかの実施形態において、コンテナエージェントと外部の構成要素間の通信は、コンテナエージェント４２２からエージェント通信サービス４２０及び外部の構成要素への一方向の通信である場合もある。他の実施形態において、コンテナエージェント４２２とエージェント通信サービス４２０間の通信は二方向である。他の実施態様では、コンテナエージェント４２２が、エージェント通信サービス４２０を介さずに、クラスタマネージャ４０６を直接更新する場合もある。コンテナエージェント４２２は、コンテナインスタンスが形成される際に起動されるソフトウェアコンテナであって良く、別の場合ではコンテナエージェント４２２は、コンテナ４０２と通信するコンテナインスタンスのオペレーティングシステムの下で稼働するプロセスである場合もあることに留意されたい。
【００７３】
指摘したように、テレメトリエージェント４２４は、コンテナインスタンス４１８内で稼働中のコンテナ４０２に関するメトリック及びログ情報を集め、集められたメトリック及びログ情報をテレメトリサービス４１２に渡すように構成されて良い。一部の実施態様において、テレメトリエージェント４２４は、コンテナインスタンス４１８が形成される際に起動するその独自の別個のコンテナである場合もある。他の実施態様では、テレメトリエージェントは、コンテナインスタンス４１８のオペレーティングシステムの下に稼働し、コンテナ４０２を介してまたはコンテナエージェント４２２を介して直接メトリック及びログ情報を受け取るように構成されるプロセスでも良い。本開示の全ての実施態様が、テレメトリエージェント４２４及び／またはテレメトリサービス４１２を必要とするわけではないことに留意されたい。
【００７４】
図５は、コンテナインスタンス５０２とコンテナインスタンス内のコンテナ５０４Ａ〜０４Ｂの間のリソース割り当ての一例５００を示す。コンテナインスタンス５０２は、コンテナインスタンスをサポートするように構成された（コンテナ化）コンピュータシステムインスタンス（仮想または非仮想）であって良い。コンテナインスタンス５０２は、割り当てられた量の処理リソース５０６と、一定量のメモリリソース５０８とを有するように描かれている。コンテナ５０４Ａ〜０４Ｃの各々は、ソフトウェアイメージからコンテナインスタンス５０２内で起動され、処理リソース５０６及びメモリリソース５０８などのコンテナインスタンス５０２のリソースのプールからリソースの量が割り当てられて良い。示されるようにコンテナ５０６Ａは、そのプロセス５１０Ａを稼働するために、コンテナインスタンス５０２の３５％の処理リソース５０６と、１５％のメモリリソース５０８が割り当てられている。同様にコンテナ５０６Ｂは、そのプロセス５１０Ｂを稼働するために、コンテナインスタンス５０２の４０％の処理リソース５０６と、５０％のメモリリソース５０８が割り当てられている。同様にコンテナ５０４Ｃは、そのプロセス５１０Ｃを稼働するために、コンテナインスタンス５０２の１０％の処理リソース５０６と、２０％のメモリリソース５０８が割り当てられている。合計すると、コンテナインスタンス５０２の８５％の処理リソース５０６と８５％のメモリリソースが、コンテナ５０４Ａ〜０４Ｃに割り当てられている。
【００７５】
コンテナインスタンスは、コンテナエージェント５１２を含むことができる。コンテナエージェント５１２は、指摘したようにコンテナ５０４Ａ〜０４Ｃとコンテナインスタンス５０２の外部のエンティティの間を接続するように構成された別個の稼働中のコンテナであって良い。コンテナ５０４Ａ〜０４Ｃに対して割り当てるべきリソースの量は、タスク定義において特定されて良い。スケジューラが、本明細書に記載されるようにコンテナインスタンス５０２がその構成要素である一揃いのコンテナインスタンスにおける配置スキーム及び／または利用可能なリソースに基づいて、コンテナ５０４Ａ〜０４Ｃを起動するためのコンテナインスタンス５０２を決定することができる。その後すぐに、スケジューラは、タスク定義によって特定されたリソースの量をコンテナ５０４Ａ〜０４Ｃに割り当てるようにコンテナインスタンス５０２またはコンテナエージェント５１２に通知することができ、コンテナエージェント５１２は、スケジューラによって指示されたようにコンテナ５０４Ａ〜０４Ｃに対してリソースを割り当てることができる。追加として、ひとたびリソースがコンテナ５０４Ａ〜０４Ｃの各々に対して割り当てられると、その独自のネーム空間の範囲内で、かつそのそれぞれの割り当てられたリソースを専用に利用して稼働中のコンテナとして（すなわちタスク）コンテナ５０４Ａ〜０４Ｃの各々を起動するように、スケジューラはコンテナインスタンス５０２またはコンテナエージェント５１２に通知することができる。通知されると、コンテナエージェント５１２は、スケジューラによって指示されたようにコンテナインスタンス５０２内でコンテナ５０４Ａ〜０４Ｃを起動することができる。
【００７６】
図６は、種々の実施形態によるクラスタ内でタスクを起動するためのプロセス６００の一例を示すブロック図である。プロセス６００は、データセンター内のサーバ、コンピューティングリソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイスまたは図１６に関連して記載される電子クライアントデバイス１６０２などの任意の電子クライアントデバイスなどの任意の好適なシステムによって実施されて良い。プロセス６００は一連の動作を含み、その中でコンテナに関するソフトウェアイメージ及びタスク定義が取得され、クラスタが形成され、コンテナインスタンスがクラスタに登録され、クラスタが記述され、タスク定義に従って決められたコンテナインスタンス内でイメージが起動され、クラスタの記述が更新される。
【００７７】
６０２において、コンピューティングリソースサービスプロバイダがコンピューティングリソースサービスプロバイダの顧客からソフトウェアイメージを受け取る。指摘したようにソフトウェアイメージは、ソフトウェアイメージを復元する／起動することによってソフトウェアアプリケーションをこの時点で復元させることができるように、それがイメージ化されたときのソフトウェアアプリケーションの全体の状態を表すデータを指すことができる。場合によっては、６０２における動作は、イメージではなく実行可能なインストレーションまたはアプリケーションファイルを取得することである場合もある。場合によっては、ソフトウェアイメージの受信は、例えばタスク定義ファイルにおいて指定されたリソースの場所を介してコンピューティングリソースサービスプロバイダにアクセス可能なソフトウェアイメージを有することを含むことに留意されたい。場合によっては、ソフトウェアイメージは、コンピューティングリソースサービスプロバイダの図２のデータベース２１６などのデータ記憶装置に記憶される場合もある。
【００７８】
６０４において、コンピューティングリソースサービスプロバイダは、１つまたは複数のインスタンス内で稼働するタスク／コンテナを記述するタスク定義を受け取ることができる。タスク定義は、タスク定義ファイルの形態であって良い、またはユーザインターフェースを介して顧客によって選択されたオプションに応じてコンピューティングリソースサービスプロバイダによって生成される場合もある。タスク定義は、タスク／コンテナの記述、タスク／コンテナに関してイメージを見つけるべき場所、タスク／コンテナに割り当てられるリソースの量、共有されるリソース、他のコンテナ間の関係及びその他の情報などの情報を特定することができる。指摘されるようにタスク定義は、コンピューティングリソースサービスプロバイダの図２のデータベース２１６などのデータ記憶装置に記憶される場合もある。
【００７９】
６０６において、コンテナインスタンスがインスタンス化されて良い。指摘したように、コンテナインスタンスは、コンテナ化をサポートする仮想マシンインスタンスであって良い。場合によっては、コンテナインスタンスのインスタンス化は、コンテナインスタンス内でコンテナエージェントを起動させることを含む。コンテナエージェントは、コンテナインスタンスのオペレーティングシステムの下に稼働することができ、コンテナエージェント自体がコンテナであって良い。
【００８０】
６０８において、１つまたは複数のクラスタが形成されて良い。指摘したように、クラスタは、１つまたは複数のコンテナインスタンスの論理的なグループ分けであって良い。クラスタは様々な目的に使用されて良く、機能によってタスクを分けること、異なるタイプのコンテナインスタンスを一緒にグループ分けすること、及びコンピューティングリソースサービスプロバイダインフラストラクチャ内の物理ホストマシンの場所に基づいてコンテナインスタンスをグループ分けすることが含まれる。ひとたびクラスタが形成されると、クラスタマネージャを介して１つまたは複数のコンテナインスタンスがそのクラスタの構成要素であるように登録されて良い。指摘したように、場合によっては、コンテナインスタンスは、２つ以上のクラスタの構成要素である場合もある。動作６０６〜０８は一緒に行われる、または任意の順番で行われる場合もあることに留意されたい。例えばクラスタがコンテナインスタンスの前に形成される場合もあり、コンテナインスタンスがインスタンス化される際、コンテナインスタンス内のコンテナエージェントが自動的にそのコンテナインスタンスをクラスタに登録させる場合もある。
【００８１】
６１０において、コンピューティングリソースサービスプロバイダが、顧客またはタスクが起動されるようにリクエストする動作を担う可能性のある他のエンティティにクラスタまたはクラスタＩＤを提供する。場合によっては、このような他のエンティティは、コンテナサービスによって提供される図２のスケジューラ２０８または顧客によってインストールされたスケジューラなどのスケジューラである場合がある。クラスタＩＤは、６０８においてクラスタを形成するためのリクエストに応答して提供される場合もある。またある時には、ＬｉｓｔＣｌｕｓｔｅｒｓアプリケーションプログラミングインターフェースコールを行ったリクエストエンティティにクラスタＩＤが与えられる場合もある。
【００８２】
６１２において、顧客またはタスクが起動されるようにリクエストする動作を担うことが可能な他のエンティティ（例えばスケジューラ）からＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールが受信され、記述するクラスタを特定することができる（例えば６１０のクラスタＩＤをパラメータとして渡すことによって）。ＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールに応答して、コンピューティングリソースサービスプロバイダが６１４においてクラスタに関する情報を提供することができ、これにはクラスタ内のコンテナインスタンスの数及びＩＤ、クラスタ内で利用可能なリソース、クラスタ内で使用されているリソース、稼働中のタスクなどが含まれる。このような情報は、顧客またはスケジューラによって利用されてどこで（例えばどのコンテナインスタンスで）特定のタスク（例えば特定のパフォーマンス目的を達成する、負荷のバランスを取るなど）を起動させるべきかを決定することができる。
【００８３】
６１６において、コンピューティングリソースサービスプロバイダは、６０４において取得したタスク定義において特定される情報に従って１つまたは複数のタスクを稼働するためのリクエストを受け取る。場合によっては、このリクエストは、どのコンテナインスタンス内で１つまたは複数のタスクを稼働するかを特定することができる。別の場合では、このリクエストは、１つまたは複数のタスクを稼働するクラスタを特定し、図２のスケジューラ２１６などのスケジューラが、どのコンテナインスタンス内で配置スキームに従ってタスクを起動させるべきかを決定することができる。配置スキームはラウンドロビン配置スキーム、確率的に割り当てられた配置、またはリソース利用または他の基準に基づいた発見的方法を含むことができる。
【００８４】
ひとたびタスクの目標とする場所が決定されると（例えば中でタスクを起動するコンテナインスタンスのインスタンスＩＤを特定した後）、６１８において、６０４のタスク定義に従って１つまたは複数のコンテナインスタンス内で６０２のソフトウェアイメージに対応するタスクを起動させることができる。場合によっては、タスクの起動は、特定されたコンテナインスタンス内で稼働中のコンテナエージェントによって実施される場合もある。６１８と６２０の間の点線は、点線より下の作業は、クラスタ内でタスクを起動するのに不可欠ではないが、６０２〜１８において起動された稼働中のタスクに関する情報を提供することができる。
【００８５】
６２０において、６１２におけるリクエストと同様にクラスタを記述するためのリクエストが受信される。６２２において、コンピューティングリソースサービスプロバイダは、コンテナインスタンス内で稼働中のタスクに関する状態の情報を求めて、タスクを稼働するコンテナインスタンスの１つまたは複数のコンテナエージェントに問い合わせることができる。６２４において、コンピューティングリソースサービスプロバイダは、６１４の作業と同様に６２０のリクエストに応答してクラスタを記述する情報を提供することができる。しかしながらこの情報は、稼働中のタスク及び／またはクラスタ６１８内で起動された稼働中のタスクに割り当てられたリソースの作用に反映すべきである点で６１４とは区別される。６０２〜２０において行われる動作の１つまたは複数は、並行することを含め、様々な順番及び組み合わせで実施され得ることに留意されたい。
【００８６】
図７は、種々の実施形態によるクラスタを形成するためのプロセス７００の一例を示すブロック図である。プロセス７００は、データセンター内のサーバ、コンピューティングリソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイスまたは図１６に関連して記載される電子クライアントデバイス１６０２などの電子クライアントデバイスなどの任意の好適なシステムによって実施されて良い。プロセス７００は一連の動作を含み、その中でＣｒｅａｔｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールを要求側から受信し、このリクエストが認証され、その後認証された場合、クラスタメタデータがデータベースに記憶され、クラスタＩＤが生成され、要求側に提供される。
【００８７】
７０２において、コンピューティングリソースサービスプロバイダは、顧客または他のエンティティからクラスタを形成するためのアプリケーションプログラミングインターフェースコールを受け取る。クラスタの形成には、そのクラスタに関するクラスタＩＤを生成することと、クラスタＩＤをそのクラスタに関する他のメタデータと共にデータベースに記憶することが含まれても良い。場合によっては、要求側は、クラスタが形成される際、ＣｒｅａｔｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールを介してクラスタにコンテナインスタンスを登録するように指示する場合がある。そのような場合では、特定されたコンテナインスタンス（例えばアプリケーションプログラミングインターフェースコールにおいてパラメータとして渡された１つまたは複数のコンテナインスタンスのＩＤ）または利用可能なコンテナインスタンスが、クラスタを形成する際にクラスタＩＤに関連して登録されて良い。その他のそういった場合では、既存のコンテナインスタンスが特定されず、コンテナインスタンスが１つも利用できない場合、新たなコンテナインスタンスがインスタンス化され、クラスタを形成する際にクラスタに対して登録される場合もある。一部の実施態様において、コンピューティングリソースサービスプロバイダが、顧客にデフォルトクラスタを提供する場合もあり、そのような場合では、顧客は、ＣｒｅａｔｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースを利用する必要がなく、追加のクラスタが必要とされない限り、またはデフォルトクラスタが削除されない限り、デフォルトクラスタに対してコンテナインスタンスをまさに登録することができることに留意されたい。
【００８８】
７０４において、コンピューティングリソースサービスプロバイダは、要求側がリクエストを満たすのに十分な特権を有するかどうかを判定する。例えば要求側は、ＣｒｅａｔｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールにパラメータとして同一性及び信用証明書を所有する証拠を与えることができる。例えば要求側は、同一性に相当する信用証明書を所有する証拠として、パスワード、暗号ハッシュ／パスワードのダイジェスト、署名暗号キーによって生成される暗号デジタル署名、または要求側の同一性を認めるためにコンピューティングリソースサービスプロバイダによって検証可能な他のシークレットキーなどの信用証明書に対するアクセスを証明するのに十分な情報を提供することができる。コンピューティングリソースサービスプロバイダは、その同一性及び証拠を、図１５の認証システム１５１８などの認証サービスに提供することができ、この認証システムがその後、要求側の同一性及び信用証明書の証拠を検証することができる。ひとたび要求側の同一性が検証されると、コンピューティングリソースサービスプロバイダまたは認証サービスは、同一性に関連するセキュリティポリシー及び／またはロールが、このリクエストが満たされることを許可するのに十分な特権を授与するかどうかを判定することができる。
【００８９】
コンピューティングリソースサービスプロバイダが同一性を判定することができない（例えばセキュリティデータベース内に見つからない）、信用証明書の証拠が同一性を証明するのに不十分である（例えば間違ったパスワード）、または要求側の同一性が他の点で確認することができない場合、プロセス７００を実施するシステムは、プロセス７００においてさらに進むことはできない。プロセス７００を実施するシステムは、要求側に対するエラーメッセージによって認証が失敗したことに対応する、及び／またはセキュリティログに認証の失敗を登録することができる。それ以外では、要求側が認証され、ＣｒｅａｔｅＣｌｕｓｔｅｒリクエストを満たすのに十分な特権を有すると判定された場合、プロセス７００を実施するシステムは、７０６に進むことができる。
【００９０】
７０６において、プロセス７００を実施するシステムは、例えば図２に関連して記載されるデータベース２１６などのデータストアにクラスタＩＤ及びクラスタメタデータを記憶することができる。指摘したように、場合によっては、クラスタは、１つまたは複数のコンテナインスタンス（例えばクラスタに対して登録されたコンテナインスタンス）に関連して記憶されたメタデータである場合もある。スケジューラは、クラスタ内のどのコンテナインスタンスにおいてコンテナを起動するのかを決定するためにクラスタマネージャを参照することができる。一部の例では「クラスタマネージャ」は、少なくともある程度クラスタメタデータを参照する。他の例では、クラスタマネージャは、クラスタメタデータを管理し、スケジューラと通信するソフトウェアアプリケーションまたはサービスである場合もある。一部の実施態様において、クラスタメタデータをデータストア内に記憶することは、クラスタＩＤを生成させ得ることに留意されたい。クラスタメタデータは、クラスタ内のコンテナインスタンスのホストの地理的領域、クラスタに指定された、または指定されることが許されたコンテナインスタンスの数、及びクラスタの形成の日にち／時間などの情報を含むことができる。
【００９１】
ひとたび記憶されると、７０８においてプロセス７００を実施するシステムは、クラスタの形成が成功したことを要求側に通知することができる。場合によっては、この通知には、クラスタに登録された任意のコンテナインスタンスのＩＤ及び利用可能なリソース（例えばメモリ及び／または処理能力）を含め、クラスタに関する追加情報／メタデータが含まれる場合がある。その後、要求側が認証された場合、ＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールを利用してクラスタＩＤをパラメータとして渡し、コンピューティングリソースサービスプロバイダは、メタデータ情報、特定されたクラスタに登録されたコンテナインスタンスのリスト、クラスタコンテナインスタンス内で稼働中のタスクのリスト、クラスタ内で利用可能なリソース、クラスタ内で使用されているリソース、図２のテレメトリサービス２１２などのテレメトリサービスによって収集されたクラスタのコンテナインスタンスに関するメトリック、クラスタまたはクラスタコンテナインスタンスに対応付けられたタスク定義及びクラスタに関する他の状況情報を含めた情報を提供することによって応答することができる。
【００９２】
図８は、種々の実施形態によるコンテナインスタンスを登録するためのプロセス８００の一例を示すブロック図である。プロセス８００は、データセンター内のサーバ、コンピューティングリソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイスまたは図１６に関連して記載される電子クライアントデバイス１６０２などの電子クライアントデバイスなどの任意の好適なシステムによって実施されて良い。プロセス８００は一連の動作を含み、その中でプロセス８００を実施するシステムは、要求側からコンテナインスタンスを登録するためのアプリケーションプログラミングインターフェースコールを受信する。システムはその後、要求側を認証し、コンテナインスタンスを登録し、要求側に登録が成功したことを通知する。
【００９３】
８０２において、コンピューティングリソースサービスプロバイダは、コンテナインスタンスを登録するためのアプリケーションプログラミングインターフェースコールを受信する。場合によっては、このリクエストは、顧客またはコンテナサービスの外部の他のエンティティから受信される場合もある。このようなケースの一部において、リクエストは、フロントエンドサービスを介して受信され、コンテナエージェントに伝達され、このコンテナエージェントがコンテナインスタンスを登録する。別の場合では、このリクエストは、コンテナエージェントからフロント−エンドサービスに対して行われる場合もある。例えばコンテナインスタンスがコンテナエージェントを有するようにインスタンス化される際、このコンテナエージェントが自動的に、特定されたクラスタまたはデフォルトクラスタにコンテナインスタンスを登録しようとすることがある。コンテナインスタンスの登録には、コンテナ化をサポートするようにとりわけ構成された既存の仮想マシンインスタンスと対応付けること、またはコンテナ化をサポートする既存の仮想マシンインスタンスを特定のクラスタに対応付けることが含まれる場合がある。このような関係は、インスタンスのＩＤとクラスタＩＤの間の関係として図２のデータベース２１６などのデータベースに記憶されて良い。そのような場合では、要求側はＲｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅファンクションコールにおけるパラメータとしてインスタンスＩＤ（または他の識別用の特性）及びクラスタＩＤを提供することができる。
【００９４】
場合によっては、要求側が特定の既存のコンテナインスタンスを特定しない場合もあり、そのような場合では、コンピューティングリソースサービスプロバイダは、コンテナ化に適した一揃いの事前にインスタンス化されたコンテナインスタンスからコンテナを選択することができる。別の場合では、好適な事前にインスタンス化されたコンテナインスタンスが利用できない場合、コンピューティングリソースサービスプロバイダは、コンテナインスタンスに適した新たなコンテナインスタンスをインスタンス化し、新たにインスタンス化されたコンテナインスタンスを特定されたクラスタに登録する場合もある。一部の実施態様において、ＲｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅアプリケーションプログラミングインターフェースコールを使用して、既存のコンテナインスタンスをそれが現在登録されているクラスタと異なるクラスタに登録する場合もある。そのような場合では、要求側は、アプリケーションプログラミングインターフェースコールのパラメータとしてコンテナインスタンスＩＤ及びクラスタＩＤを特定することができる。
【００９５】
８０４において、コンピューティングリソースサービスプロバイダは、要求側がリクエストを満たすのに十分な特権を有するかを判定する。例えば要求側は、ＲｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅアプリケーションプログラミングインターフェースコールにパラメータとして同一性及び証明書を所有する証拠を与えることができる。例えば要求側は、同一性に相当する信用証明書を所有する証拠として、パスワード、暗号ハッシュ／パスワードのダイジェスト、署名暗号キーによって生成される暗号デジタル署名、または要求側の同一性を認めるためにコンピューティングリソースサービスプロバイダによって検証可能な他のシークレットキーなどの信用証明書に対するアクセスを証明するのに十分な情報を提供することができる。コンピューティングリソースサービスプロバイダは、その同一性及び証拠を、図１５の認証システム１５１８などの認証サービスに提供することができ、その後、要求側の同一性及び信用証明書の証拠を検証することができる。ひとたび要求側の同一性が検証されると、コンピューティングリソースサービスプロバイダまたは認証サービスは、同一性に関連するセキュリティポリシー及び／またはロールが、このリクエストが満たされることを許可するのに十分な特権を授与するかどうかを判定することができる。
【００９６】
コンピューティングリソースサービスプロバイダが同一性を判定することができない（例えばセキュリティデータベース内に見つからない）、信用証明書の証拠が同一性を証明するのに不十分である（例えば間違ったパスワード）、または要求側の同一性が他の点で確認することができない場合、プロセス８００を実施するシステムは、プロセス８００においてさらに進むことはできない。プロセス８００を実施するシステムは、要求側に対するエラーメッセージによって認証が失敗したことに対応する、及び／またはセキュリティログに認証の失敗を登録することができる。それ以外では、要求側が認証され、ＲｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅリクエストを満たすのに十分な特権を有すると判定された場合、プロセス８００を実施するシステムは、８０６に進むことができる。
【００９７】
８０６において、プロセス８００を実施するシステムは、例えばデータベース２１６などの関連するデータベース内でコンテナインスタンスＩＤ（特定された場合）を捜そうと試みることができる。コンテナインスタンスＩＤが見つかり、別のクラスタＩＤに既に対応付けられていると判定した場合、場合によっては、プロセス８００を実施するシステムは８０６において、コンテナインスタンスをそれが現在登録されているクラスタから登録を取り消し、特定されたクラスタに登録することができる。このような場合の一部では、このような登録の取り消し／再登録は、リクエストが認証された後自動的に行われることもある。別の場合では、プロセス８００を実施するシステムは、システムが登録の取り消し／再登録作業を行う前に、それが現在登録されているクラスタからコンテナインスタンスの登録を取り消すための確認を要求側に促す場合もある。さらに他の実施態様では、コンテナインスタンスが複数のクラスタに同時に登録される場合もあり、そのような実施態様では、既に登録されたコンテナインスタンスを、それが現在登録されているクラスタから登録を取り消すことはできない。
【００９８】
コンテナインスタンスがまだクラスタに登録されていない場合、クラスタから登録を取り消されている場合、またはインプリメンテーションが複数のクラスタへのコンテナインスタンスの登録をサポートする場合、プロセス８００を実施するシステムは、特定されたクラスタに関連するデータベースにコンテナインスタンスＩＤを記憶することができる。プロセス８００を実施するシステムはその後、特定のクラスタへのコンテナインスタンスの登録が成功したことを要求側に通知することができ、また場合によっては、すなわち新たなコンテナインスタンスが形成された特定の場合では、システムは、応答の中にコンテナインスタンスＩＤを含む場合もある。その後のＤｅｓｃｒｉｂｅＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅアプリケーションプログラミングインターフェースコールにおいて、コンピューティングリソースサービスプロバイダは、認証された場合、要求側に、利用可能なリソース、コンテナインスタンス内で稼働中のタスク、及びどの１つまたは複数のクラスタにコンテナインスタンスが登録されるのかを含めたコンテナインスタンスに関する情報を提供することができる。
【００９９】
図９は、種々の実施形態によるタスクを登録するためのプロセス９００の一例を示すブロック図である。プロセス９００は、データセンター内のサーバ、コンピューティングリソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイスまたは図１６に関連して記載される電子クライアントデバイス１６０２などの電子クライアントデバイスなどの任意の好適なシステムによって実施されて良い。プロセス９００は一連の動作を含み、その中でプロセス９００を実施するシステムは、要求側からタスク定義を登録するためのアプリケーションプログラミングインターフェースコールを受信する。システムはその後、要求側を認証し、タスク定義を登録し、タスク定義ＩＤによって応答する。一部の実施態様において、タスク定義は、要求側のＩＤに登録される場合もある。例えば要求側がコンピューティングリソースサービスプロバイダの顧客である場合、タスク定義は、顧客のアカウントＩＤに対応付けられて登録される場合もある。他の実施態様では、タスク定義は、例えばオンライン市場を介して公共に利用可能である場合もあり、オンライン市場、購入者または任意の他のエンティティもしくはサービスに関連して登録される場合もある。
【０１００】
９０２において、コンピューティングリソースサービスプロバイダは、顧客または他のエンティティからタスクを登録するためのアプリケーションプログラミングインターフェースコールを受信する。タスクの登録は、タスク定義またはタスク定義ファイルをデータベースに記憶することを含んで良い。一部の実施態様において、要求側は別のタスク定義を形成しアップロードする必要がないが、但しコンピューティングリソースサービスプロバイダによって提供されるユーザインターフェースから種々のオプションを選択することが可能であり、コンピューティングリソースサービスプロバイダが、選択されたオプションに基づいてタスク定義を動的に生成する場合もある。場合によっては、コンピューティングリソースサービスプロバイダは、テキストエントリインターフェースを提供することで、顧客がインターフェースを介してタスク定義をタイプする、またはカット／ペーストすることを可能にする場合もある。場合によっては、タスクを登録するリクエストに、タスク定義において特定されたソフトウェアイメージに対応する１つまたは複数のソフトウェアイメージが付随する場合もある。一部の実施態様では、リクエストは、タスク定義に対応付けるための１つまたは複数のクラスタＩＤを特定する場合もある。他の実施態様では、リクエストは、タスク定義に対応付けるための１つまたは複数のコンテナインスタンスＩＤを特定する場合もある。さらに他の実施態様では、タスク定義は、任意の特定されたクラスタまたはコンテナインスタンスとは独立して登録される場合もある。
【０１０１】
９０４において、コンピューティングリソースサービスプロバイダは、要求側がリクエストを満たすのに十分な特権を有するかどうかを判定する。例えば要求側は、ＲｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎアプリケーションプログラミングインターフェースコールにパラメータとして同一性及び信用証明書を所有する証拠を与えることができる。例えば要求側は、同一性に相当する信用証明書を所有する証拠として、パスワード、暗号ハッシュ／パスワードのダイジェスト、署名暗号キーによって生成される暗号デジタル署名、または要求側の同一性を認めるためにコンピューティングリソースサービスプロバイダによって検証可能な他のシークレットキーなどの信用証明書に対するアクセスを証明するのに十分な情報を提供することができる。コンピューティングリソースサービスプロバイダは、その同一性及び証拠を、図１５の認証システム１５１８などの認証サービスに提供することができ、この認証システムがその後、要求側の同一性及び信用証明書の証拠を検証することができる。ひとたび要求側の同一性が検証されると、コンピューティングリソースサービスプロバイダまたは認証サービスは、同一性に関連するセキュリティポリシー及び／またはロールが、このリクエストが満たされることを許可するのに十分な特権を授与するかどうかを判定することができる。
【０１０２】
コンピューティングリソースサービスプロバイダが同一性を判定することができない（例えばセキュリティデータベース内に見つからない）、信用証明書の証拠が同一性を証明するのに不十分である（例えば間違ったパスワード）、または要求側の同一性が他の点で確認することができない場合、プロセス９００を実施するシステムは、プロセス９００においてさらに進むことはできない。プロセス９００を実施するシステムは、要求側に対するエラーメッセージによって認証が失敗したことに対応する、及び／またはセキュリティログに認証の失敗を登録することができる。それ以外では、要求側が認証され、ＲｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎリクエストを満たすのに十分な特権を有すると判定された場合、プロセス９００を実施するシステムは、９０６に進むことができる。
【０１０３】
９０６において、プロセス９００を実施するシステムは、図２に関連して記載されるデータベース２１６などのデータ記憶装置にタスク定義を記憶することができる。一部の実施形態ではタスク定義は、コンピューティングリソースサービスプロバイダのアカウントの顧客ＩＤに関連して登録される場合もある。他の実施態様では、タスク定義は、ウェブサイトからタスク定義を取得したユーザ、コンピューティングリソースサービスプロバイダの同一性またはコンピューティングリソースサービスプロバイダ（例えばオンライン市場からのタスク定義の購入者）に対して登録される場合もある。さらに他の実施態様では、タスク定義は、１つまたは複数のクラスタＩＤ及び／またはコンテナインスタンスＩＤに記憶されリンクされる場合もある。ひとたび記憶されると、タスク定義に独自のタスク定義ＩＤがコンピューティングリソースサービスプロバイダまたはデータベースによって生成されて良い。同様に、一部の実施態様では、データベースに既に記憶されたタスク定義を更新するために、タスク定義ＩＤにＲｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎアプリケーションプログラミングインターフェースコールが備わっている場合もあることに留意されたい。すなわち、要求側は、ＲｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎアプリケーションプログラミングインターフェースコールのパラメータとして、更新されたタスク定義及び既存のタスク定義ＩＤを提示することができ、コンピューティングリソースサービスプロバイダは、既存のタスク定義ＩＤに対応するタスク定義エントリを定め、更新されたタスク定義によってタスク定義ＩＤに対応するタスク定義を更新することができる。
【０１０４】
よって９０８において、プロセス９００を実施するシステムは、タスク定義の登録が成功したことの確認として、かつ後日要求側がデータベースに記憶されたタスク定義を特定するための１つの方法としてタスク定義ＩＤを要求側に提供することができる。場合によっては、１つまたは複数のソフトウェアイメージに、ＲｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎアプリケーションプログラミングインターフェースコールが付随する場合があり、このようなソフトウェアイメージは、タスク定義として同一または異なるデータ記憶装置に記憶させることができる。場合によっては、このようなソフトウェアイメージは、タスク定義ＩＤによって参照される場合もあるが、別の場合ではソフトウェアイメージは、記憶されたタスク定義のタスク定義ＩＤと共に要求側に提供され得るソフトウェアイメージＩＤを受け取る場合もある。
【０１０５】
図１０は、種々の実施形態によるタスクを開始するためのプロセス１０００の一例を示すブロック図である。プロセス１０００は、データセンター内のサーバ、コンピューティングリソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイスまたは図１６に関連して記載される電子クライアントデバイス１６０２などの電子クライアントデバイスなどの任意の好適なシステムによって実施されて良い。プロセス１０００は一連の動作を含み、その中でタスクを開始するためのリクエストが受信され、要求側が認証され、認証された場合、タスクを起動するのに適切な場所が決定され、タスクが起動される。
【０１０６】
１００２において、コンピューティングリソースサービスプロバイダがタスクを開始するためのアプリケーションプログラミングインターフェースコールを受信する。場合によっては、このアプリケーションプログラミングインターフェースコールは、顧客からまたはコンテナサービスの外部の他のエンティティからフロント−エンドサービスを介して受信される場合もある。別の場合では、このアプリケーションプログラミングインターフェースコールは、タスクを開始するためのスケジューラからの通信に応じてコンテナエージェントによって行われる場合もある。ＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースを使用して、例えばソフトウェアコンテナのイメージから、または１つまたは複数の実行可能なアプリケーションファイルからソフトウェアコンテナの稼働を開始することができる。ＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースコールは、データベース２１６などのデータストアに記憶されたタスク定義に関する１つまたは複数のタスク定義ＩＤ用のパラメータを含むことができる。場合によっては、タスク定義ＩＤではなくタスク定義自体が、パラメータとしてＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースコールに渡される場合もある。別の場合では、１つまたは複数のタスク定義ファイルの場所を示すパラメータ（例えばユニフォームリソースロケータ、ネットワークリソースロケータ、ファイルパスなど）がパラメータとしてＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースコールに渡される場合もある。さらに別の場合では、コンテナサービスは、別のプログラム定義なしでタスクを開始するように構成される場合もあり、例えばＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースがデフォルトパラメータを有する場合があり、要求側から要求されるまたはデフォルトから逸脱するタスクを開始するための何らかの情報が、パラメータとしてＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースに渡される場合もある。
【０１０７】
ＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースはまた、パラメータとして、ベースコンテナイメージを表すソフトウェアイメージに関する１つまたは複数のイメージＩＤを容認する場合もある。場合によっては、イメージファイルの場所を示すパラメータがイメージファイルの代わりに渡される場合もある。さらに別の場合では、タスク定義は、タスクとして稼働を開始するようにコンテナソフトウェアを定めるための情報を包含する場合もある。要求側はまた、１つまたは複数のクラスタＩＤをＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースコールに対するパラメータとして特定することで、どのクラスタにおいて１つまたは複数のタスクが開始されるべきかを指示する場合もある。同様に、要求側は、１つまたは複数のコンテナインスタンスＩＤをＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースコールに対するパラメータとして特定することでどのコンテナインスタンスにおいて１つまたは複数のタスクが開始されるべきかを指示する場合もある。ＬｉｓｔＣｌｕｓｔｅｒｓアプリケーションプログラミングインターフェースコールを介してクラスタのＩＤが取得されて良い。登録されたコンテナインスタンスのＩＤは、ＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールから取得することができる。
【０１０８】
１００４において、コンピューティングリソースサービスプロバイダが、要求側がリクエストを満たすのに十分な特権を有するかを判定する。例えば要求側は、ＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースコールにパラメータとして同一性及び信用証明書を所有する証拠を与えることができる。例えば要求側は、同一性に相当する信用証明書を所有する証拠として、パスワード、暗号ハッシュ／パスワードのダイジェスト、署名暗号キーによって生成される暗号デジタル署名、または要求側の同一性を認めるためにコンピューティングリソースサービスプロバイダによって検証可能な他のシークレットキーなどの信用証明書に対するアクセスを証明するのに十分な情報を提供することができる。コンピューティングリソースサービスプロバイダは、その同一性及び証拠を、図１５の認証システム１５１８などの認証サービスに提供することができ、この認証システムがその後、要求側の同一性及び信用証明書の証拠を検証することができる。ひとたび要求側の同一性が検証されると、コンピューティングリソースサービスプロバイダまたは認証サービスは、同一性に関連するセキュリティポリシー及び／またはロールが、このリクエストが満たされることを許可するのに十分な特権を授与するかどうかを判定することができる。
【０１０９】
コンピューティングリソースサービスプロバイダが同一性を判定することができない（例えばセキュリティデータベース内に見つからない）、信用証明書の証拠が同一性を証明するのに不十分である（例えば間違ったパスワード）、または要求側の同一性が他の点で確認することができない場合、プロセス１０００を実施するシステムは、プロセス１０００においてさらに進むことはできない。プロセス１０００を実施するシステムは、要求側に対するエラーメッセージによって認証が失敗したことに対応する、かつ／またはセキュリティログに認証の失敗を登録することができる。それ以外では、要求側が認証され、ＳｔａｒｔＴａｓｋリクエストを満たすのに十分な特権を有すると判定された場合、プロセス１０００を実施するシステムは、１００６に進むことができる。
【０１１０】
１００６において、プロセス１０００を実施するシステムは、どのコンテナインスタンスにおいてタスクを開始するかを決定することができる。一部の実施形態において、図２に関連して記載されるスケジューラ２０８などのコンテナサービスのスケジューラが、特定されたクラスタのどのコンテナインスタンス及び／またはコンテナインスタンスのリストのどのコンテナインスタンスにおいて配置スキームに従って１つまたは複数のタスクが開始されるべきか決定する場合もある。配置スキームは、様々な配置スキームのいずれであってもよく、これにはラウンドロビン、擬似乱数確率的配置スキームまたはコンテナの状態（例えば利用可能なリソースの現在の量など）を考慮する配置スキームが含まれる。一部の実施態様において、アカウントの顧客が、仮想マシンインスタンス内にスケジューラアプリケーションをインストールさせる場合もある。そのような実施態様では、ＳｔａｒｔＴａｓｋアプリケーションプログラミングインターフェースコールは、パラメータとしてインストールされたスケジューラの場所を示すＩＤまたはリソースロケータを受け取る場合があり、プロセス１０００はさらに、インストールされたスケジューラと通信するプロセス１０００を実施するシステムを含むことで、どのコンテナインスタンスにおいて１つまたは複数のタスクを起動させるべきかを決定する場合もある。場合によっては、特定されたタスクが既に開始されている場合がある。そのような場合では、プロセス１０００を実施するシステムは、稼働中のタスクを停止し、タスクを再始動することができる。このようなケースの一部では、プロセス１０００を実施するシステムはタスクが既に開始されていることを通知し、稼働中のタスクを停止させタスクを再始動するかどうかの確認を要求する場合もある。
【０１１１】
一部の状況において、プロセス１０００を実施するシステムが、１つまたは複数のタスクを起動するのにクラスタまたはコンテナインスタンスのリストにおいて利用可能なリソースが不十分であると判断する場合がある。例えばタスク定義ファイルは、特定されるクラスタのコンテナインスタンスにおいて現在利用できるものよりも、より多くのメモリをソフトウェアコンテナに割り当てるべきと特定している場合がある。このような場合の一部では、プロセス１０００を実施するシステムは、所定の期間（例えば１０ミリ秒）の間待機し、再びタスクを開始するように試み、システムがタスクを開始することができるまで、または試行の閾値の回数が行われるまで繰り返す場合もある。
【０１１２】
プロセス１０００を実施するシステムが、タスクを開始することができない場合、システムは、特定の問題に遭遇したために、タスクを開始させることができないことを要求側に通知することができる。一部の実施態様では、タスクを開始するのに利用可能なリソースが不十分である場合、コンテナサービスは、自動スケーリングサービスと相互作用してタスクの開始をサポートするために追加のリソースを生成する場合もある。例えばプロセス１０００を実施するシステムは、１つまたは複数の新たなコンテナインスタンスをインスタンス化しクラスタに登録し、この新たなコンテナインスタンスにおいて１つまたは複数のタスクを開始することができる。別の例として、プロセス１０００を実施するシステムは、コンテナインスタンスのスナップショットを撮影し、更新されたリソース（例えば処理能力及びメモリ）によってコンテナインスタンスを再始動し、このスナップショットからコンテナインスタンスを復元する場合もある。
【０１１３】
１００８において、プロセス１０００を実施するシステムは、決定されたコンテナインスタンスにおいてコンテナイメージまたは特定されたアプリケーションを起動することができる。指摘したように、コンテナイメージまたは特定されたアプリケーションをコンテナインスタンスにおいて起動することは、タスクに関して１つまたは複数のタスクＩＤを生成すること、決定されたコンテナインスタンスＩＤに関連する図２のデータベース２１６などのデータストアにタスクＩＤを記憶すること、コンテナのために別のネーム空間を特定すること、特定されたリソースをコンテナに割り当てること、及び特定されたコンテナイメージ及び／または特定されたアプリケーションをコンテナネーム空間において復元することを含んで良い。これは、タスク定義において定義された各々のコンテナに対して行われて良い。タスク定義はまた、コンテナ間の関連性を示す場合もあり、例えばウェブサービスとして機能するように構成されたコンテナが、データベースとして機能するように構成されたコンテナにリンクされる場合があり、２つのコンテナは、それらが起動される際、互いに通信するように構成されて良い。同様に一部の実施態様においては、コンテナが、コンピューティングリソースサービスプロバイダの他のサービスの特定されたリソースを共有する場合もある。例えばタスク定義ファイルは、２つのコンテナが特定のブロック−レベルデータ記憶ボリュームを共有することを特定する場合もある。
【０１１４】
起動されると、プロセスを実施するシステムは、１つまたは複数のタスクの起動が成功したことを要求側に通知することができる。場合によっては、これは、タスクが開始され、タスクが特定のクラスタまたはインスタンスにおいて現在稼働中であることを示すように監視インターフェースのアイコンを変える状況である場合もある。別の場合では、これは、イベントのロギングの状況である場合もある。さらに別の場合では、要求側は、稼働中のタスクに対応する、システムから有効なタスクＩＤを受け取ることによって通知される場合もある。稼働中のタスクのリストはＬｉｓｔＴａｓｋｓアプリケーションプログラミングインターフェースコールから取得することができる。ＤｅｓｃｒｉｂｅＴａｓｋアプリケーションプログラミングインターフェースを使用してタスクＩＤを特定することによって、コンテナの健全性、コンテナの寿命及びコンテナによって利用されるリソースなどのタスクに関するデータを取得することができる。
【０１１５】
図１１は、種々の実施形態によるタスクを停止するためのプロセス１１００の一例を示すブロック図である。プロセス１１００は、データセンター内のサーバ、コンピューティングリソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイスまたは図１６に関連して記載される電子クライアントデバイス１６０２などの電子クライアントデバイスなどの任意の好適なシステムによって実施されて良い。プロセス１１００は一連の動作を含み、その中で停止させるタスクを特定する停止タスクリクエストが受信され、要求側が認証され、特定されたタスクが停止されることによってタスクに割り当てられたリソースを解放する。
【０１１６】
１１０２において、コンピューティングリソースサービスプロバイダが、稼働中のタスクを停止するためのアプリケーションプログラミングインターフェースコールを受信する。場合によっては、このアプリケーションプログラミングインターフェースコールが、顧客またはコンテナサービスの外部の他のエンティティからフロントエンドサービスに受信される場合もある。別の場合では、コンテナエージェントは、タスクを停止するためのスケジューラからの通信に応じてアプリケーションプログラミングインターフェースコールを行う場合もある。ＳｔｏｐＴａｓｋは、パラメータとして、稼働中のタスクの１つまたは複数のタスクＩＤを受け取ることができる。１１０４において、コンピューティングリソースサービスプロバイダが、要求側がリクエストを満たすのに十分な特権を有するかを判定する。例えば要求側は、パラメータとして、ＳｔｏｐＴａｓｋアプリケーションプログラミングインターフェースコールに同一性及び信用証明書を所有する証拠を与えることができる。例えば要求側は、同一性に相当する信用証明書を所有する証拠として、パスワード、暗号ハッシュ／パスワードのダイジェスト、署名暗号キーによって生成される暗号デジタル署名、または要求側の同一性を認めるためにコンピューティングリソースサービスプロバイダによって検証可能な他のシークレットキーなどの信用証明書に対するアクセスを証明するのに十分な情報を提供することができる。コンピューティングリソースサービスプロバイダは、その同一性及び証拠を、図１５の認証システム１５１８などの認証サービスに提供することができ、この認証システムがその後、要求側の同一性及び信用証明書の証拠を検証することができる。ひとたび要求側の同一性が検証されると、コンピューティングリソースサービスプロバイダまたは認証サービスは、同一性に関連するセキュリティポリシー及び／またはロールが、このリクエストが満たされることを許可するのに十分な特権を授与するかどうかを判定することができる。
【０１１７】
コンピューティングリソースサービスプロバイダが同一性を判定することができない（例えばセキュリティデータベース内に見つからない）、信用証明書の証拠が同一性を証明するのに不十分である（例えば間違ったパスワード）、または要求側の同一性が他の点で確認することができない場合、プロセス１１００を実施するシステムは、プロセス１１００においてさらに進むことはできない。プロセス１１００を実施するシステムは、要求側に対するエラーメッセージによって認証が失敗したことに対応する、及び／またはセキュリティログに認証の失敗を登録することができる。それ以外では、要求側が認証されタスク停止（ＳｔｏｐＴａｓｋ）リクエストを満たすのに十分な特権を有すると判定された場合、プロセス１１００を実施するシステムは、１１０６に進むことができる。
【０１１８】
１１０６において、特定された稼働中の１つまたは複数のタスクが停止されて良く、１つまたは複数のタスクに予め割り当てられたリソースが解放される／ガーベジコレクタされ、ホストコンテナインスタンスの利用可能なリソースに加えることができる。場合によっては、タスクＩＤが、ディスエーブルされる、アーカイブされる、またはデータストアから除去される場合もある。別の場合では、タスクの状況が「停止された」に更新される場合もあり、このような状況の変化は、稼働中のタスクの状況を確認するためにいずれのインターフェースに反映される場合もある。タスクＩＤに対応付けられたタスクの停止に成功したことが要求側に通知される場合もある。
【０１１９】
図１２は、種々の実施形態によるコンテナインスタンスの登録を取り消すためのプロセス１２００の一例を示すブロック図である。プロセス１２００は、データセンター内のサーバ、コンピューティングリソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイスまたは図１６に関連して記載される電子クライアントデバイス１６０２などの電子クライアントデバイスなどの任意の好適なシステムによって実施されて良い。プロセス１２００は一連の動作を含み、その中でタスク定義の登録を取り消すためのリクエストが受信され、要求側が認証され、要求側が十分な特権を有する場合、タスク定義の登録を取り消すことができる。
【０１２０】
１２０２において、コンピューティングリソースサービスプロバイダが、タスクの登録を取り消すためのアプリケーションプログラミングインターフェースコールを受信する。場合によっては、このリクエストは、顧客または他のエンティティからコンテナサービスに受信される場合もある。タスクの登録の取り消しは、タスクをディスエーブルする、アーカイブするまたはタスクを登録するためのプロセス９００に従って登録されたデータストアから除去することを含むことができる。よってプロセス９００において生成されたタスク定義ＩＤには、どのタスクが登録を取り消されるべきかを特定するためのＤｅｒｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎアプリケーションプログラミングインターフェースコールが備わっている場合がある。
【０１２１】
１２０４において、コンピューティングリソースサービスプロバイダが、要求側がリクエストを満たすのに十分な特権を有するかを判定する。例えば要求側は、パラメータとして、ＤｅｒｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎアプリケーションプログラミングインターフェースコールに同一性及び信用証明書を所有する証拠を与えることができる。例えば要求側は、同一性に相当する信用証明書を所有する証拠として、パスワード、暗号ハッシュ／パスワードのダイジェスト、署名暗号キーによって生成される暗号デジタル署名、または要求側の同一性を認めるためにコンピューティングリソースサービスプロバイダによって検証可能な他のシークレットキーなどの信用証明書に対するアクセスを証明するのに十分な情報を提供することができる。コンピューティングリソースサービスプロバイダは、その同一性及び証拠を、図１５の認証システム１５１８などの認証サービスに提供することができ、この認証システムがその後、要求側の同一性及び信用証明書の証拠を検証することができる。ひとたび要求側の同一性が検証されると、コンピューティングリソースサービスプロバイダまたは認証サービスは、同一性に関連するセキュリティポリシー及び／またはロールが、このリクエストが満たされることを許可するのに十分な特権を授与するかどうかを判定することができる。
【０１２２】
コンピューティングリソースサービスプロバイダが同一性を判定することができない（例えばセキュリティデータベース内に見つからない）、信用証明書の証拠が同一性を証明するのに不十分である（例えば間違ったパスワード）、または要求側の同一性が他の点で確認することができない場合、プロセス１２００を実施するシステムは、プロセス１２００においてさらに進むことはできない。プロセス１２００を実施するシステムは、要求側に対するエラーメッセージによって認証が失敗したことに対応する、及び／またはセキュリティログに認証の失敗を登録することができる。それ以外では、要求側が認証されＤｅｒｅｇｉｓｔｅｒＴａｓｋＤｅｆｉｎｉｔｉｏｎリクエストを満たすのに十分な特権を有すると判定された場合、プロセス１２００を実施するシステムは、１２０６に進むことができる。
【０１２３】
１２０６において、プロセス１２００を実施するシステムは、タスク定義をディスエーブルする、アーカイブするまたは９０６においてタスク定義が記憶されたデータストアから除去することを含むことができる。タスク定義とクラスタ、コンテナインスタンス、ソフトウェアイメージまたは他のコンテナとの関係性を示すいかなるデータエントリも同様にディスエーブルされる、アーカイブされるまたは除去されて良い。場合によっては、タスク定義に対応付けられた１つまたは複数のタスクが稼働中である場合、タスクを停止するためのプロセス１１００に従ってタスクを停止させることができる。タスクがひとたび登録を取り消されると、タスクの登録の取り消しが成功したことを要求側に通知することができる。
【０１２４】
図１３は、種々の実施形態によるコンテナインスタンスの登録を取り消すためのプロセス１３００の一例を示すブロック図である。プロセス１３００は、データセンター内のサーバ、コンピューティングリソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイスまたは図１６に関連して記載される電子クライアントデバイス１６０２などの電子クライアントデバイスなどの任意の好適なシステムによって実施されて良い。プロセス１３００は一連の動作を含み、その中でクラスタから登録されたコンテナインスタンスの登録を取り消すためのリクエストが受信され、要求側が認証され、コンテナインスタンスがクラスタから登録を取り消される。
【０１２５】
１３０２において、コンピューティングリソースサービスプロバイダが、顧客または他のエンティティからコンテナインスタンスの登録を取り消すためのアプリケーションプログラミングインターフェースコールを受信する。コンテナインスタンスの登録取り消しには、コンテナインスタンスを登録するためのプロセス８００に従って登録されたコンテナインスタンスを特定されたクラスタから分離することを含んで良い。この関連性は、ＤｅｒｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅアプリケーションプログラミングインターフェースコールのパラメータとして渡された登録されたコンテナインスタンスのＩＤと、クラスタＩＤとの関係として、図２のデータベース２１６などのデータベースにおいて見いだすことができる。場合によっては、このリクエストは、フロントエンドサービスから受信され、コンテナエージェントに伝達される場合もあり、このコンテナエージェントがそのそれぞれのコンテナインスタンスの登録を取り消す。別の場合では、このリクエストはコンテナエージェントからフロントエンドサービスに対して行われる場合もある。例えばコンテナインスタンスが設定を取り消され、クラスタから除去され、異なるクラスタに移動される際、コンテナエージェントは自動的に、コンテナインスタンスが現在登録されているクラスタからコンテナインスタンスの登録を取り消そうとすることができる。このような場合の一部では、要求側が、ＤｅｓｃｒｉｂｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールによって明らかになり得る、登録されたコンテナのインスタンスＩＤを特定する場合もあり、プロセス１３００を実施するシステムは、コンテナインスタンスが登録される全てのクラスタから特定されたコンテナインスタンスの登録を取り消すことができる。場合によっては、コンテナインスタンスが複数のクラスタに登録される場合、プロセス１３００を実施するシステムが、どの１つまたは複数のクラスタからコンテナインスタンスの登録が取り消されるべきかの確認を要求側に促す場合もある。その別の場合では、インスタンスＩＤとクラスタＩＤの両方がパラメータとしてＤｅｒｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅアプリケーションプログラミングインターフェースコールに渡される場合もあり、１３０４において判定されたように要求側が十分な特権を有することを前提として、特定されたクラスタからコンテナインスタンスの登録を取り消すことができる。
【０１２６】
１３０４において、コンピューティングリソースサービスプロバイダが、要求側がリクエストを満たすのに十分な特権を有するかを判定する。例えば要求側は、パラメータとして、ＤｅｒｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅアプリケーションプログラミングインターフェースコールに同一性及び信用証明書を所有する証拠を与えることができる。例えば要求側は、同一性に相当する信用証明書を所有する証拠として、パスワード、暗号ハッシュ／パスワードのダイジェスト、署名暗号キーによって生成される暗号デジタル署名、または要求側の同一性を認めるためにコンピューティングリソースサービスプロバイダによって検証可能な他のシークレットキーなどの信用証明書に対するアクセスを証明するのに十分な情報を提供することができる。コンピューティングリソースサービスプロバイダは、その同一性及び証拠を、図１５の認証システム１５１８などの認証サービスに提供することができ、その後、要求側の同一性及び信用証明書の証拠を検証することができる。ひとたび要求側の同一性が検証されると、コンピューティングリソースサービスプロバイダまたは認証サービスは、同一性に関連するセキュリティポリシー及び／またはロールが、このリクエストが満たされることを許可するのに十分な特権を授与するかどうかを判定することができる。
【０１２７】
コンピューティングリソースサービスプロバイダが同一性を判定することができない（例えばセキュリティデータベース内に見つからない）、信用証明書の証拠が同一性を証明するのに不十分である（例えば間違ったパスワード）、または要求側の同一性が他の点で確認することができない場合、プロセス１３００を実施するシステムは、プロセス１３００においてさらに進むことはできない。プロセス１３００を実施するシステムは、要求側に対するエラーメッセージによって認証が失敗したことに対応する、及び／またはセキュリティログに認証の失敗を登録することができる。それ以外では、要求側が認証されＲｅｇｉｓｔｅｒＣｏｎｔａｉｎｅｒＩｎｓｔａｎｃｅリクエストを満たすのに十分な特権を有すると判定された場合、プロセス１３００を実施するシステムは、１３０６に進むことができる。
【０１２８】
１３０６において、プロセス１３００を実施するシステムは、コンテナインスタンスが登録されたデータストア内で特定されたインスタンスＩＤを捜すことができる。特定されたコンテナインスタンス内で稼働中のタスクは、コンテナインスタンスの登録が取り消される前に、タスクを停止するためのプロセス１１００に従って停止させることができることに留意されたい。場合によっては、特定されたコンテナインスタンス内でタスクが稼働中である場合、プロセス１３００を実施するシステムが、システムがコンテナインスタンスの登録を取り消す前に、稼働中のタスクを停止するために要求側からの確認を要求する場合もある。指摘したように、一部の実施態様において、コンテナインスタンスが、複数のクラスタに登録される場合もあり、要求側は、クラスタのサブセットから登録が取り消されるべきコンテナインスタンスのみを特定することができる。そのような実施態様では、クラスタの特定されたサブセットに対応付けられたタスクがコンテナインスタンス内で稼働中であり、停止させるべきと要求側から確認された場合、クラスタの特定されたサブセットに対応するタスクのみが停止されて良く、稼働中の残りのタスクはそのまま残されて良い。
【０１２９】
１３０８において、インスタンスＩＤがデータベース内で見つけられ、関連するタスクが停止された後、インスタンスＩＤがディスエーブルされる、アーカイブされる、またはデータストアから除去することができる。場合によっては、インスタンスの状況を「登録が取り消された（Ｄｅｒｅｇｉｓｔｅｒｅｄ）」に更新させることができ、この状況の変化は、クラスタの状況をとらえるためにいずれのインターフェースにも反映され得る。コンテナインスタンスが複数のクラスタに登録される場合、特定されたコンテナインスタンスをクラスタの特定されたサブセットのみから分離させることができ、コンテナインスタンスは、クラスタの残りに登録されたままにすることができる。ひとたび登録が取り消されると、インスタンスに対応付けられたコンテナインスタンスが、それが登録された１つまたは複数のクラスタにおいて登録の取り消しが成功したことを要求側に通知することができる。
【０１３０】
いずれのクラスタにも登録されないコンテナインスタンスは、本開示の一部の実施態様では設定が取り消され、コンテナインスタンスに割り当てられたいずれのリソースも自由にされて良い。あるいはコンテナインスタンスは、クラスタに登録されるように利用可能なインスタンスのキューに加えられる場合もある。この方法において、コンテナインスタンスをコンテナインスタンスを登録するためのプロセス８００に従ってクラスタに登録させる必要がある場合、登録のために新たなコンテナインスタンスの設定作業のオーバーヘッドなしで、利用可能なコンテナインスタンスからコンテナインスタンスを選択することができる。
【０１３１】
図１４は、種々の実施形態によるクラスタを削除するためのプロセス１４００の一例を示すブロック図である。プロセス１４００は、データセンター内のサーバ、コンピューティングリソースサービスプロバイダの分散システムにおける複数のコンピューティングデバイスまたは図１６に関連して記載される電子クライアントデバイス１６０２などの任意の電子クライアントデバイスなどの任意の好適なシステムによって実施されて良い。プロセス１４００は一連の動作を含み、その中でクラスタを削除するためのリクエストが受信され、要求側が認証され、クラスタ内の任意のコンテナインスタンスが登録を取り消され、クラスタが削除される、またはそれ以外ではディスエーブルにされる。
【０１３２】
１４０２において、コンピューティングリソースサービスプロバイダが、顧客または他のエンティティからクラスタを削除するためのアプリケーションプログラミングインターフェースコールを受信する。削除すべきクラスタは、コンピューティングリソースサービスプロバイダによって提供されたデフォルトクラスタであって良い、またはクラスタを形成するためのプロセス７００に従って形成されたクラスタの場合もある。ＤｅｌｅｔｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースが、パラメータとして、削除すべきクラスタのクラスタＩＤを受け取っても良い。クラスタＩＤ及びクラスタメタデータはその結果、図２のデータベース２１６などのデータストアに記憶されて良い。このクラスタＩＤは、クラスタが形成されたとき、要求側に提供されている、またはＬｉｓｔＣｌｕｓｔｅｒｓアプリケーションプログラミングインターフェースコールから特定される場合もある。
【０１３３】
１４０４において、コンピューティングリソースサービスプロバイダが、要求側がリクエストを満たすのに十分な特権を有するかを判定する。例えば要求側は、パラメータとして、ＤｅｌｅｔｅＣｌｕｓｔｅｒアプリケーションプログラミングインターフェースコールに同一性及び信用証明書を所有する証拠を与えることができる。例えば要求側は、同一性に相当する信用証明書を所有する証拠として、パスワード、暗号ハッシュ／パスワードのダイジェスト、署名暗号キーによって生成される暗号デジタル署名、または要求側の同一性を認めるためにコンピューティングリソースサービスプロバイダによって検証可能な他のシークレットキーなどの信用証明書に対するアクセスを証明するのに十分な情報を提供することができる。コンピューティングリソースサービスプロバイダは、その同一性及び証拠を、図１５の認証システム１５１８などの認証サービスに提供することができ、この認証システムがその後、要求側の同一性及び信用証明書の証拠を検証することができる。ひとたび要求側の同一性が検証されると、コンピューティングリソースサービスプロバイダまたは認証サービスは、同一性に関連するセキュリティポリシー及び／またはロールが、このリクエストが満たされることを許可するのに十分な特権を授与するかどうかを判定することができる。
【０１３４】
コンピューティングリソースサービスプロバイダが同一性を判定することができない（例えばセキュリティデータベース内に見つからない）、信用証明書の証拠が同一性を証明するのに不十分である（例えば間違ったパスワード）、または要求側の同一性が他の点で確認することができない場合、プロセス１４００を実施するシステムは、プロセス１４００においてさらに進むことはできない。プロセス１４００を実施するシステムは、要求側に対するエラーメッセージによって認証が失敗したことに対応する、及び／またはセキュリティログに認証の失敗を登録することができる。それ以外では、要求側が認証されＤｅｌｅｔｅＣｌｕｓｔｅｒリクエストを満たすのに十分な特権を有すると判定された場合、プロセス１４００を実施するシステムは、１４０６に進むことができる。
【０１３５】
１４０６において、任意のコンテナインスタンスが特定のクラスタに登録される場合、コンテナインスタンスの登録を取り消すためのプロセス１３００に従ってコンテナインスタンスの各々の登録をクラスタから取り消すことができる。１４０８において、特定されたクラスタＩＤに対応付けられたクラスタに関する１つまたは複数のエントリがデータストア内に定められ、ディスエーブルされる、アーカイブされる、またはデータストアから除去することができる。クラスタがディスエーブルされるまたはアーカイブされた場合、このクラスタに関するメタデータは保存され、クラスタは、それを行うため権限を有するエンティティによって復活させることができる。その後、クラスタの削除が成功し、コンテナインスタンスをもはやこのクラスタＩＤに登録することができないことを要求側に通知することができる。例えば、クラスタの状況を表示するインターフェースが、特定されたクラスタに関して「Ｄｅｌｅｔｅｄ（削除された）」と表すように更新されて良く、このクラスタはもはや、ＬｉｓｔＣｌｕｓｔｅｒｓアプリケーションプログラミングインターフェースコール応答において反映されない。
【０１３６】
図１５は、少なくとも一実施形態によるコンピューティングリソースサービスプロバイダに接続された顧客の一例を示す。コンピューティングリソースサービスプロバイダ１５０２は、様々な種類のサービスを顧客１５０４に提供することができ、顧客１５０４は、インターフェース１５２６を介してコンピューティングリソースサービスプロバイダ１５０２と通信することができ、ウェブサービスインターフェースまたは任意の他のタイプの顧客インターフェースであって良い。図１５は、コンピューティングリソースサービスプロバイダ１５０２のサービスに関して１つのインターフェース１５２６を示しているが、各々のサービスは、その独自のインターフェースを有することができ、一般に、サービスのサブセットは、インターフェース１５２６に加えて、またはその代替として対応するインターフェースを有することができる。顧客１５０４は、コンピューティングリソースサービスプロバイダ１５０２によって提供される１つまたは複数のサービスを利用して、情報を保持し、種々の地理的な場所に配置され得るその従業員に配信することができる１つの組織であって良い。加えて顧客１５０４は、コンピューティングリソースサービスプロバイダ１５０２のサービスを利用して離れた場所に位置する作業グループにコンテンツを配信する個人である場合もある。図１５に示されるように、顧客１５０４は、ネットワーク１５０６を介して、コンピューティングリソースサービスプロバイダ１５０２と通信することができるため、ネットワーク１５０６は、インターネットまたはイントラネットまたはインターネットサービスプロバイダ（ＩＳＰ）ネットワークなどの通信ネットワークであって良い。顧客１５０４からコンピューティングリソースサービスプロバイダ１５０２への何らかの通信によって、記載される１つまたは複数の実施形態またはその変形形態に従ってコンピューティングリソースサービスプロバイダ１５０２を動作させることができる。 
【０１３７】
コンピューティングリソースサービスプロバイダ１５０２は、その顧客に対して様々なコンピューティングリソースサービスを提供することができる。コンピューティングリソースサービスプロバイダ１５０２によって提供されるサービスには、この例では、仮想コンピュータシステムサービス１５０８、ブロック−レベルデータ記憶サービス１５１０、暗号サービス１５１２、オンデマンドデータ記憶サービス１５１４、通知サービス１５１６、認証システム１５１８、ポリシー管理サービス１５２０、コンテナサービス１５２２及び１つまたは複数の他のサービス１５２４が含まれる。記載される全ての実施形態が、図１５を参照して記載されるサービス１５０８〜２４を含むわけではなく、はっきりと記載されるサービスに加えて、またはその代替として追加のサービスが提供される場合もあることに留意されたい。記載されるように、サービス１５０８〜２４の各々は、顧客１５０４がウェブサービスリクエストを介して、種々のサービスに対して適切に構成されたＡＰＩコールを提示することを可能にする１つまたは複数のウェブサービスインターフェースを含むことができる。加えて、サービスの各々は、サービスが互いにアクセスすることを可能にする（例えば仮想コンピュータシステムサービス１５０８がオンデマンドデータ記憶サービス１５１４にデータを記憶するもしくはそこからデータを取り出すことを可能にする、及び／またはブロック−レベルデータ記憶サービス１５１０によって提供された１つまたは複数のブロック−レベルデータ記憶デバイスにアクセスすることを可能にする）１つまたは複数のサービスインターフェースを含むことができる。
【０１３８】
仮想コンピュータシステムサービス１５０８は、顧客１５０４に代わって仮想マシンインスタンスをインスタンス化するように構成されたコンピュータリソースの集まりであって良い。顧客１５０４は、仮想コンピュータシステムサービス１５０８と対話することで（適切に構成され認証されたＡＰＩコールを介して）、コンピューティングリソースサービスプロバイダ１５０２によってホストされ動作する物理的コンピューティングデバイス上でインスタンス化された仮想コンピュータシステムを準備し動作させることができる。仮想コンピュータシステムは、例えばウェブサイトをサポートするサーバとして動作する、ビジネスアプリケーションを動作させる、または顧客のための計算機能力として機能するなど様々な目的で使用されて良い。仮想コンピュータシステムに関する他の利用は、データベースアプリケーション、電子商取引アプリケーション、ビジネスアプリケーション及び／または他のアプリケーションをサポートするためのものである場合もある。仮想コンピュータシステムサービス１５０８が図１５に示されているが、仮想化またはインスタンス化を利用せず、代わりに専用または共有コンピュータ／サーバ及び／または他の物理デバイス上にコンピューティングリソースを備えるコンピュータシステムまたはコンピュータシステムサービスなどの他のコンピュータシステムまたはコンピュータシステムサービスがコンピューティングリソースサービスプロバイダ１５０２において利用される場合もある。
【０１３９】
ブロック−レベルデータ記憶サービス１５１０は、ブロック−レベル記憶デバイス（及び／またはその仮想化）を利用して顧客１５０４のためにデータを記憶するように集団で作動する１つまたは複数のコンピューティングリソースを備えることができる。ブロック−レベルデータ記憶サービス１５１０のブロック−レベル記憶デバイスは、例えば仮想コンピュータシステムサービス１５０８によって提供される仮想コンピュータシステムに対して作動可能に装着されることで、コンピュータシステムに関する論理ユニット（例えば仮想ドライブ）として機能することができる。ブロック−レベル記憶デバイスは、対応する仮想コンピュータシステムによって使用される／生成されるデータの持続的な記憶を可能にすることができ、この場合仮想コンピュータシステムサービス１５０８は短時間しか続かないデータ記憶のみを提供することができる。
【０１４０】
コンピューティングリソースサービスプロバイダ１５０２はまた、暗号サービス１５１２も含む。暗号サービス１５１２は、コンピューティングリソースサービスプロバイダ１５０２の１つまたは複数の暗号サービスを利用して、顧客のキーを暗号化された形態で記憶することができ、これによりこれらのキーは、暗号サービス１５１２の特定のデバイスのみにアクセス可能な顧客１５０４キーのみを解読するのに利用可能であって良い。
【０１４１】
コンピューティングリソースサービスプロバイダ１５０２はさらに、オンデマンドデータ記憶サービス１５１４を含む。オンデマンドデータ記憶サービス１５１４は、データを記憶する及び／またはデータにアクセスするためのリクエストを同時に処理するように構成されたコンピュータリソースの集まりであって良い。オンデマンドデータ記憶サービス１５１４は、オンデマンドデータ記憶サービス１５１４がデータを迅速に捜し出し、取り出すことを可能にするコンピューティングリソース（例えばデータベース）を利用して動作することで、データに対するリクエストに応答してデータを提供することを可能にすることができる。例えばオンデマンドデータ記憶サービス１５１４は、データオブジェクトに対するリクエストが引き出される際、このリクエストに応答してデータオブジェクトを提供することができる（またはデータオブジェクトのストリーミングを開始することができる）ように記憶されたデータを保持することができる。指摘したように、オンデマンドデータ記憶サービス１５１４に記憶されたデータは、データオブジェクトに編成することができる。データオブジェクトは、場合によってはサイズに関する特定の制約以外は、任意のサイズを有することができる。よってオンデマンドデータ記憶サービス１５１４は、多様なサイズの多くのデータオブジェクトを記憶することができる。オンデマンドデータ記憶サービス１５１４は、オンデマンドデータ記憶サービス１５１４によって記憶されたデータオブジェクトに関連して他の動作を引き出すまたは実行するために顧客１５０４によって使用され得るデータオブジェクトの識別子に、データオブジェクトを対応付けるキー値ストアとして作動する場合もある。
【０１４２】
図１５に示される環境には通知サービス１５１６が含まれる。通知サービス１５１６は、ウェブサービスまたは他のインターフェース及びブラウザベースの管理コンソールを集団で提供するように構成されたコンピュータリソースの集まりを含むことができる。管理コンソールを使用して、顧客が通知を受信しようとするトピックを構成する、アプリケーション（またはピープル）を構成する、そのトピックに対してクライアントを記名する、メッセージを公開する、または選択のクライアントのプロトコルを介してメッセージの配信を構成する（すなわち中でもハイパーテキストトランスファープロトコル（ＨＴＴＰ）、ｅメール及びショートメッセージサービス（ＳＭＳ））ことができる。通知サービス１５１６は、新たな情報及び最新情報を求めて周期的にチェックする、または「ポーリングする」必要なしに「プッシュ」機構を利用してクライアントに通知を提供することができる。通知サービス１５１６はさらに、仮想コンピュータシステムサービス１５０８内で実行中の監視アプリケーション、ワークフローシステム、時間に制約のある情報の更新、モバイルアプリケーション及び多くの他のものなどの種々の目的のために使用することもできる。
【０１４３】
図１５に示されるように、コンピューティングリソースサービスプロバイダ１５０２は、種々の実施形態において、認証システム１５１８と、ポリシー管理サービス１５２０とを含む。認証システム１５１８は、一実施形態において、顧客のユーザの認証に関連する動作を行うように構成されたコンピュータシステム（すなわちコンピュータリソースの集まり）である。例えばサービス１５０８〜１５１６及び１５２０〜２４の１つは、ユーザからの情報を認証システム１５１８に提供し、それと引き替えにユーザのリクエストが本物かどうかを示す情報を受け取ることができる。
【０１４４】
ポリシー管理サービス１５２０は一実施形態において、コンピューティングリソースサービスプロバイダ１５０２の顧客（例えば顧客１５０４）の代わりにポリシーを管理するように構成されたコンピュータシステムである。ポリシー管理サービス１５２０は、顧客がポリシーの管理に関連するリクエストを提示することを可能にするインターフェースを含むことができる。そのようなリクエストは、例えば追加する、削除する、変更するまたはそれ以外では顧客のために、もしくは既存のポリシーの登録簿を提供するなどの他の管理行動用にポリシーを改変するためのリクエストであって良い。
【０１４５】
コンピューティングリソースサービスプロバイダ１５０２は種々の実施形態において、コンテナサービス１５２２も装備している。コンテナサービス１５２２は、図２のコンテナサービス２００に関して記載したやり方でコンピューティングリソースサービスプロバイダの顧客１５０４のためにソフトウェアコンテナ及びコンテナインスタンスを形成し管理するように構成される。コンテナサービス１５２２は、例えばブロック−データ記憶サービス１５１０などのコンピューティングリソースサービスプロバイダ１５０２の他のリソースを使用するように構成される場合もある。例えばコンテナサービス１５２２によって、コンテナインスタンス内で稼働中のタスクが１つまたは複数の特定されたブロック−データ記憶ボリュームを共有するこを可能にすることができる。
【０１４６】
コンピューティングリソースサービスプロバイダ１５０２は付加的に、その顧客１５０４の要望に少なくともある程度基づいた１つまたは複数の他のサービス１５２４を保持する。例えばコンピューティングリソースサービスプロバイダ１５０２は、その顧客１５０４のためにデータベースサービスを保持する場合がある。データベースサービスは、１つまたは複数の顧客１５０４のために１つまたは複数のデータベースを稼働するように集団で作動するコンピュータリソースの集まりであって良い。顧客１５０４は、適切に構成されたＡＰＩコールを利用することによって、データベースサービスからあるデータベースを動作させ管理することができる。これにより、顧客１５０４がデータベースにおける動作を維持し、場合によっては拡大縮小することが可能になる。他のサービスには、これに限定するものではないがオブジェクト−レベルアーカイバルデータ記憶サービス及び他のサービスを管理及び／または監視するサービスが含まれる。
【０１４７】
別途指定のない限り、開示される実施形態に記載する文脈において、通常は自力で行われない命令（例えばデータの伝送、計算など）の施行を実行する実行可能命令（コード、アプリケーション、エージェントなどとも呼ばれる）に関する表現の利用は、マシンによって実行され、これによりマシンが特定される作用を果たすようにする命令を指すことに留意されたい。
【０１４８】
本開示の実施形態は、以下の条項を考慮して記載することができる。
１．実行可能命令を有するように構成された１つまたは複数のコンピュータシステムの制御の下で
クラスタ及びクラスタを識別するクラスタ識別子を形成し、前記クラスタが、このクラスタに対して登録され、１つまたは複数のソフトウェアコンテナを稼働するように構成された、コンピューティングリソースサービスプロバイダの顧客に対応付けられた一揃いのコンテナインスタンスを表すことと、
コンピュータシステムインスタンス内で実行するように構成されたソフトウェアコンテナのイメージを取得し、前記ソフトウェアコンテナがデータと、コンピュータシステムインスタンス内で実行される際、前記コンピュータシステムインスタンス内で稼働中の他のプロセスから隔離される１つまたは複数のプロセスとを含み、前記イメージが、前記イメージが生成されたときのソフトウェアコンテナの特定の状態の完全なコピーであることと、
タスク定義に従ってソフトウェアコンテナのイメージを含む一揃いのイメージを起動するためのリクエストを受信し、前記タスク定義が、前記ソフトウェアコンテナを含め１つのグループとして始動するように指定された一揃いのソフトウェアコンテナを識別し、前記一揃いのソフトウェアコンテナに対するリソースの割り当てを特定し、
前記リクエストが前記クラスタの前記クラスタ識別子を特定することと、
１つまたは複数のイメージを起動するリクエストに応答して、
一揃いのソフトウェアコンテナを中で起動する、前記クラスタ識別子によって特定された前記クラスタによって表される一揃いのコンテナインスタンスのサブセットを決定し、１つまたは複数のコンテナインスタンスが配置スキームに従って決定されることと、
タスク定義において特定されたリソースの割り当てに従って稼働中のソフトウェアコンテナにリソースが割り当てられるように、前記一揃いのコンテナインスタンスのサブセットにおいて稼働中のソフトウェアコンテナとして一揃いのイメージを起動することとを含む、コンピュータ実装式の方法。
２．前記一揃いのコンテナインスタンスのサブセットが、前記配置スキーム及び前記タスク定義に少なくともある程度基づいて一揃いのコンテナインスタンスのサブセットを決定するように構成されたマルチテナントスケジューラサービスによって決定される、条項１に記載のコンピュータ実装式の方法。
３．前記一揃いのイメージが、一揃いのコンテナインスタンスのサブセットにおいて稼働中の個々のコンテナエージェントによって起動させられ、前記個々のコンテナエージェントは、それぞれのコンテナインスタンスにおいて稼働し、稼働中のソフトウェアコンテナと、前記それぞれのコンテナインスタンスの外部のエンティティとの間の媒介手段として作用するように各々構成されたソフトウェアアプリケーションである、条項１または２に記載のコンピュータ実装式の方法。
４．前記方法がさらに、前記稼働中のソフトウェアコンテナに関するメトリック及びログ情報をテレメトリサービスに提供することを含み、前記テレメトリサービスが、前記メトリック及びログ情報を集約し、前記集約されたメトリック及びログ情報をリソース監視サービスに提供する、条項１〜３のいずれかに記載のコンピュータ実装式の方法。
５．１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサによって実行される際、
対応する一揃いのコンテナエージェントをホストする前記一揃いのコンテナインスタンスに関する配置リクエストを受信し、
タスク定義によって特定されたリソースが前記一揃いのコンテナインスタンスにおいて利用可能であることを保証し、
前記一揃いのコンテナインスタンス内の一揃いの稼働中のコンテナの状態に関して前記一揃いのコンテナエージェントから情報を受信し、
その情報をスケジューラに提供する、
バックエンドサービスと、
配置スキーム、前記タスク定義及び前記バックエンドサービスによって提供された情報に少なくともある程度基づいて、
前記一揃いのコンテナの個々のコンテナを中に配置すべきクラスタに登録された前記一揃いのコンテナインスタンスのサブセットを決定し、
前記タスク定義によって特定された前記個々のコンテナに割り当てるべきリソースに従って前記サブセット内の前記個々のコンテナに対してリソースを割り当てるように前記コンテナエージェントに通知し、
前記サブセットにおいて及び前記タスク定義によって特定されたソフトウェアイメージの場所から、前記一揃いの稼働中のコンテナとして前記一揃いのコンテナを起動するように前記コンテナエージェントに通知するスケジューラとを
少なくともシステムに実施させる命令を含むメモリとを備えるシステム。
６．前記一揃いのコンテナインスタンスのサブセットが、コンピューティングリソースサービスプロバイダのマルチテナントスケジューラサービスによって決定される、条項５に記載のシステム。
７．前記一揃いのコンテナインスタンスのサブセットが、コンピューティングリソースサービスプロバイダの顧客によってインストールされたスケジューラアプリケーションによって決定される、条項５または６に記載のシステム。
８．前記命令がさらに、前記１つまたは複数のプロセッサによって実行される際、前記一揃いの稼働中のコンテナ内で稼働中のプロセスについてテレメトリサービスのためにデータを収集するテレメトリエージェントをシステムに実装させる命令を含み、前記テレメトリサービスが前記データを集約し、前記集約されたデータをリソース監視サービスに提供する、条項５〜７のいずれかに記載のシステム。
９．前記システムに前記一揃いのコンテナインスタンスのサブセットを決定させる命令が、前記１つまたは複数のプロセッサによって実行される際、前記一揃いのコンテナの個々のコンテナに割り当てるべきリソース、及び前記クラスタに登録された前記一揃いのコンテナインスタンスの個々のコンテナインスタンスにおいて利用可能なリソースの量に少なくともある程度基づいて、システムに前記一揃いのコンテナインスタンスのサブセットを決定させる命令を含む、条項５〜８のいずれかに記載のシステム。
１０．前記命令がさらに、前記１つまたは複数のプロセッサによって実行される際、前記タスク定義が、前記一揃いのコンテナに関して、前記一揃いのコンテナの個々のコンテナに関するソフトウェアイメージの場所及び前記一揃いのコンテナの個々のコンテナに割り当てるべきリソースを特定するように、前記タスク定義を生成するテンプレートサービスを前記システムに実装させる命令を含む、条項５〜９のいずれかに記載のシステム。
１１．前記命令がさらに、前記１つまたは複数のプロセッサによって実行される際、
前記一揃いのコンテナインスタンスを前記クラスタに登録し、
前記リソースを割り当てるためのスケジューラからの通知に応答して前記一揃いのコンテナインスタンスに対してリソースを割り当て、
前記一揃いのコンテナを起動するためのスケジューラからの通知に応答して前記一揃いの稼働中のコンテナとして前記一揃いのコンテナを起動し、
前記一揃いのコンテナインスタンスにおいて前記一揃いの稼働中のコンテナの状態を監視し、かつ
その状態に関する情報を前記バックエンドサービスに提供する、
前記一揃いのコンテナインスタンスにおいて稼働中の前記一揃いのコンテナエージェントをシステムに実装させる命令を含む、条項５〜１０のいずれかに記載のシステム。
１２．前記一揃いのコンテナエージェントが、前記個々のコンテナの通常の動作、前記個々のコンテナの状況、及び前記個々のコンテナによるエラーの発生を示す１つまたは複数の周期的な信号を提供するようにさらに構成される、条項１１に記載のシステム。
１３．前記一揃いのコンテナエージェントを実装する命令がさらに、前記１つまたは複数のプロセッサによって実行される際、
前記一揃いの稼働中のコンテナを稼働しないように停止させ、
前記一揃いのコンテナインスタンスの登録を前記クラスタから取り消し、かつ
前記クラスタを削除するように、前記システムに前記一揃いのコンテナエージェントを実装させる命令を含む、条項１１または１２に記載のシステム。
１４．コンピュータシステムの１つまたは複数のプロセッサによって実行される際、前記コンピュータシステムに少なくとも
コンピュータシステムインスタンス内で実行するように構成されたソフトウェアコンテナのソフトウェアイメージを取得し、
前記ソフトウェアコンテナのためのリソースの割り当てを特定するタスク定義に従ってソフトウェアイメージを起動するためのリクエストを受信し、
配置スキームに従って、前記タスク定義に従って前記ソフトウェアイメージを中で起動すべき一揃いのコンテナインスタンスを決定し、
前記タスク定義に従って前記一揃いのコンテナインスタンス内の１つまたは複数の稼働中のソフトウェアコンテナとして前記ソフトウェアイメージを起動するようにさせる、そこに記憶された実行可能命令を有する非一時的なコンピュータ可読記憶媒体。
１５．前記配置スキームが、ラウンドロビン配置スキームまたは確率的に指定された配置スキームの一方である、条項１４に記載の非一時的なコンピュータ可読記憶媒体。
１６．前記命令が、前記１つまたは複数のプロセッサによって実行される際、
アプリケーションプログラミングインターフェースコールに応答して、前記コンピュータシステムに一揃いのコンピュータシステムインスタンスを表すクラスタを形成させ、前記コンピュータシステムインスタンスがこのセットの１要素である命令をさらに含む、条項１４または１５に記載の非一時的なコンピュータ可読記憶媒体。
１７．前記コンピュータシステムに前記一揃いのコンテナインスタンスを決定させる命令がさらに、前記１つまたは複数のプロセッサによって実行される際、前記ソフトウェアイメージに割り当てられた１つまたは複数のセキュリティグループまたはセキュリティロールに少なくともある程度基づいて前記コンピュータシステムに一揃いのコンテナインスタンスを決定させる命令を含む、条項１４〜１６のいずれかに記載の非一時的なコンピュータ可読記憶媒体。
１８．前記命令が、前記１つまたは複数のプロセッサによって実行される際、アプリケーションプログラミングインターフェースコールに応答して、前記コンピュータシステムに、一揃いのコンテナインスタンスを表すクラスタにコンピュータシステムインスタンスを登録させる命令をさらに含む、条項１４〜１７に記載のいずれかの非一時的なコンピュータ可読記憶媒体。
１９．前記命令が、前記１つまたは複数のプロセッサによって実行される際、アプリケーションプログラミングインターフェースコールに応答して、前記コンピュータシステムに、コンピューティングリソースサービスプロバイダの顧客のアカウントにタスク定義を登録させる命令をさらに含む、条項１４〜１８のいずれかに記載の非一時的なコンピュータ可読記憶媒体。
２０．前記ソフトウェアイメージを起動するためのリクエストが、前記タスク定義に従って前記ソフトウェアイメージを起動するためのアプリケーションプログラミングインターフェースコールを介して受信されるリクエストである、条項１４〜１９のいずれかに記載の非一時的なコンピュータ可読記憶媒体。
２１．前記一揃いのコンテナインスタンスが、クラスタに対して登録されたコンテナインスタンスのサブセットであり、前記命令が、前記１つまたは複数のプロセッサによって実行される際、アプリケーションプログラミングインターフェースコールに応答して、前記コンピュータシステムに、前記クラスタに登録された前記コンテナインスタンス内でどのソフトウェアイメージが稼働中であるかに関する情報、及び前記クラスタに登録されたコンテナインスタンスにおいてどのリソースが利用可能であるかに関する情報を返すようにさせる命令をさらに含む、条項１４〜２０のいずれかに記載の非一時的なコンピュータ可読記憶媒体。
【０１４９】
図１６は、種々の実施形態による実施態様に関する一例の環境１６００の態様を示す。理解されるように、説明する目的でウェブベースの環境が使用されるが、種々の実施形態を実施するのに必要に応じて異なる環境が使用される場合もある。環境は、電子クライアントデバイス１６０２を含み、これは適切なネットワーク１６０４を介してリクエスト、メッセージまたは情報を送受信するように、また一部の実施形態では情報をデバイスのユーザに戻すように伝達するように動作可能な任意の適切なデバイスを含むことができる。そのようなクライアントデバイスの例には、パーソナルコンピュータ、携帯電話、手持ち式メッセージデバイス、ラップトップコンピュータ、タブレットコンピュータ、セットトップボックス、パーソナルデータアシスタント、エンベデッドコンピュータシステム、電子ブックリーダーなどが含まれる。ネットワークは、イントラネット、インターネット、セルラーネットワーク、ローカルエリアネットワーク、サテライトネットワークまたは任意の他のネットワーク及び／またはその組み合わせなどを含めた任意の適切なネットワークを含むことができる。そのようなシステムのために使用される構成要素は、選択されるネットワーク及び／または環境のタイプに少なくともある程度左右される可能性がある。そのようなネットワークを経由して通信するプロトコル及び構成要素はよく知られているため、詳細には考察しないことにする。ネットワークを介する通信は、有線または無線接続及びその組み合わせによって可能にすることができる。この例では、環境が、リクエストを受信し、それに応答してコンテンツを供給するためにウェブサーバ１６０６を含むため、ネットワークはインターネットを含むが、当業者に明白であるように、他のネットワークの場合、同様の目的を提供する代替のデバイスが使用される場合もある。例示の環境は、アプリケーションサーバ１６０８と、データストア１６１０とを含む。複数のアプリケーションサーバ、レイヤまたは他の要素、プロセスまたは構成要素が存在する場合もあり、これらはチェーンされる、またはそれ以外の方法で構成される場合があり、これらは適切なデータストアからデータを取得するなどのタスクを果たすために相互に作用することができることを理解されたい。サーバは使用される際、ハードウェアデバイスまたは仮想コンピュータシステムなど様々な方法で実装されて良い。一部の文脈において、サーバは、コンピュータシステム上で実行されるプログラミングモジュールを指す場合もある。使用される際、そうでないことが述べられるまたは文脈から明白でない限り、用語「データストア」は、データを記憶する、データにアクセスする、及びデータを取り出すことが可能な任意のデバイスまたはデバイスの組み合わせを指し、これらは任意の標準的、分散式、仮想またはクラスタ化された環境におけるデータサーバ、データベース、データ記憶デバイス及びデータ記憶媒体の何らかの組み合わせならびにそのうちのいくつかを含む場合がある。アプリケーションサーバは、クライアントサービスのための１つまたは複数のアプリケーションの態様を実行するために必要に応じてデータストアと結びつき、アプリケーションのためのデータアクセス及びビジネスロジックの一部または全てを扱う任意の適切なハードウェア、ソフトウェア及びファームウェアを含むことができる。アプリケーションサーバは、データストアと協働してアクセス制御サービスを提供することができ、テキスト、グラフィック、音響、ビデオ及び／またはユーザに提供するために利用できる他のコンテンツを含めたコンテンツを生成することが可能であり、これらはハイパーテキストマークアップ言語(「ＨＴＭＬ」)、エクステンシブルマークアップ言語（「ＸＭＬ」)、ジャバスクリプト、カスケーディングスタイル・シート(「ＣＳＳ」)または別の適切なクライアントサイドの構造化言語の形態でウェブサーバによってユーザに提供されて良い。クライアントデバイスに転送されるコンテンツは、クライアントデバイスによって処理され、可聴式、視覚式ならびに／または触覚、味覚及び／もしくは臭覚を含めた他の感覚を介してユーザに知覚させることが可能な形態を含めた１つまたは複数の形態でコンテンツを提供することができる。全てのリクエスト及び応答ならびに電子クライアントデバイス１６０２とアプリケーションサーバ１６０８間のコンテンツの受け渡しのハンドリングは、ＰＨＰ、すなわちハイパーテキスト・プレプロセッサ(「ＰＨＰ」)、Ｐｙｔｈｏｎ（登録商標）、Ｒｕｂｙ（登録商標）、Ｐｅｒｌ（登録商標）、Ｊａｖａ（登録商標）、ＨＴＭＬ、ＸＭＬ、またはこの例における別の適切なサーバサイドの構造化言語を使用してウェブサーバによって対処することができる。考察される構造化コードは、他の場所で考察したような任意の適切なデバイスまたはホストマシン上でも実行させることができるため、ウェブ及びアプリケーションサーバは不可欠ではなく、単なる一例の構成要素であることを理解されたい。さらに単一のデバイスによって行われるように記載される動作は、そうでないことが文脈より明白でない限り、分散式及び／または仮想システムを形成し得る複数のデバイスによって集合式に行われる場合もある。
【０１５０】
データストア１６１０は、複数の別個のデータテーブル、データベース、データドキュメント、ダイナミックデータ記憶スキーム及び／または他のデータ記憶機構、ならびに本開示の特定の態様に関連するデータを記憶するための媒体を含むことができる。例えば例示されるデータストアは、製品側に関するコンテンツを提供するのに使用することができる製品データ１６１２と、ユーザ情報１６１６を記憶するための機構とを含んで良い。データストアはまた、報告、分析または他の目的のために使用することができるログデータ１６１４を記憶するための機構も含むように示される。例えばページイメージ情報及びアクセス権情報など、データストア内に記憶される必要がある多くの他の態様が存在する可能性があり、これらは必要に応じて上記に列記した機構のいずれかに記憶させることができる、またはデータストア１６１０内の追加の機構に記憶させることができることを理解されたい。データストア１６１０は、それに関連するロジックを介してアプリケーションサーバー１６０８から命令を受け取り、それに対して応答してデータを取得する、更新する、またはそうでなければ処理するように動作動可能である。アプリケーションサーバー１６０８は、受信した命令に応じて、静的、動的または静的データと動的データの組み合わせを提供することができる。記載されるサーバ側の構造化言語によって、ウェブログ（ブログ）で使用されるデータなどの動的データ、ショッピングアプリケーション、ニュースサービス及び他のアプリケーションが生成されて良い、またはアプリケーションサーバー上で、もしくはその制御の下で動作するコンテンツ管理システム（「ＣＭＳ」）によって提供される場合もある。一例において、ユーザは、ユーザによって操作されるデバイスを介して、特定の種類のアイテムに対するサーチリクエストを発信する場合がある。このような場合では、データストアは、ユーザ情報にアクセスして、ユーザの同一性を検証し、カタログの詳細情報にアクセスすることでその種のアイテムに関する情報を取得することができる。この情報はその後、ユーザが電子クライアントデバイス１６０２上のブラウザを介して見ることが可能なウェブページ上に列記される結果として、ユーザに返すことができる。興味のある特定のアイテムに関する情報を専用ページまたはブラウザのウィンドウで見ることができる。しかしながら本開示の実施形態は、必ずしもウェブページの文脈に限定されるわけではないが、これは、リクエストが、コンテンツにとって必須なリクエストではない場合に、概してリクエストを処理するのにより一般的に利用可能であり得ることに留意されたい。
【０１５１】
各々のサーバは典型的には、そのサーバの総括的な管理及び動作に関する実行可能なプログラム及び命令を提供するオペレーティングシステムを含み、典型的には、サーバのプロセッサによって実行される際、サーバがその意図される機能を果たすことを可能にする命令を記憶するコンピュータ可読記憶媒体（例えばハードディスク、ランダムアクセスメモリ、読出し専用メモリなど）を含む。サーバのオペレーティングシステム及び一般的な機能に関する好適な実施態様は既知である、または商業的に利用可能であり、とりわけ本開示に照らして当業者によって容易に実装される。
【０１５２】
環境は一実施形態において、１つまたは複数のコンピュータネットワークまたは直接的な接続を用いて通信リンクを介して相互に接続された複数のコンピュータシステム及び構成要素を利用する分散式及び／または仮想コンピューティング環境である。しかしながらそのようなシステムは、図１６に例示されるものより少ないまたはこれより多くの数の構成要素を有するシステムにおいても同様に十分に作動することができることは当業者によって理解されるであろう。よって図１６における一例の環境１６００の描写は、本質的に例示であると受け取るべきであり、本開示の範囲を限定するものではない。
【０１５３】
種々の実施形態はさらに、幅広い種類の動作環境において実施させることができ、これは場合によっては、いくつかのアプリケーションを動作させるのに使用することができる１つまたは複数のユーザコンピュータ、コンピューティングデバイスまたはプロセッシングデバイスを含むことができる。標準的なオペレーティングシステムを稼働するデスクトップ、ラップトップまたはタブレットコンピュータなどのいくつかの汎用パーソナルコンピュータ、ならびにモバイルソフトウェアを稼働させ、いくつかのネットワーキング及びメッセージングプロトコルをサポートすることが可能な携帯電話、無線及び手持ち式デバイスのいずれかを含むことができる。そのようなシステムはまた、多様な種類の商業的に利用可能なオペレーティングシステム、ならびに開発及びデータベース管理などが目的のその他の既知のアプリケーションのいずれかを稼働するいくつかのワークステーションを含むこともできる。このようなデバイスはまた、ダミーターミナル、シンークライアント、ゲーミングシステム及びネットワークを介して通信することが可能な他のデバイスなどの他の電子デバイスを含む場合もある。これらのデバイスはまた、仮想マシン、ハイパーバイザ及びネットワークを介して通信することが可能な他の仮想デバイスなどの仮想デバイスを含む場合もある。
【０１５４】
本開示の種々の実施形態は、伝送制御プロトコル／インターネットプロトコル（「ＴＣＰ/ＩＰ」）、ユーザデータグラムプロトコル（「ＵＤＰ」）、オープンシステム相互接続の種々のレイヤにおいて動作するプロトコル（「ＯＳＩ」）モデル、ファイル伝送プロトコル（「ＦＴＰ」）、ユニバーサルプラグアンドプレイ（「ＵｐｎＰ」）、ネットワークファイルシステム（「ＮＦＳ」）、コモンインターネットファイルシステム（「ＣＩＦＳ：）及びアップルトークなどの様々な種類の商業的に利用可能なプロトコルのいずれかを用いて通信をサポートするために当業者によく知られるネットワークを利用している。ネットワークは、例えばローカルエリアネットワーク、ワイドエリアネットワーク、仮想プライベートネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話網、赤外線ネットワーク、無線ネットワーク、衛星ネットワーク及びそのいずれかの組み合わせであって良い。
【０１５５】
ウェブサーバを利用する実施形態において、ウェブサーバは、ハイパーテキスト転送プロトコル（「ＨＴＴＰ」）サーバ、ＦＴＰサーバ、コモンゲートウェイインターフェース（「ＣＧＩ」）サーバ、データサーバ、ジャバサーバ、アパッチサーバ及びビジネスアプリケーションサーバを含めた多様な種類のサーバまたは中間層アプリケーションのいずれかを稼働することができる。サーバ（複数可）はまた、例えばＪａｖａ（登録商標）、Ｃ、Ｃ#もしくはＣ++などの任意のプログラミング言語、またはＲｕｂｙ、ＰＨＰ、Ｐｅｒｌ、ＰｙｔｈｏｎもしくはＴＣＬなどの任意のスクリプト言語、またはそれらの組み合わせで書かれた１つまたは複数のスクリプトまたはプログラムとして実装され得る１つまたは複数のウェブアプリを実行することなどによって、ユーザデバイスからのリクエストに応答してプログラムまたはスクリプトを実行することも可能であって良い。１つまたは複数のサーバはまた、Ｏｒａｃｌｅ（登録商標）、Ｍｉｃｒｏｓｏｆｔ（登録商標）、Ｓｙｂａｓｅ（登録商標）及びＩＢＭ（登録商標）ならびにＭｙＳＱＬ（登録商標）、Ｐｏｓｔｇｒｅｓ、ＳＱＬｉｔｅ（登録商標）、ＭｏｎｇｏＤＢ（登録商標）及び構造化または非構造化データを記憶する、取り出す及びそれにアクセスすることが可能な任意の他のサーバなどのオープンソースサーバより商業的に利用可能なものを含めたデータベースサーバを含む場合もある。データベースサーバは、タブレットベースのサーバ、ドキュメントベースのサーバ、非構造化サーバ、関連サーバ、非関連サーバまたはこれらの及びもしくは他のデータベースサーバの組み合わせを含むことができる。
【０１５６】
環境は、上記で考察したような多様なデータストア及び他のメモリ及び記憶媒体を含むことができる。これらは、例えば１つまたは複数のコンピュータに対してローカルな、またはネットワークにわたってコンピュータのいずれかまたは全てからリモートな記憶媒体上などの様々な場所に備わることができる。特定の一揃いの実施形態では、情報は、当業者によく知られたストレージ−エリアネット（「ＳＡＮ」）に備わる場合がある。同様に、コンピュータ、サーバまたは他のネットワークデバイスに帰する機能を果たすための任意の必須ファイルが、必要に応じてローカルに及び／またはリモートに記憶される場合もある。システムがコンピュータ化されたデバイスを含む場合、各々のそのようなデバイスは、バスを介して電気的に結合され得るハードウェア要素を含むことができ、この要素には、例えば中央処理装置（「ＣＰＵ」）、入力デバイス（例えばマウス、キーボード、コントローラ、タッチスクリーンまたはキーパッド）、及び出力デバイス（例えばディスプレイデバイス、プリンタまたはスピーカー）が含まれる。そのようなシステムはまた、例えばディスクドライブ、光学記憶デバイス及びランダムアクセスメモリ（「ＲＡＭ」）または読み出し専用メモリ（「ＲＯＭ」）などのソリッドステート記憶デバイス、ならびに取り外し可能なメディアデバイス、メモリカード、フラッシュカードなどの１つまたは複数の記憶デバイスを含むことができる。
【０１５７】
そのようなデバイスはまた、上に記載したようなコンピュータ可読記憶媒体リーダ、通信デバイス（例えばモデム、無線または有線ネットワークカード、赤外線通信デバイスなど）及びワーキングメモリを含むこともできる。コンピュータ可読記憶媒体リーダは、リモート、ローカル、固定式及び／または取り外し可能な記憶デバイスを代表するコンピュータ可読記憶媒体ならびにコンピュータ可読情報を一次的及び／またはより永続的に包含する、記憶する、転送する及び取り出すための記憶媒体と接続させる、または受信するように構成することができる。システム及び種々のデバイスはまた典型的には、オペレーティングシステム及びクライアントアプリケーションもしくはウェブブラウザなどのアプリケーションプログラムを含めた、ワーキングメモリデバイス内に配置されたいくつかのソフトウェアアプリケーション、モジュール、サービスまたは他の要素を含む。代替の実施形態は、上に記載したものから多数の変形を有する可能性があることを理解されたい。例えばカスタマイズされたハードウェアが使用される及び／または特定の要素がハードウェア、ソフトウェア（アップルなどのポータブルソフトウェアを含めた）またはその両方に実装される場合もある。さらにネットワーク入／出力デバイスなどの他のコンピューティングデバイスへの接続が利用される場合もある。
【０１５８】
コードまたはコードの一部を含む記憶媒体及びコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、電気的に消去可能なプログラマブル読み出し専用メモリ（「ＥＥＰＲＯＭ」）、フラッシュメモリ、もしくは他のメモリ技術、コンパクトディスク読み出し専用メモリ（「ＣＤ-ＲＯＭ」）、デジタル多目的ディスク（ＤＶＤ）もしくは他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイスを含めた、例えばコンピュータ可読命令、データ構造、プログラムモジュールもしくは他のデータなどの情報の記憶及び／または伝達に関する任意の方法または技術において実装された揮発性及び不揮発性の取り外し可能及び非取り外し可能な媒体などの記憶媒体及び通信媒体、またはシステムデバイスによってアクセスすることができ、所望の情報を記憶するのに使用することができる任意の他の媒体を含めた当分野で既知のまたは使用される任意の適切な媒体を含むことができる。提供される開示及び教示に基づいて、当業者は、種々の実施形態を実施するための他のやり方及び／または方法を理解するであろう。
【０１５９】
故に明細書及び図面は、限定的な意味ではなく、例示とみなすべきである。しかしながら特許請求の範囲に記載されるより広範な本発明の精神及び範囲から逸脱することなく、種々の修正及び変更をそれに対して行うことができることは明白である。
【０１６０】
他の変形形態も本開示の精神の範囲内にある。よって本教示は種々の修正形態及び代替構造も受け入れることができ、その特定の例示の実施形態が図面に示され、上に詳細に記載されてきた。しかしながら、本発明を開示される特有の１つまたは複数の形態に限定することは全く意図されておらず、その反対に、その意図は、添付の特許請求の範囲において定義される本発明の精神及び範囲内にある全ての修正形態、代替構造及び等価物も網羅することを理解されたい。
【０１６１】
用語「ａ」、「ａｎ」及び「ｔｈｅ」ならびに実施形態を記載する文脈における同様の指示用語の使用は（とりわけ以下の特許請求の範囲の文脈において）、別途指定のない限り、または文脈によって明らかに否定されない限り、単数と複数の両方を対象として含むものと解釈すべきである。用語「備える（ｃｏｍｐｒｉｓｉｎｇ）」、「有する（ｈａｖｉｎｇ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」及び「包含する（ｃｏｎｔａｉｎｉｎｇ）」は、そうでないことが指摘されなければオープンエンドな用語（すなわち「これに限定するものではないが以下を含む」ことを意味する）として解釈すべきである。用語「接続される（ｃｏｎｎｅｃｔｅｄ）」は、修飾されず、物理的な接続を指す場合、何か介在するものがあったとしても、一部がまたは全体が中に含まれる、そこに装着される、または併せて結合されるものと解釈すべきである。値の範囲の記述は、その範囲内にある各々別々の値を個別に指す略記法として機能することが単に意図されるだけであり、別途指定のない限り、各々別々の値は、あたかもそれが個別に記載されたかのように明細書に組み込まれる。用語「一揃いの」（例えば「一揃いのアイテム」）または「サブセット」の使用は、そうでないことが指摘されなければ、または文脈によって否定されなければ、１つまたは複数の要素を備える空でない集まりとして解釈すべきである。さらにそうでないことが指摘されなければ、または文脈によって否定されなければ、対応するセットの用語「サブセット」は、必ずしも対応するセットの適切なサブセットを指すわけではないが、サブセットと対応するセットは対等であり得る。
【０１６２】
「Ａ、Ｂ、及びＣの少なくとも１つ」または「Ａ、Ｂ及びＣの少なくとも１つ」という形式のフレーズなどの接続語は、特に別途指定のない限り、または文脈によって明らかに否定されなければ、アイテム、用語などがＡもしくはＢもしくはＣのいずれか、またはＡ及びＢ及びＣのセットの任意の空でないサブセットであり得ることを提示するのに一般に使用されるように、その文脈と合わせて理解される。例えば３つの要素を有するセットの例示の例では、「Ａ、Ｂ、及びＣの少なくとも１つ」または「Ａ、Ｂ及びＣの少なくとも１つ」という接続フレーズは、以下のセット{Ａ}、{Ｂ}、{Ｃ}、{Ａ，Ｂ}、{Ａ，Ｃ}、{Ｂ，Ｃ}、{Ａ，Ｂ，Ｃ}のうちのいずれかを指す。そのような接続語は、特定の実施形態がＡの少なくとも１つ、Ｂの少なくとも１つ及びＣの少なくとも１つが各々存在すべきであることを要求することを暗に意味することは一般に意図されていない。
【０１６３】
記載されるプロセスの動作は、そうでないことが指摘されなければ、または文脈によってあきらかに否定されなければ好適な順序で行うことができる。記載されるプロセス（またはその変形形態及び／または組み合わせ）は、実行可能な命令を有するように構成された１つまたは複数のコンピュータシステムの制御の下で行われて良く、１つまたは複数のプロセッサ上で、またはハードウェアによってもしくはその組み合わせによって集団で実行するコードとして（例えば実行可能命令、１つもしくは複数のコンピュータプログラム、または１つもしくは複数のアプリケーション）実施されて良い。このコードは、例えば１つまたは複数のプロセッサによって実行可能な命令を含むコンピュータプログラムの形態でコンピュータ可読記憶媒体上に記憶されて良い。コンピュータ可読記憶媒体は、非一時的であり得る。
【０１６４】
任意の例、または提供される例示の言語（例えば「など」）の使用は、本発明をより適切に解明することが単に意図されており、そうでないことが主張されなければ、本発明の範囲に対する限定を有するわけではない。明細書におけるいかなる言語も、本発明を実施するのに必須である何らかの主張されない要素を示すものとして解釈されるべきではない。
【０１６５】
本発明を実施するために本発明者等に知られる最適な態様を含めた本開示の実施形態が記載される。上述の記載を読めば、そのような実施形態の変形形態が当業者には明らかになるであろう。本発明者等は、当業者が必要に応じてそのような変形形態を利用することを期待し、本発明者等は、本開示の実施形態が特別に記載されるもの以外の方法で実施されることを企図している。したがって本開示の範囲は、適用可能な法律によって許可されるような、そこに添付される特許請求の範囲に記載される主題の全ての修正形態及び等価物を含む。さらに、その全ての可能な変形形態における上記に記載した要素のいかなる組み合わせも、別途指定のない限り、または文脈によって明らかに否定されなければ、本開示の範囲によって包含される。
【０１６６】
公報、特許出願及び特許を含めた全ての参考文献は、あたかも各々の参考文献が参照により組み込まれることが個別にかつ具体的に指摘され、その全体において記載されるのと同程度に参照によりここに引用される。
【図１】
2019149192.tif 000003
【図２】
2019149192.tif 000004
【図３】
2019149192.tif 000005
【図４】
2019149192.tif 000006
【図５】
2019149192.tif 000007
【図６】
2019149192.tif 000008
【図７】
2019149192.tif 000009
【図８】
2019149192.tif 000010
【図９】
2019149192.tif 000011
【図１０】
2019149192.tif 000012
【図１１】
2019149192.tif 000013
【図１２】
2019149192.tif 000014
【図１３】
2019149192.tif 000015
【図１４】
2019149192.tif 000016
【図１５】
2019149192.tif 000017
【図１６】
2019149192.tif 000018