(57)【要約】  利用可能なコンテナインスタンスのプールからコンテナインスタンスをインスタンス化するための技術を本明細書で説明する。インスタンスタイプは、該インスタンスタイプがコンテナ記述内のリソースパラメータを満たすように、コンテナ記述から決定される。該インスタンスタイプのインスタンスは、稼働中のコンテナインスタンスのプールから選択され、該インスタンスは、プロビジョニングされ、コンテナは、インスタンス上でインスタンス化される。
2019530095.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、プロセッサおよびメモリを伴って構成された少なくとも１つのコンピューティングデバイスを備え、前記メモリが、命令を含み、該命令が実行されると、前記システムに、
インスタンスプールからインスタンスを選択することであって、前記インスタンスプールが、一組の稼働中のインスタンスを含み、前記一組の稼働中のインスタンスの各インスタンスが、対応するインスタンスタイプを有し、前記インスタンスは、前記インスタンスタイプが、少なくともタスク定義内の情報から取得されたコンテナをインスタンス化するための一組のパラメータを満たす一組の性能特性を有するように選択され、前記インスタンスが、前記コンテナと関連付けられた顧客に割り当てられる、選択することと、
前記インスタンスをプロビジョニングすることと、
前記タスク定義に少なくとも部分的に基づいて、前記インスタンス上の前記コンテナをインスタンス化することと、を行わせる、システム。
【請求項２】
前記システムに前記インスタンスプールから前記インスタンスを選択させる前記命令が、さらに命令を含み、該命令が実行されると、前記システムに、
前記タスク定義から取得された前記一組のパラメータを分析して、前記インスタンスの一組の性能仕様を生成することであって、前記インスタンスの前記一組の性能仕様が、前記インスタンスのＣＰＵ仕様、前記インスタンスのメモリ仕様、または前記インスタンスのネットワーク帯域幅仕様、のうちの少なくとも１つを含む、生成することと、
前記一組の性能仕様を満たすリソースを含む前記インスタンスに少なくとも部分的に基づいて、前記インスタンスプールから前記インスタンスを選択することと、を行わせる、請求項１に記載のシステム。
【請求項３】
前記インスタンスの前記一組の性能仕様が、前記インスタンスのハードウェア要件を含み、前記インスタンスの前記ハードウェア要件が、フィールドプログラマブルゲートアレイ要件、特定用途向け集積回路要件、ハードウェアセキュリティモジュール要件、またはグラフィックス処理ユニット要件、のうちの少なくとも１つを指定する、請求項２に記載のシステム。
【請求項４】
前記タスク定義が、一組のコンテナを説明し、前記一組のコンテナの各コンテナが、１つ以上のコンテナ記述に対応する、請求項１に記載のシステム。
【請求項５】
前記システムが、ネットワークインターフェースを前記インスタンスにアタッチして、前記インスタンスを前記顧客の仮想ネットワークに接続することによって、および一時的なボリュームを前記インスタンスにアタッチすることによって、前記インスタンスをプロビジョニングし、前記一時的なボリュームは、前記コンテナが稼働している間に、データの読み出しおよび書き込みを行うために、前記コンテナによって使用可能である、請求項１に記載のシステム。
【請求項６】
前記インスタンスのインスタンスエージェントが、前記インスタンスを監視し、また、前記インスタンスの１つ以上のヘルスメトリックを、コンピューティングリソースサービスプロバイダによって提供されるコンテナ管理サービスに提供する、請求項１に記載のシステム。
【請求項７】
前記インスタンスエージェントが、１つ以上のリソース使用状況メトリックについて前記コンテナを監視し、前記１つ以上のリソース使用状況メトリックが、前記コンテナと関連付けられたリソースコストを決定するために使用可能である、請求項６に記載のシステム。
【請求項８】
方法であって、
インスタンスタイプが、コンテナを前記インスタンスタイプのインスタンス上でインスタンス化するための一組のパラメータを満たすように、前記インスタンスタイプを決定することであって、前記コンテナをインスタンス化するための前記一組のパラメータが、前記コンテナのコンテナ記述に含まれる、決定することと、
インスタンスプールから前記インスタンスタイプのインスタンスを選択することであって、前記インスタンスプールが、一組の稼働中のインスタンスを含む、選択することと、
前記インスタンスを、前記コンテナと関連付けられた顧客に割り当てさせることと、
前記コンテナを、前記コンテナ記述に対応する前記インスタンス上でインスタンス化することと、を含む、方法。
【請求項９】
前記インスタンスタイプを決定することが、前記インスタンスタイプの前記一組のパラメータに少なくとも部分的に基づいて、前記インスタンスタイプを決定することをさらに含み、前記インスタンスタイプが、前記コンテナを前記インスタンスタイプのインスタンス上でインスタンス化するための前記一組のパラメータを満たす一組の性能特性を有する、請求項８に記載の方法。
【請求項１０】
前記インスタンスタイプの前記インスタンスを選択することが、前記インスタンスタイプのいかなるインスタンスも前記インスタンスプール内に存在しないと判定されると、一組のインスタンスから前記インスタンスを選択することであって、インスタンスタイプが、前記コンテナを前記インスタンスタイプのインスタンス上でインスタンス化するための前記一組のパラメータの最小数のパラメータを満たす一組の性能特性を有し、前記最小数が、前記コンテナ記述に指定される、選択することをさらに含む、請求項８に記載の方法。
【請求項１１】
前記インスタンスタイプの前記インスタンスを選択することが、
前記インスタンスプール内の前記インスタンスタイプの１つ以上の新しいインスタンスをインスタンス化することと、
前記インスタンスタイプの前記１つ以上の新しいインスタンスから前記インスタンスを選択することと、をさらに含む、請求項８に記載の方法。
【請求項１２】
前記インスタンスが、コンピューティングリソースサービスプロバイダによって提供されたコンテナ管理サービスと通信するインスタンスエージェントを含み、前記エージェントが、セキュリティ更新を前記インスタンスに適用するように構成され、前記セキュリティ更新が、前記コンテナ管理サービスから受信される、請求項８に記載の方法。
【請求項１３】
前記インスタンスタイプを決定することは、前記インスタンスタイプが第２の一組のパラメータを満たすように、前記インスタンスタイプを決定することをさらに含み、前記第２の一組のパラメータが、前記一組のパラメータのうちの１つ以上のパラメータとは異なる１つ以上のパラメータを含み、前記一組のパラメータのうちの前記１つ以上のパラメータとは異なる前記１つ以上のパラメータは、前記コンテナをインスタンス化するための前記一組のパラメータが、未プロビジョニングコンテナを指定するという判定に少なくとも部分的に基づいて選択される、請求項８に記載の方法。
【請求項１４】
前記インスタンスをプロビジョニングすることが、ネットワークインターフェースを前記インスタンスにアタッチすることをさらに含み、前記ネットワークインターフェースが、ウェブサービスインターフェイスを介して前記コンテナと通信することを可能にするように構成される、請求項８に記載の方法。
【請求項１５】
前記コンテナが終了した結果として、前記インスタンスを前記インスタンスプールに戻すことをさらに含む、請求項８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１６年９月２９日に出願された米国特許出願第１５／２８０，８０７号、名称「ＭＡＮＡＧＥＤ  ＣＯＮＴＡＩＮＥＲ  ＩＮＳＴＡＮＣＥＳ」の優先権を主張するものであり、その内容は、参照によりその全体が本明細書に組み込まれる。
【背景技術】
【０００２】
現代のコンピュータシステムは、１つ以上のホストコンピュータシステム環境内で集合的に動作するコンピュータシステムの分散集合体として頻繁に実装される。この実装形態の一部として、アプリケーションのための軽量で、仮想化された実行環境であるソフトウェアコンテナが頻繁に使用される。コンテナは、サーバまたは仮想マシンのクラスタ全体にわたってアプリケーションを容易に稼働させること、および管理することを可能にする。コンテナとしてパッケージ化されたアプリケーションは、ローカルに、および計算サービス内等の様々な環境全体にわたって展開することができる。計算サービスは、仮想マシンをプロビジョニングして、顧客に代わってコンテナをホストし、それによって、クラスタ管理インフラストラクチャをインストールし、動作させ、スケーリングする必要性を排除することができる。
【図面の簡単な説明】
【０００３】
様々な技術を、図面を参照しながら説明する。
【０００４】
【図１】コンテナインスタンスがコンテナ管理サービスを使用して管理される、例示的な環境を例示する。
【図２】コンテナ管理サービスを使用してコンテナインスタンスを選択し、インスタンス化するための例示的なプロセスを例示する。
【図３】コンテナ管理サービスを使用してコンテナインスタンスを選択し、インスタンス化するための例示的なプロセスを例示する。
【図４】コンテナインスタンスが互いに隔離された例示的な環境を例示する。
【図５】コンテナインスタンス上のコンテナが互いに隔離された例示的な環境を例示する。
【図６】コンテナインスタンスをインスタンス化し、プロビジョニングするための例示的なプロセスを例示する。
【図７】好適なコンテナインスタンスを選択するための例示的なプロセスを例示する。
【図８】コンテナインスタンス内のコンテナがコンテナ管理サービスを使用してインスタンス化される例示的な環境を例示する。
【図９】コンテナインスタンス内のコンテナがコンテナ管理サービスを使用してインスタンス化される例示的な環境を例示する。
【図１０】コンテナインスタンスマネージャを使用してコンテナインスタンスをインスタンス化するための例示的なプロセスを例示する。
【図１１】様々な実施形態を実施することができる環境を例示する。
【発明を実施するための形態】
【０００５】
以下の開示は、コンテナ管理サービスを使用してコンテナインスタンス（すなわち、コンテナをホストするために使用される仮想マシンインスタンス）を管理するための技術を説明する。計算サービスへのアクセスを提供するコンピューティングリソースサービスプロバイダの顧客は、一組のソフトウェアコンテナを使用して行われるタスクを説明することができる。これらのソフトウェアコンテナは、単に「コンテナ」とも称される、アプリケーションのための軽量で、仮想化された実行環境であり、該仮想化された実行環境は、ソフトウェア、ファイル、およびシステムライブラリを含む、アプリケーションに必要とされる全てを含むそれ自体の完全なファイルシステムの中にアプリケーションを包含する。次に、コンテナ管理アプリケーションは、オペレーティングシステムのリソースを割り当てて、コンテナを稼働させる。
【０００６】
上で説明したように、タスクは、アプリケーションを実行してタスクを行う１つ以上のコンテナによって指定することができる。例えば、コンピューティングリソースサービスプロバイダの顧客は、あるコンテナにおいて稼働するコンテンツ管理アプリケーション、および別のコンテナにおいて稼働するデータベースアプリケーションによってタスクを指定することができる。これらのアプリケーションの各々は、例えば、コンテンツ管理アプリケーションがデータベースにアクセスして、必要なリソースを決定および位置指定するように協調して実行する。タスクは、実行されると、インストールされたアプリケーションによって２つのコンテナを開始し、該コンテナを使用して、例えば、ウェブページを更新する（すなわち、コンテンツ管理アプリケーションは、データベースを使用して、更新されたコンテンツをチェックし、新しいコンテンツを発見した場合は、ウェブページを更新する）。
【０００７】
タスクが指定されると、コンピューティングリソースサービスプロバイダの顧客は、必要とされる中央演算処理装置（「ＣＰＵ」）の数、要求される各ＣＰＵの量、要求されるメモリの量、およびネットワーキングパラメータを含む、タスクを行うためのいくつかのパラメータを指定する。コンピューティングリソースサービスプロバイダの顧客はまた、タスクが実行されるべき場所（または「ゾーン」）を指定すること、例えば、スクラッチ記憶、ロギング、またはセキュリティのパラメータ等の、タスクと関連付けられた追加的なリソースを要求することもできる。
【０００８】
コンピューティングリソースサービスプロバイダの顧客によってタスクの実行が要求されると、コンピュータシステムインスタンス（例えば、仮想マシン）が、コンテナをインスタンス化し、実行することができる顧客に提供される。これらのコンピュータシステムインスタンスを管理してコンピュータシステムインスタンスを提供する効率を向上させるための技術を本開示で説明する。
【０００９】
コンテナ管理サービスが、コンピューティングリソースサービスプロバイダの顧客からタスク定義を受信すると、コンテナ管理サービスは、タスク定義を分析して、タスクを実行するために使用する最良のコンテナインスタンスを決定する。タスク定義に指定されたパラメータに基づいて、一組のコンテナインスタンスから十分な能力を有するコンテナインスタンスが選択される。よって、例えば、ウェブページがコンテンツ管理コンテナおよびデータベースコンテナを有する上で説明した更新タスク定義が、２つのＣＰＵ、４ギガバイト（「ＧＢ」）のメモリ、ネットワーク接続性（すなわち、ネットワークに接続する能力）、および最小帯域幅を有するネットワーク接続を要求するパラメータを含む場合、少なくともこれらの能力を有するインスタンスをコンテナ管理サービスによって選択して、タスクを行うことができる。
【００１０】
本開示で説明される技術では、必要に応じて（すなわち、「オンザフライ」で）、一組の能力を有するインスタンスを作成することができるが、コンテナ管理サービスが、代わりに、タスクを行うために顧客に割り当て、次いで、プールに戻すことができる、稼働中のコンテナインスタンスのプールを維持する。異なるタイプのコンテナインスタンス（すなわち、一組の能力を有するコンテナインスタンス）の各々は、既にインスタンス化されて稼働中である多数のインスタンスを有することができ、タスク定義を受信すると、タスクのパラメータに基づいて、プールから稼働中のインスタンスが選択される。
【００１１】
どの時点においても、いくつかの特定のタイプのコンテナインスタンスが、プールにおいて稼働中であり、また、利用可能であり得る。例えば、コンテナ管理サービスは、「Ａ」、「Ｂ」、「Ｃ」、「Ｄ」、および「Ｅ」のラベルが付された、５つの異なるタイプの利用可能なコンテナインスタンスを有することができ、ここで、「Ａ」は、最低の能力を有し、「Ｅ」は、最高の能力を有する。コンテナインスタンス「Ｂ」上で稼働させることができるタスク定義を受信した場合、プールからタイプ「Ｂ」のコンテナインスタンスを選択し、提供して、コンピューティングリソースサービスプロバイダの顧客のためのタスクを稼働させることができる。タスクは、多数のインスタンスを要求することができ、そのようなタスクについて、プールから多数の異なるタイプの多数のコンテナインスタンスを選択することができることに留意されたい。
【００１２】
コンテナインスタンスのプールは、最初に、各タイプの多数のインスタンスを含む。しかしながら、コンテナインスタンスがコンピューティングリソースサービスプロバイダの顧客に割り当てられると、１つ以上のタイプのインスタンスが不足する、または利用不可能になる場合がある。例えば、１００個のタイプ「Ｂ」インスタンスが存在し、９５個が使用中である場合、１０個のタイプ「Ｂ」インスタンスを要求するタスクに失敗する場合がある。タスクの失敗を回避するために、コンテナ管理サービスは、同等の（すなわち、同じＣＰＵ、ネットワーク、およびメモリパラメータを有するが、インスタンスと関連付けられた追加的なリソースを有する場合がある）インスタンスタイプを探し、そのタイプのインスタンスを代わりに提供する場合がある。同様に、コンテナ管理サービスは、より良好なインスタンスタイプ（すなわち、説明される例においてタイプ「Ｃ」、タイプ「Ｄ」、またはタイプ「Ｅ」のコンテナインスタンス等の、パラメータを超える能力を有するもの）を探す場合がある。インスタンスタイプは、コンテナをインスタンスタイプのインスタンス上でインスタンス化するための一組のパラメータを満たす、一組の性能特性を有する場合に選択することができ、ここで、性能特徴としては、メモリ、ＣＰＵ、ネットワーク帯域幅が挙げられるが、これらに限定されない。加えて、特定のタイプのインスタンスが不足している（または利用不可能である）とき、コンテナ管理サービスは、インスタンスプール内の追加的なインスタンスをインスタンス化することによって、この不足を多少なりとも解消することができる。
【００１３】
上記および下記の記述では、種々の技術を説明する。説明の目的で、本技術を実施する可能な方法の完全な理解を提供するために、特定の構成および詳細が記載される。しかしながら、当業者には、下で説明される技術が、具体的な詳細を伴うことなく異なる構成で実施され得ることも明らかになるであろう。さらに、公知の特徴は、説明されている技術を不明瞭にすることを回避するために、省略または単純化され得る。
【００１４】
図１は、一実施形態に従って、コンテナ管理サービスを使用してコンテナインスタンスが管理される、例示的な環境１００を例示する。図１に例示される実施例において、タスク定義１０２は、コンテナ管理サービス１０４において受信される。タスク定義１０２は、一実施形態において、グループとして開始するように割り当てられる一組のリンクされたコンテナ（すなわち、ホストコンピューティングシステム上で稼働させるときに、互いに関連付けられる一組のコンテナ）を指定するファイルである。タスク定義１０２は、タスクと関連付けられたコンテナを単一の物理マシン上で共有することが可能であるディスクおよびネットワークロケーションを指定することができる。タスク定義１０２は、次いで、タスクと関連付けられたコンテナを起動するために利用することができる。タスク定義１０２は、多数の物理ホストに分散されるコンテナを定義し、リンクすることができる。１つのタスク定義１０２は、多数のタスクを含み、スケジュールすることができる。いくつかの例において、「タスク」は、タスク定義１０２によって指定されたリソースのインスタンス化を指すことができ、また、１つ以上のコンテナを含むことができる。タスクは、新しいタスク定義をタスクに適用することによって修正することができる。
【００１５】
上で説明したように、タスク定義１０２は、タスクと関連付けられたコンテナをインスタンス化するために必要とされる情報を指定する。タスク定義１０２は、下で説明されるように、例えば一組のリソースパラメータ（例えば、ＣＰＵ仕様、メモリ仕様、ネットワーク仕様、および／またはハードウェア仕様）として、タスクと関連付けられたコンテナをインスタンス化するために必要とされる情報を指定する。タスク定義１０２は、コンテナイメージ（すなわち、以前にインスタンス化したイメージまたはスナップショット）として、またはイメージ仕様（すなわち、イメージをインスタンス化するために使用することができるイメージの記述）として、タスクと関連付けられたコンテナをインスタンス化するために必要とされる情報も指定する。イメージ仕様および／またはイメージは、コンピューティングリソースサービスプロバイダの顧客によって指定すること、コンピューティングリソースサービスプロバイダによって指定すること、または何らかの他のエンティティ（例えば、第３者）によって指定することができる。タスク定義１０２は、インスタンスおよび／またはタスクの隔離を提供するクラスタまたはグループ内のコンテナをインスタンス化することができる。コンテナおよび隔離は、本明細書で説明されるように、アプリケーションプログラミングインターフェース（「ＡＰＩ」）の呼び出しを通して管理することができる。
【００１６】
タスク定義の一例は、以下のようになり得る。
2019530095.tif 000003
【００１７】
例示的なタスク定義は、「ｄｂ」と名付けられた第１のタスクが経路「ｐｏｓｔｇｒｅｓｑｌ」に位置付けられたソフトウェアイメージを有するように指定する。第１のタスクは、コンテナ管理サービス１０４によって割り当てられた１，００１ＧＢのメモリの処理配分である。同様に、タスク定義はまた、第２のタスクが「ｃｍｓ」と名付けられた経路「ｃｏｎｔｅｎｔ＿ｍａｎａｇｅｒ」に位置付けられたソフトウェアイメージを有するように指定する。第２のタスクもまた、コンテナ管理サービス１０４によって割り当てられた１，００１ＧＢのメモリの処理配分である。タスク定義は、第２のタスク（「ｃｍｓ」）が第１のタスク（「ｄｂ」）にリンクすることを可能にすることを示す。この例において使用されるいくつかのユニットは、定数の中央処理装置シェアとして与えられる処理能力等の、定数として与えられるが、代わりに、他のユニットおよび他のタイプの値（例えば、総処理能力のパーセンテージ、総メモリのパーセンテージ）が、動的なリソース割り当てを可能にするために使用することができることが想定されることに留意されたい。
【００１８】
コンテナ管理サービス１０４は、一群のコンピューティングリソースとすることができ、これは、集合的に動作して、タスクおよび関連付けられたコンテナを実行することができるコンテナインスタンスを提供し、管理することによって、本明細書で説明されるようにタスク定義を処理して、タスクを行う。タスク定義を処理し、また、タスクおよび関連付けられたコンテナを実行することができるコンテナインスタンスを提供し、管理するように構成されたコンピューティングリソースは、コンピュータシステム（プロセッサおよびメモリを含むコンピュータシステム）、ネットワーク、記憶デバイス、実行可能コード、サービス、プロセス、モジュール、またはアプリケーション、のうちの少なくとも１つを含む。タスク定義を処理し、また、タスクおよび関連付けられたコンテナを実行することができるコンテナインスタンスを提供し、管理するように構成されたコンピューティングリソースは、例えばコンピューティングリソースサービスプロバイダによってホストされる、共有ハードウェアに実装される仮想システムを含むことができる。コンテナ管理サービス１０４は、シングルシステムとして実装することができ、または、分散システムとして実装することができ、複数のインスタンスが集合的に動作して、タスク定義を処理し、タスクおよび関連付けられたコンテナを実行することができるコンテナインスタンスを提供し、管理する。コンテナ管理サービス１０４は、コンピューティングリソース（例えば、他のサービス）を使用して動作させることができ、該コンピューティングリソースは、コンテナ管理サービス１０４が、タスク定義を受信すること、コンテナインスタンスをインスタンス化すること、コンテナインスタンスと通信すること、および／または別の場合であればコンテナインスタンスを管理することを可能にする。
【００１９】
コンテナ管理サービス１０４は、コンピューティングリソースサービスプロバイダの顧客が、下で説明されるようにコンテナインスタンス上のコンテナを使用してタスク実行することを可能にするために、コンピューティングリソースサービスプロバイダによって提供されるサービスとすることができる。コンピューティングリソースサービスプロバイダは、図２に関連して説明されるコンピューティングリソースサービスプロバイダ２１０に類似するコンピューティングリソースサービスプロバイダとすることができ、また、１つ以上のコンピューティングリソースサービスを、個々に、または分散コンピュータシステムのサービスの組み合わせとして、顧客に提供することができる。コンピューティングリソースサービスプロバイダの１つ以上のコンピューティングリソースサービスは、ネットワークを通じてアクセス可能とすることができ、また、仮想コンピュータシステムサービス、ブロックレベルデータ記憶サービス、暗号サービス、オンデマンドのデータ記憶サービス、通知サービス、認証サービス、ポリシー管理サービス、タスクサービス、および／または他のそのようなサービス等のサービスを含むことができる。説明される全ての実施形態が、説明されるサービスの全てを含むとは限らず、明確に説明されるサービスに加えて、またはその代替として、追加的なサービスを提供することができる。
【００２０】
１つの例として、コンピューティングリソースサービスプロバイダは、データ記憶サービス、仮想コンピュータシステムサービス、および／またはウェブサービス等のコンピューティングリソースを提供するエンティティとすることができる。コンピューティングリソースサービスプロバイダの顧客は、ウェブサービスインターフェイスまたは任意の他のタイプの顧客インターフェースとすることができるインターフェースを介して、サービスのうちの１つ以上と通信することができる。コンピューティングリソースサービスプロバイダによって提供される各サービスは、それ自体のインターフェースを有することができ、サービスのサブセットは、共通インターフェースに加えて、またはその代わりに、対応する別個のインターフェースを有することができる。
【００２１】
いくつかの例において、コンテナインスタンス（本明細書で「ソフトウェアコンテナインスタンス」とも称される）は、ソフトウェアコンテナを起動し、稼働させるように構成された（オペレーティングシステムを稼働させる物理コンピュータシステム等の、仮想または非仮想の）コンピュータシステムインスタンスを指すことができる。したがって、コンテナインスタンスは、顧客によって提供されたタスク定義に従ってコンテナ内のタスクを稼働させるように構成することができる。１つ以上のコンテナインスタンスは、コンテナの隔離したクラスタまたはグループを備えることができる。いくつかの例において、「クラスタ」は、クラスタに登録された（すなわち、関連付けられた）一組の１つ以上のコンテナインスタンスを指すことができる。したがって、コンテナインスタンスは、クラスタに登録された多数の異なるコンテナインスタンスのうちの１つとすることができ、クラスタの他のコンテナインスタンスは、同じまたは異なるタイプのコンテナを稼働させるように構成することができる。クラスタ内のコンテナインスタンスは、異なるインスタンスタイプのもの、または同じインスタンスタイプのものとすることができる。コンピューティングリソースサービスプロバイダの顧客は、２つ以上のクラスタを有することができる。したがって、顧客は、１つ以上のクラスタを開始し、次いで、アプリケーションプログラミングインターフェース呼び出しを通して、各クラスタ内のコンテナのユーザおよびアプリケーション隔離を管理することができる。
【００２２】
コンテナ（「ソフトウェアコンテナ」とも称される）は、プログラム、データ、およびシステムライブラリを含むコンピュータシステムインスタンスの下で稼働する軽量の仮想マシンインスタンスとすることができる。コンテナを稼働させる（または実行する）と、稼働中のプログラム（すなわち、プロセス）が、同じコンピュータシステムインスタンス内で稼働する他のプロセスから隔離される。したがって、コンテナは、（例えば、オペレーティングシステムによって割り当てられたメモリ、ＣＰＵ、および記憶装置を使用して）コンテナインスタンスのオペレーティングシステム上で各々稼働させ、互いに隔離して実行することができる（例えば、各コンテナは、オペレーティングシステムのファイルシステムの隔離したビューを有することができる）。コンテナの各々は、それ自体の名前空間を有することができ、コンテナ内で稼働するアプリケーションは、コンテナ名前空間内で利用可能なリソースへのアクセスを有することだけによって隔離される。したがって、コンテナは、それらの自体の名前空間内で１つ以上の単一アプリケーションを稼働させるための効果的な方法であり得る。コンテナカプセル化システムは、１つ以上のコンテナを、別個のユーザスペースインスタンスを稼働させるための仮想マシンを開始し、維持することと関連付けられたオーバーヘッドを伴わずに、単一の動作インスタンス内で稼働させることを可能にする。
【００２３】
コンテナは、コンテナインスタンスに割り当てられたリソースから、指定されたリソースだけを有するように起動することができ、すなわち、コンテナは、ある量のメモリを有し、指定された量の処理能力を超えて利用しないように起動することができる。例えば、タスク定義１０２は、２つのＣＰＵを指定することができるが、アプリケーション用のコンテナは、そうした２つのＣＰＵの５０％を超えることができない。コンテナのリソース割り当ては、タスク定義１０２で指定することができる。多数のコンテナを単一のホストコンピュータまたはホストコンテナインスタンス上で同時に稼働させることができ、ホストのリソースは、システムを使用してコンテナ間で効率的に割り当てることができる。一実施形態において、ホストは、１人の顧客だけから、コンテナインスタンス内の稼働中のコンテナをサポートする（本明細書において、「シングルテナント」環境と称される）。他の実施形態において、単一のホストは、多数の顧客がホスト上で稼働するコンテナインスタンスを有することを可能にすることができる（本明細書で「マルチテナント」環境と称される）。後者の場合、コンテナサービスは、顧客が他のコンテナ、クラスタ、またはコンテナインスタンスにアクセスできないことを確実にするために、セキュリティを提供することができる。
【００２４】
異なるタイプのタスクは、異なるリソースパラメータを有することができ、また、異なる寿命を有することができる。したがって、コンテナは、動的にスケジュールして、コンテナインスタンスの基礎をなすオペレーティングシステムとは関係なく、スケジューラサービスによって稼働させることができ、よって、コンテナインスタンスの基礎をなすオペレーティングシステムは、ごく基本的なものであってもよい。代替的に、コンテナは、コンテナインスタンスにインストールされたスケジューラによって稼働するようにスケジュールすることができる。
【００２５】
コンテナ管理サービス１０４がタスク定義１０２を受信すると、次いで、１０６で、コンテナ管理サービス１０４のインスタンスセレクタプログラム１１８は、データベースから１つを選択することによって、インスタンスプール１０８内の稼働中のインスタンスからインスタンスを選択することができる。インスタンスプール１０８は、多数の異なるインスタンスタイプのものであり得るいくつかの稼働中のインスタンス（本明細書において、「稼働中のインスタンス」とも称される）を含む。インスタンスタイプは、インスタンスによって提供される能力によるタイプである。よって、例えば、第１のインスタンスタイプは、２つのＣＰＵ、４ＧＢのメモリ、および１ギガビットのネットワークインターフェースを有するタイプ「Ａ」とすることができる。インスタンスプール１０８は、既に稼働中で、利用可能である数十の、数百の、または数千のタイプ「Ａ」の稼働中のインスタンスを有することができる。第２のインスタンスタイプは、４つのＣＰＵ、８ＧＢのメモリ、および１ギガビットのネットワークインターフェースを有するタイプ「Ｂ」とすることができる。インスタンスプール１０８はまた、既に稼働中で、利用可能である数十の、数百の、または数千のタイプ「Ｂ」の稼働中のインスタンスも有することができる。
【００２６】
コンテナ管理サービス１０４のインスタンスセレクタプログラム１１８は、インスタンスプール１０８の利用可能なインスタンス１１０からインスタンス１０６を選択する。利用可能なインスタンス１１０は、コンピューティングリソースサービスプロバイダの顧客のコンテナをホストするために利用可能なインスタンスである。利用可能なインスタンス１１０は、そこで稼働中のいかなるコンテナも有しない指定されたタイプのインスタンスであるか、（シングルテナント環境で）そこで稼働中の他の顧客からのいかなるコンテナも有さず、かつ、タスクのためのコンテナをホストするために利用可能な十分なリソースを有するインスタンスであるか、または、（マルチテナント環境で）そこで稼働中の他の顧客からのコンテナを有することができるが、タスクのためのコンテナをホストするために利用可能な十分なリソースを有するインスタンスである。インスタンスが顧客に割り当てられると、インスタンスは、インスタンスプール１０８内の利用可能なインスタンス１１０から削除することができる。例えばインスタンスが終了したときに、インスタンスが顧客によって解放されると、インスタンスは、インスタンスプール１０８内の利用可能なインスタンス１１０に返すことができる。上で説明したように、部分的に割り当てられるインスタンスもまた、利用可能なインスタンス１１０であり得る。
【００２７】
コンテナ管理サービス１０４は、本明細書で説明されるように、タスク定義１０２に基づいて、インスタンスプール１０８の利用可能なインスタンス１１０からインスタンス１０６を選択する。例えば、タスク定義１０２は、リソースを定義する一組のパラメータを指定することができ、該リソースは、インスタンス上のコンテナをインスタンス化し、タスク定義（例えば、ＣＰＵの数、メモリの量、ネットワーク帯域幅の量、専用ハードウェアの存在、その他）において指定されるタスクを行うために使用することができる。
【００２８】
一実施形態において、コンテナ管理サービス１０４は、タスク定義を分析することができ、また、この分析の結果として、リソースを定義するその一組のパラメータが、コンテナをインスタンス化するためにプロビジョニング不足となるインスタンスタイプの選択をもたらすと判定することができる。例えば、タスク定義１０２は、タスクのための不十分な量のメモリに指定すること、またはタスクのためのネットワークインターフェースを指定しないことがあり得る。そのような一実施形態において、コンテナ管理サービス１０４は、第２の一組のパラメータに基づいて、インスタンスプール１０８の利用可能なインスタンス１１０からインスタンス１０６を選択することができ、第２の一組のパラメータのうちの１つ以上は、タスク定義１０２のパラメータのうちの１つ以上とは異なる（例えば、タスク定義１０２に指定されたインスタンスタイプよりも多くのリソースおよび／または能力を有する、改善されたインスタンスタイプの選択をもたらす）。
【００２９】
例えば、タスク定義１０２は、タスクのために２ＧＢのメモリが必要であると指定する場合があり、コンテナ管理サービス１０４は、タスクを分析し、タスクのために４ＧＢのメモリが必要であると判定する場合がある。この例において、コンテナ管理サービス１０４は、一組のパラメータをタスク記述内に含むが４ＧＢのパラメータと置換された２ＧＢのパラメータを有する第２の一組のパラメータに基づいて、インスタンスプール１０８の利用可能なインスタンス１１０からインスタンス１０６を選択することができる。タスク定義１０２に指定されたパラメータとは異なり得るパラメータの他の例としては、追加的なＣＰＵ、異なるＣＰＵタイプ、より高いＣＰＵのパーセンテージ、より多いネットワーク帯域幅、より短い待ち時間、追加的な記憶量、異なる記憶タイプ、または専用ハードウェアが挙げられるが、これらに限定されない。
【００３０】
一実施形態において、コンテナ管理サービス１０４は、タスク定義を分析することができ、また、この分析の結果として、リソースを定義するその一組のパラメータが、コンテナをインスタンス化するためにプロビジョニング過剰となるインスタンスタイプの選択をもたらすと判定することができる。そのような一実施形態において、コンテナ管理サービス１０４は、第２の一組のパラメータに基づいて、インスタンスプール１０８の利用可能なインスタンス１１０からインスタンス１０６を選択することができ、第２の一組のパラメータのうちの１つ以上は、タスク定義１０２のパラメータのうちの１つ以上とは異なる（例えば、タスク定義１０２に指定されたインスタンスタイプよりも少ないリソースおよび／または能力を有するインスタンスタイプの選択をもたらす）。例えば、タスク定義１０２は、タスクのために４ＧＢのメモリが必要であると指定する場合があり、コンテナ管理サービス１０４は、タスクを分析し、タスクのために２ＧＢのメモリが必要であると判定する場合がある。この例において、コンテナ管理サービス１０４は、一組のパラメータをタスク記述内に含むが２ＧＢのパラメータと置換された４ＧＢのパラメータを有する第２の一組のパラメータに基づいて、インスタンスプール１０８の利用可能なインスタンス１１０からインスタンス１０６を選択することができる。上で説明した例示的なパラメータはまた、この実施形態においても使用することができる（例えば、より少ないＣＰＵ、異なるＣＰＵタイプ、より少ないＣＰＵパーセンテージ、より少ないネットワーク帯域幅、より長い待ち時間、より少ない記憶量、異なる記憶タイプ、専用ハードウェアの除去）。
【００３１】
選択されたインスタンスが識別されると、本明細書で説明されるように、１１２で、コンテナ管理サービス１０４は、タスク定義１０２に基づいて、インスタンスを顧客に割り当てることができ、１１６で、コンテナ管理サービスのタスクランチャ構成要素１２０は、割り当てられたインスタンス１１４上のタスクを起動すること（すなわち、タスクのためのコンテナを起動すること）ができる。
【００３２】
図２は、図１に関連して、および一実施形態に従って説明されるように、コンテナ管理サービスを使用してコンテナインスタンスをインスタンス化し、プロビジョニングする、例示的な環境２００を例示する。図２に例示される例示的な環境２００において、ユーザ２０２は、２０６で、クライアントコンピューティングデバイス２０４を使用して、コンピューティングリソースサービスプロバイダ２１０によって提供される様々なサービスに接続することができる。ユーザ２０２は、クライアントコンピューティングデバイス２０４を使用して、２０６で、本明細書で説明されるネットワーク等のネットワーク２０８を通じて、コンピューティングリソースサービスプロバイダ２１０に接続することができる。コンピューティングリソースサービスプロバイダ２１０は、１つ以上のアプリケーション、プロセス、サービス、仮想マシン、および／もしくは他のそのようなコンピュータシステムエンティティを実行することができる、分散された環境、仮想化された環境、ならびに／またはデータセンター環境を提供することができる。ユーザ２０２は、人であってもよく、または１つ以上のリモートコンピュータシステムで稼働するプロセスであってもよく、またはいくつかの他のコンピュータシステムエンティティ、ユーザ、もしくはプロセスであってもよい。
【００３３】
ユーザ２０２からコンピューティングリソースサービスプロバイダ２１０へのコマンドは、外部のコンピュータシステムによって、またはコンピューティングリソースサービスプロバイダ環境内によって生じ得る。２０６でコンピューティングリソースサービスプロバイダ２１０に接続するコマンドは、ユーザ２０２の直接的な介入を伴わずに、コンピューティングリソースサービスプロバイダ２１０および／またはその中の環境において動作するサービスに送信することができる（すなわち、２０６でコンピューティングリソースサービスプロバイダ２１０に接続するコマンドは、１つ以上のイベントに応答して自動的に生成することができる）。ユーザ２０２は、コンピューティングリソースサービスプロバイダ２１０の顧客と関連付けられた特権ユーザとすることができる。ユーザ２０２はまた、コンピューティングリソースサービスプロバイダ２１０と関連付けられた特権ユーザとすることもできる。
【００３４】
コンピューティングリソースサービスプロバイダ２１０は、１つ以上のホストマシンへのアクセスを提供することができ、その上で動作させることができるように１つ以上の仮想マシンインスタンスへのアクセスを提供することができ、またはその中の環境内の１つ以上のサービスへのアクセスを提供することができる。コンピューティングリソースサービスプロバイダ２１０によって提供される１つ以上のサービスはまた、コンピューティングリソースサービスプロバイダ２１０の環境内で動作するホストマシン上で動作させることができるように、１つ以上の仮想マシンインスタンスとして実装すること、および／またはそれを利用することもできる。例えば、コンピューティングリソースサービスプロバイダ２１０は、様々なサービスを、ユーザ２０２が挙げられるが、これに限定されないユーザに提供することができ、ユーザは、ウェブサービスインターフェイスまたは任意の他のタイプのインターフェース等のインターフェースを介して、コンピューティングリソースサービスプロバイダ２１０と通信することができる。図２に例示される例示的な環境は、コンピューティングリソースサービスプロバイダ２１０に対する単一の接続またはインターフェースを示すが、その中の環境内で動作するサービスの各々は、それ自体のインターフェースを有することができ、また一般に、サービスのサブセットは、単一のインターフェースに加えて、またはその代わりに、対応するインターフェースを有することができる。
【００３５】
コンピューティングリソースサービスプロバイダ２１０の環境内で動作するあるタイプのサービスの一例において、仮想コンピュータシステムサービスは、ユーザ２０２等の顧客に代わって仮想マシンインスタンスをインスタンス化するように構成された一群のコンピューティングリソースとすることができる。顧客は、（適切に構成され、認証されたＡＰＩ要求を介して）仮想コンピュータシステムサービスと相互作用して、コンピューティングリソースサービスプロバイダ２１０によってホストされ、動作される物理コンピューティングデバイス上でインスタンス化される仮想マシンインスタンスをプロビジョニングし、動作させることができる。仮想コンピュータシステムサービスは、インスタンスをインスタンス化し、インスタンスを構成し、リソースを提供してインスタンスを稼働させることによって、インスタンスをプロビジョニングすることができる。仮想コンピュータシステムサービスはまた、仮想マシンインスタンスを管理して、例えば、仮想マシンインスタンスをインスタンス化するように、および／または仮想マシンインスタンスのマイグレーションを管理するように構成することもできる。仮想マシンインスタンスは、種々の目的で、ウェブサイトをサポートするサーバとして動作させるために、ビジネスアプリケーションを動作させるために、または、一般に、顧客のための計算能力としての役割を果たすために使用することができる。仮想マシンインスタンスのための他のアプリケーションは、データベースアプリケーション、電子商取引アプリケーション、ビジネスアプリケーション、および／または他のアプリケーションをサポートするためのものとすることができる。
【００３６】
上で説明したように、最初に、コンピューティングリソースサービスプロバイダ２１０のコンテナ管理サービス２１２は、タスク定義２１４を受信することができ、該タスク定義は、図２に例示される実施例において、２０６でネットワーク２０８を通じてコンピューティングリソースサービスプロバイダ２１０に接続するために使用されるクライアントコンピューティングデバイス２０４を使用するユーザ２０２によって提供される。コンテナ管理サービス２１２は、最初に、２１６で、本明細書で説明されるようにタスク定義を分析することができ、また、その分析の結果として、タスク定義２１４に少なくとも部分的に基づいて、２１８で、タスクを実行するために使用するインスタンスを選択することができる。コンテナ管理サービス２１２が選択するインスタンスは、インスタンスプール２２４内にあるインスタンスである。インスタンスプール２２４は、上で説明したように、いくつかの異なるインスタンスタイプのいくつかの利用可能なインスタンス２２６を含む。
【００３７】
次いで、選択されたインスタンスが、コンテナ管理サービス２１２によってタスクに割り当てられる（本明細書において、ユーザ２０２に割り当てられるとも称される）。次いで、コンテナ管理サービス２１２は、割り当てられたインスタンス２２８を使用して、タスク２２０を起動する（すなわち、タスク定義２１４のコンテナを、割り当てられたインスタンス２２８上にインスタンス化する）。最後に、コンテナ管理サービス２１２は、２２２で、状況が変化したときにユーザ２０２を更新することを含む、タスクの状態をユーザ２０２に通知することができる。一実施形態において、通知は、例えば、ユニフォームリソースロケータ（「ＵＲＩ」）および／またはウェブインターフェースを使用して、タスクおよび／またはコンテナへのアクセスを含む。
【００３８】
図３は、図１に関連して、および一実施形態に従って説明されるように、コンテナ管理サービスを使用してコンテナインスタンスを選択し、インスタンス化するための例示的なプロセス３００を例示する。図１に関連して説明されるコンテナ管理サービス１０４等のコンテナ管理サービスは、図３に例示される例示的なプロセス３００を行うことができる。コンテナ管理サービスは、３０２で、上で説明したように、最初に、タスク定義を受信することができ、次いで、３０４で、タスクを実行するために必要とされるインスタンスのタイプおよび数を決定することができる。
【００３９】
コンテナ管理サービスは、３０４で、例えば、タスク定義から要件を読み出し、それらの要件を満たすインスタンスタイプを探し、そのインスタンスタイプにマッチするインスタンスを選択することによって、タスクを実行するために必要とされるインスタンスのタイプおよび数を決定することができる。２つ以上のインスタンスタイプが要件にマッチした場合、コンテナ管理サービスは、例えば最も安価なインスタンスまたは最低能力を有するがそれでも要件を満たすインスタンス等のインスタンスタイプの１つ以上のインスタンスランク付け基準に基づいて、または選好を示す顧客プロファイル等のいくつかの他の順位付け基準に従って、インスタンスタイプを選択することができる。コンテナ管理サービスはまた、３０４で、要件によって利用可能なインスタンスタイプをフィルタリングすること、例えば全てのインスタンスタイプから開始すること、および要件を満たさないインスタンスのタイプを排除することによって、タスクを実行するために必要とされるインスタンスのタイプおよび数も決定することができる。次いで、要件を満たすインスタンスタイプを、１つ以上のインスタンスランク付け基準に従ってランク付けすることができる。
【００４０】
例えば、最良に適合するアルゴリズムを使用して、タスク定義の特性とインスタンスタイプの特性とをマッチさせることができる。アルゴリズムは、コンテナ管理サービスがタスク定義の全ての要件を満たす（すなわち、十分なメモリ、記憶装置、ネットワーキング、ＣＰＵ、その他を有する）コンテナインスタンスを識別することを試みるように調整することができる。一実施形態では、過剰なリソースの量も計算し、それを使用してインスタンスを選択することができる。例えば、コンテナ管理サービスは、各インスタンスタイプの能力を定量化することができ、タスク定義に明確にまたは暗示的に定義された各能力は、２つの間の差を計算することができ、また、領域を計算することができる。より小さい領域は、インスタンスタイプとタスクの要件とのより良好なマッチを意味する。コンテナ管理サービスは、次いで、要件を満たし、かつ最もマッチするインスタンスタイプを選択するようにプログラムすることができ、または、他の構成において、コンテナ管理サービスは、最良に適合するもの以外の１つ以上のタイプの能力を有するインスタンスタイプを選択するようにプログラムすることができる。機械学習技術、顧客からのフィードバック、またはサービスプロバイダによる実験を使用して、選択プロセスを経時的に調整して、特定の種類のタスクに対する選択操作をどのように行うかを調整することができる。例えば、同じまたは類似するタスクの稼働を通じてタスク定義からタスクのタイプを推定することができる場合に、特定の種類のインスタンスタイプに加重することができる。
【００４１】
タスクを実行するために必要とされるインスタンスのタイプおよび数は、上で説明したように、タスク定義と関連付けられたインスタンスの一組の性能仕様から決定することができる。インスタンスの一組の性能仕様は、上で説明したように、タスク定義から取得された一組のパラメータを分析することによって取得することができる。例えば、タスク定義は、８つのコンテナを指定する場合があり、各コンテナは、実行するために２つのＣＰＵの５０％、および２ＧＢのメモリを要求する場合がある。タスクのこの一組のパラメータから、タスク定義は、８つのコンテナをインスタンス化するために８つのＣＰＵおよび１６ＧＢのメモリを提供することができるインスタンスを要求する。この一組のリソースは、少なくとも８つのＣＰＵおよび１６ＧＢのメモリを有する単一のインスタンスによって、または各々少なくとも４つのＣＰＵおよび８ＧＢのメモリを有する２つのインスタンスによって、または各々少なくとも２つのＣＰＵおよび４ＧＢのメモリを有する４つのインスタンスによって、またはインスタンスの組み合わせ（例えば、４つのＣＰＵおよび８ＧＢのメモリを有する１つのインスタンス、ならびに２つのＣＰＵおよび４ＧＢのメモリを有する２つのインスタンス）によって提供することができる。
【００４２】
インスタンスの一組の性能仕様は、タスク定義を分析することによって取得することができる、インスタンスのＣＰＵ仕様（例えば、インスタンスを動作させるために２つのＣＰＵの５０％を要求する）を含むことができる。インスタンスの一組の性能仕様はまた、タスク定義を分析することによって取得することができる、インスタンスのメモリ仕様（例えば、インスタンスを実行するために２ＧＢのメモリを要求する）も含むことができる。インスタンスの一組の性能仕様はまた、タスク定義を分析することによって取得することができる、インスタンスのネットワーク帯域幅仕様（例えば、インスタンスを実行するためのギガビットネットワーク）も含むことができる。
【００４３】
インスタンスの一組の性能仕様はまた、インスタンスの１つ以上の要件も含むことができ、該要件は、追加的なハードウェアが挙げられるが、これに限定されない、インスタンスの１つ以上の追加的なハードウェア能力を指定することができる。例えば、インスタンスの一組の性能仕様は、フィールドプログラマブルゲートアレイ要件であるハードウェア要件を含むことができる。フィールドプログラマブルゲートアレイ要件は、フィールドプログラマブルゲートアレイをインスタンスのハードウェア仕様の一部とする、およびフィールドプログラマブルゲートアレイをタスクのためにインスタンス上でインスタンス化されるコンテナに対して利用可能にする、といったハードウェア要件である。別の例において、インスタンスの一組の性能仕様は、特定用途向け集積回路要件であるハードウェア要件を含むことができ、特定用途向け集積回路をタスクのためのインスタンス上でインスタンス化されるコンテナに利用可能にするように指定する。さらに別の例において、インスタンスの一組の性能仕様は、ハードウェアセキュリティモジュール要件、またはグラフィックス処理ユニット要件、またはメモリ要件（例えば、フラッシュメモリ）、またはいくつかの他のタイプの専用ハードウェアのハードウェア要件である、ハードウェア要件を含むことができる。想定され得るように、本明細書で説明されるインスタンスの要件の例は、単に例示的な実施例に過ぎず、よって、インスタンスの他のタイプの要件が本開示の範囲の範囲内にあるとみなすことができる。
【００４４】
次に、コンテナ管理サービスは、３０６で、インスタンスプールからインスタンスのタイプおよび数を要求することができる。コンテナ管理サービスが、３０８で、要求されたインスタンスが利用可能であると判定した場合、全て本明細書で詳細に説明されるように、コンテナ管理サービスは、３１６で、インスタンスをプロビジョニングし、３１８で、タスクをインスタンス上でインスタンス化し、３２０で、コンテナをインスタンス上でインスタンス化し、３２２で、タスクアクセスを顧客に提供する。
【００４５】
コンテナ管理サービスが、３０８で、要求されたインスタンスが利用可能であると判定しなかった場合、コンテナ管理サービスは、３１０で、例えば、追加的なインスタンスタイプを通して繰り返すことによって、およびそうした追加的なインスタンスタイプが、追加的なインスタンスタイプのインスタンスが十分なリソースを有するかどうかを判定するかどうかを判定することによって、代替のインスタンスタイプの選択を試行することができる。例えば、代替のインスタンスタイプは、代替のインスタンスタイプがタスクと関連付けられたコンテナを稼働させるのに十分なリソースを有するが、代替のインスタンスタイプが異なって構成された場合に（すなわち、代替のインスタンスタイプが、コンテナをインスタンス化するために指定された一組のパラメータを満たす一組の性能特性を有する場合に）選択することができる。代替のインスタンスタイプの１つの例は、元々の要求されたインスタンスタイプよりも大きい能力（例えば、より多いメモリ、はるかに強力なＣＰＵ、より大きいネットワーク帯域幅、または追加的なリソース）を有するインスタンスである。コンテナ管理サービスが、３１２で、代替のインスタンスタイプが利用可能であると判定した場合、全て本明細書で詳細に説明されるように、コンテナ管理サービスは、３１６で、インスタンスをプロビジョニングし、３１８で、タスクをインスタンス上でインスタンス化し、３２０で、コンテナをインスタンス上でインスタンス化し、３２２で、タスクアクセスを顧客に提供する。反対に、コンテナ管理サービスが、３１２で、代替のインスタンスタイプが利用可能であると判定しなかった場合、コンテナ管理サービスは、３１４で、タスクを稼働させるためのいかなる利用可能なインスタンスも存在しないと報告することが挙げられるが、これに限定されない、利用不能に関連する１つ以上の軽減動作を行うことができる。一実施形態において、コンテナ管理サービスは、要求されたタイプの追加的なインスタンスをインスタンス化し、そうした追加的なインスタンスをインスタンスプールに加え、そうした新しくインスタンス化された追加的なインスタンスを使用してタスクを実行することによって、利用不能に関連する１つ以上の軽減動作を行うことができる。
【００４６】
図４は、図１に関連して、および一実施形態に従って説明されるように、コンテナインスタンスが互いに隔離された例示的な環境４００を例示する。図４に例示される実施例において、コンピューティングリソースサービスプロバイダの顧客４０２は、上で説明したように、タスク定義を送信しており、また、タスク定義によって指定されたタスクを稼働させている複数のインスタンスが提供されている。上で説明したように、インスタンスのグループまたはクラスタであるインスタンスグループ４０６には、４つのインスタンスがあり、インスタンスの隔離を提供する。インスタンスグループ４０６のインスタンス４０４は、タスク４１０へのネットワークインターフェース４０８を有する。ネットワークインターフェース４０８は、タスク４１０を実行するためにインスタンス４０４がプロビジョニングされたときに（すなわち、サービスがインスタンスをプロビジョニングするときに）確立することができる。ネットワークインターフェース４０８は、顧客４０２が、（例えば、タスクの状態を監視するために、および／または結果を受信するために）タスクと通信するために、タスクとコンピューティングリソースサービスプロバイダの１つ以上のサービスとの間で通信するために、またはインスタンスを顧客の仮想ネットワークに接続するために使用することができる。一実施形態において、顧客の仮想ネットワークは、仮想プライベートネットワークであり、コンピューティングリソースサービスプロバイダによって顧客に提供され、コンピューティングリソースサービスプロバイダの他の顧客の仮想プライベートネットワークから隔離される。タスク４１０は、上で説明したように、タスク４１０がインスタンス４０４上で開始されたときにタスク４１０でインスタンス化された、１つ以上のコンテナ４１２を含む。
【００４７】
図４に例示される実施例において、インスタンス４０４は、その上で稼働するエージェント４１４を有し、例えば、タスク４１０の状態をコンテナ管理サービスに報告する。コンテナ管理サービス４１６はまた、エージェント４１４を使用して、インスタンス４０４を監視してインスタンスの１つ以上のヘルスメトリックを収集すること（すなわち、潜在的なハードウェアおよび／またはソフトウェアの問題を決定すること）、その上で稼働するインスタンス４０４またはソフトウェアを更新すること、顧客４０２と通信すること、またはインスタンスの機能に関連する他のサービスを行うおよび／もしくは提供することもできる。一実施形態において、エージェント４１４は、その上で稼働するインスタンスおよび／またはタスクを監視して、タスクの稼働と関連付けられたコストを決定することができる。例えば、エージェント４１４は、インスタンスのＣＰＵおよびメモリを監視すること、およびタスクの実行を通じて、どのリソースが、およびどのくらいのそうしたリソース量が使用されているのかを決定することができる。例えば、エージェント４１４は、ＣＰＵおよびメモリを監視して、タスクのリソース使用状況メトリック（例えば、どのくらいの量のメモリおよびＣＰＵがタスクによって使用されているか）を決定することができる。次いで、これらのリソース使用状況メトリックを使用して、コンテナまたはタスクと関連付けられたリソースコストを決定することができる。次いで、タスクに使用される実際のリソースに基づいて、このリソースコストを顧客に割り当てることができる。したがって、より多くのＣＰＵ時間またはより多くのメモリを要求するタスクは、より少ないＣＰＵ時間またはより少ないメモリを要求するタスクよりも実行するためのコストが少なくなり得る。
【００４８】
顧客はまた、プライシングモデルをタスク定義に指定することもでき、よって、例えば、顧客は、完了すべき特定の時間、「超えるべきではない」値、タスクの優先度（例えば、低優先度のタスクは、オフタイム中に実行され得る）、およびその他を指定することができる。例えば、コンピューティングリソースサービスプロバイダ環境によって提供される追加的なリソースは、リソースと関連付けられたコスト（例えば、ＣＰＵ時間の１秒あたりのコスト、使用されるメモリの１メガバイト（「ＭＢ」）あたりのコスト、またはネットワーキング帯域幅を使用するためのコスト）を有することができる。コンピューティングリソースサービスプロバイダは、顧客についてそのようなリソース使用状況を監視することができ、さらに、例えばエージェントをインスタンスに使用してリソース使用状況を監視することによって、コンテナインスタンスをインスタンス化してコンテナをホストするために、顧客に提供されたリソースを監視することもできる。顧客は、コンテナをインスタンス化するために任意のリソースを使用することができるように指定するプライシングモデルをタスク定義に指定することができるが、そのようなリソースが、固定コスト、または１時間あたりのコストを超えないこと、またはいくつかの他のコスト仕様に従うことを前提とする。同様に、顧客は、タスクを遅延させて、例えば次の数日以内に稼働させて、コンピューティングリソースサービスプロバイダのオフピークの時間中に存在し得る、より少ないリソースコストを利用するように指定することができる。上で説明したように、タスク４１０はまた、リソースの要求を指定すること、および／またはコンピューティングリソースサービスプロバイダ環境内で動作する他のサービス４１８にリソースを提供することもできる。例えば、タスクは、ネットワークインターフェース４０８を介して、データベースサービスと、またはブロック記憶サービスと、またはいくつかの他のサービスと通信し、そうした他のサービス４１８からリソースを要求することができる。これらの他のサービス４１８および／またはこれらの他のサービス４１８のコスト制限もまた、タスク４１０のタスク定義に指定することができる。
【００４９】
図４に例示される実施例において、インスタンスグループ４０６のインスタンスは、互いに隔離される。したがって、インスタンス４０４は、顧客４０２によってインスタンス４２２も関連付けられている場合であっても、インスタンスグループ内の別のインスタンス４２２との通信４２０を有しない。同様に、インスタンス４２２は、インスタンスグループ４０６内のインスタンス４２６とのいかなる通信４２８も有さず、また、インスタンス４２６もインスタンス４０４とのいかなる通信４２４も有しない。インスタンスの各々は、あたかもそれがインスタンスグループ４０６内で単独であるかのように動作し、タスクと他のサービス４１８との間の通信、エージェント４１４とコンテナ管理サービス４１６との間の通信、およびタスク４１０とネットワークインターフェース４０８を使用する顧客４０２との間の通信だけを維持する。
【００５０】
図５は、図１に関連して、および一実施形態に従って説明されるように、コンテナインスタンス上のコンテナが互いに隔離された例示的な環境５００を例示する。図５に例示される実施例において、インスタンス内の各タスクは、他のタスクから隔離される。インスタンス５０２は、タスク５０４と、タスク５１０とを有する。タスク５０４は、上で説明したように、コンテナ５１６を含む。図５には例示されていないが、タスク５０４は、上で説明したように、ネットワークインターフェース５０８を介して他のサービスと通信することができる。タスク５０４へのアクセスは、全て上で説明したように、ネットワークインターフェース５０８を使用して顧客５０６に提供される。同様に、上で説明したように、タスク５１０は、コンテナ５１８を含み、さらに、他のサービスと通信することもできる。同じく全て上で説明したように、タスク５１０へのアクセスは、ネットワークインターフェース５１２を使用して顧客５１４に提供される。
【００５１】
タスク５０４およびタスク５１０がどちらもインスタンス５０２上で稼働している場合であっても、ならびにどちらも、タスクおよびインスタンス５０２に関する状況の更新をコンテナ管理サービス５２４に提供するエージェント５２２によって監視されている場合であっても、タスク５０４は、タスク５１０と通信５２６しない。タスク５０４とタスク５１０との間のこの隔離（すなわち、通信の不足）は、顧客５０６および顧客５１４は、同じエンティティであるシングルテナント環境であっても存在し得る。一実施形態において、コンテナ管理サービス５２４は、タスク間でこの隔離を実施し、コンテナ間の通信だけを可能にする。タスク間のこの隔離は、コンテナ管理サービス５２４によって実施して、タスクが改竄されるのを、または別様には他のタスクが改変されるのを防止することができる。別の実施形態において、コンテナ管理サービス５２４は、例えばコンテナが改竄されるのを、または別様には他のコンテナが改変されるのを防止するように、コンテナ間で隔離を実施する。
【００５２】
図６は、図１に関連して、および一実施形態に従って説明されるように、コンテナインスタンスをインスタンス化し、プロビジョニングするための例示的なプロセス６００を例示する。図１に関連して説明されるコンテナ管理サービス１０４等のコンテナ管理サービスは、図６に例示される例示的なプロセス６００を行うことができる。上で説明したように、最初に、コンテナ管理サービスは、６０２で、インスタンスプールからインスタンスを選択することができる。次に、コンテナ管理サービスは、６０４で、インスタンスを顧客に割り当てることができる（すなわち、タスク定義に従ってタスクを実行するためのインスタンスを顧客に割り当てることができる）。次に、コンテナ管理サービスは、６０６で、タスクフレームワークを作成することができる。本明細書で使用するとき、「タスクフレームワーク」は、タスク（および関連付けられたコンテナ）の実行環境である。タスクフレームワークは、タスクと関連付けられたネットワークインターフェースを維持し、タスクと関連付けられた任意の他のリソースを維持し、それらがインスタンス化されるときにタスク内のコンテナを追跡し、コンテナ間の通信を維持し、上で説明したサービスとの通信を維持し、また、タスクを監視するためのエージェントをインスタンスと接続する。
【００５３】
次いで、コンテナ管理サービスは、６０８で、例えばネットワークインターフェースをインスタンス化し、そのネットワークインターフェースと関連付けられたリソース（例えば、ハードウェアインターフェース、および／またはハードウェアインターフェースの仮想化、ネットワークインターフェースと関連付けられたアドレス、ソフトウェア、および／または他のリソース）を割り当てることによって、ネットワークインターフェースをタスクフレームワークにアタッチすることができる。ネットワークインターフェースは、例えばコンテナイメージをタスクフレームワークに提供することができるように、タスクインスタンス化の初期の時点で、タスクフレームワークにアタッチすることができる。ネットワークインターフェースはまた、顧客がタスクインスタンス化を監視することができるように、タスクインスタンス化の初期の時点で、タスクフレームワークにアタッチすることもできる。一実施形態において、ネットワークインターフェースは、タスクインスタンス化の後の時点で、例えばコンテナインスタンスを実行し始めるときに、タスクフレームワークにアタッチされる。
【００５４】
次いで、コンテナ管理サービスは、６１０で、スクラッチボリューム（本明細書において、「一時的なボリューム」とも称される）をタスクフレームワークにアタッチするべきかどうかを判定することができる。本明細書で使用するとき、スクラッチボリュームは、タスク（およびタスクと関連付けられたコンテナ）を使用して一時データを記憶することができる、一時ボリュームである。スクラッチボリュームは、典型的に、タスクおよび関連付けられたコンテナのライフタイムを超えて持続しないという点で一時的である。図６には例示されていないが、コンテナ管理サービスはまた、追加的なボリューム（すなわち、追加的な記憶デバイス）をタスクフレームワークまたはインスタンスにアタッチするべきかどうかを判定することもできる。例えば、コンテナ管理サービスは、例えば記憶サービスからの共有ボリュームを、コンテナインスタンス間、タスク間、タスクフレームワーク間、またはコンテナ間で共有するように要求することができ、そのような共有ボリュームは、インスタンスおよび／またはコンテナにアタッチされる。コンテナ管理サービスはまた、例えばブロック記憶サービスからの、ブロック記憶ボリュームを、コンテナインスタンス間、タスクフレームワーク間、またはコンテナ間で共有し、かつ、インスタンスおよび／またはコンテナにアタッチするように要求することもでき、そのようなブロック記憶ボリュームは、インスタンスおよび／またはコンテナにアタッチされる。
【００５５】
コンテナ管理サービスが、６１０で、スクラッチボリュームをタスクフレームワークにアタッチするべきであると判定した場合、コンテナ管理サービスは、６１２で、スクラッチボリュームをタスクフレームワークにアタッチすることができる。次いで、コンテナ管理サービスは、６１４で、インスタンスをプロビジョニングするための、タスクフレームワークを提供するための、および／またはコンピューティングリソースサービスプロバイダのサービスへのアクセスと関連付けられたコンテナをプロビジョニングするための任意の動作を完了することができる。一実施形態において、コンテナ管理サービスは、６１４で、例えば、インスタンスをコンピューティングリソースサービスプロバイダの１つ以上のセキュリティグループに登録することによって、ネットワークインターフェースの登録およびプロビジョニングを完了することによって、またはインスタンス上のコンテナをコンテナ管理サービスに接続することによって、インスタンスをプロビジョニングするための任意の動作を完了することができる。反対に、コンテナ管理サービスが、６１０で、スクラッチボリュームをタスクフレームワークにアタッチするべきであると判定しなかった場合、コンテナ管理サービスは、上で説明したように、６１４で、インスタンスをプロビジョニングするための、タスクフレームワークを提供するための、および／またはコンピューティングリソースサービスプロバイダのサービスへのアクセスと関連付けられたコンテナをプロビジョニングするための任意の動作を完了することができる。
【００５６】
次いで、コンテナ管理サービスは、上で説明したように、６１６で、例えば、タスクおよび／または関連付けられたコンテナインスタンスを監視することができるように、タスクフレームワークをインスタンスエージェントに登録することができる。次に、コンテナ管理サービスは、６１８で、コンテナをコンテナリポジトリからダウンロードするかどうか、またはコンテナイメージボリュームをタスクフレームワークにアタッチするかどうかを判定することができる。コンテナ管理サービスが、６１８で、コンテナリポジトリからコンテナをダウンロードすると判定した場合、コンテナ管理サービスは、次に、コンテナイメージリポジトリを位置指定することができ、６２０で、下で説明されるように、コンテナイメージリポジトリからコンテナイメージをダウンロードすることができ、また、６２４で、例えばインスタンスのロケータを、および／またはインスタンス上のタスク（複数可）のネットワークインターフェースへのアクセスを顧客に提供することによって、タスクへのアクセスを顧客に提供することができる。反対に、コンテナ管理サービスが、６１８で、コンテナリポジトリからコンテナをダウンロードすると判定しなかった場合、コンテナ管理サービスは、コンテナイメージボリュームを生成することができ、６２２で、下で説明されるように、コンテナイメージボリュームをタスクフレームワークにアタッチすることができ、また、６２４で、タスクへのアクセスを顧客に提供することができる。
【００５７】
図７は、図１に関連して、および一実施形態に従って説明されるように、好適なコンテナインスタンスを選択するための例示的なプロセス７００を例示する。図１に関連して説明されるコンテナ管理サービス１０４等のコンテナ管理サービスは、図７に例示される例示的なプロセス７００を行うことができる。図７に例示される例示的なプロセスにおいて、コンテナ管理サービスは、最初に、７０２で、一組のインスタンスタイプから１つのインスタンスタイプを選択することができる。次に、コンテナ管理サービスは、上で説明したように、７０４で、選択されたインスタンスタイプが、タスク定義に指定された所望のインスタンスタイプにマッチするかどうかを判定することができる。コンテナ管理サービスは、７０４で、例えば選択されたインスタンスタイプが、タスク定義に指定されたコンテナをホストするための十分なリソースを有する場合に、選択されたインスタンスタイプが、タスク定義に指定された所望のインスタンスタイプにマッチすると判定することができる。
【００５８】
選択されたインスタンスタイプが、７０４で、タスク定義に指定された所望のインスタンスタイプにマッチすると判定しなかった場合、コンテナ管理サービスは、７０６で、評価するための利用可能な次のタイプが存在するかどうかを判定することができる。コンテナ管理サービスが、７０６で、評価するための利用可能な次のタイプが存在すると判定した場合、コンテナ管理サービスは、７０２で、次のインスタンスタイプを選択し、また、７０４で、そのタイプがマッチするかどうかを判定することができる。コンテナ管理サービスが、７０６で、評価するための利用可能な次のタイプが存在すると判定しなかった場合、コンテナ管理サービスは、７０８で、いくつかの実施形態において、デフォルトのインスタンスタイプを使用して、タスク定義のタスクのコンテナを実行することができる。コンテナ管理サービスが、７０８で、デフォルトのインスタンスタイプを使用して、タスク定義のタスクのコンテナを実行することができると判定した場合、コンテナ管理サービスは、７１２で、そのデフォルトのインスタンスタイプが利用可能である（すなわち、デフォルトのインスタンスタイプが、稼働中であり、インスタンスプールで利用可能である）と判定することができる。同様に、選択されたインスタンスタイプが、７０４で、タスク定義に指定された所望のインスタンスタイプにマッチすると判定した場合、コンテナ管理サービスは、７１２で、そのインスタンスタイプが利用可能である（すなわち、インスタンスタイプのインスタンスが、稼働中であり、インスタンスプールで利用可能である）と判定することができる。
【００５９】
コンテナ管理サービスが、７０８で、デフォルトのインスタンスタイプを使用して、タスク定義のタスクのコンテナを実行することができると判定しなかった場合、コンテナ管理サービスは、７１０で、図３に関連して上で説明したように、１つ以上の利用不能緩和動作を行うことができる。
【００６０】
コンテナ管理サービスが、７１２で、要求されたタイプのインスタンスが利用可能である（すなわち、インスタンスタイプのインスタンスが、稼働中であり、インスタンスプールで利用可能である）と判定した場合、コンテナ管理サービスは、上で説明したように、７１４で、インスタンスを選択し、７１６で、インスタンスをプロビジョニングし、また、７１８で、タスクへのアクセスを提供することができる。反対に、コンテナ管理サービスが、７１２で、要求されたタイプのインスタンスが利用可能であると判定しなかった（すなわち、稼働中であり、インスタンスプールで利用可能であるいかなるインスタンスも存在しない）場合、コンテナ管理サービスは、上で説明したように、７２０で、タスクと関連付けられたコンテナをホストするために選択することができる任意の同等のインスタンスタイプが存在するかどうかを判定することができる。
【００６１】
コンテナ管理サービスが、７２０で、タスクと関連付けられたコンテナをホストするために選択することができる任意の同等のインスタンスタイプが存在すると判定しなかった場合、コンテナ管理サービスは、７１０で、上で説明したものを含む、１つ以上の利用不能の軽減動作を行うことができる。
【００６２】
反対に、コンテナ管理サービスが、７２０で、タスクと関連付けられたコンテナをホストするために選択することができる同等のインスタンスタイプが存在すると判定した場合、コンテナ管理サービスは、７２２で、同等のインスタンスタイプが利用可能である（すなわち、同等のインスタンスタイプのインスタンスが稼働中であり、インスタンスプールで利用可能である）かどうかを判定することができる。コンテナ管理サービスが、７２２で、同等のインスタンスタイプが利用可能である（すなわち、同等のインスタンスタイプのインスタンスが稼働中であり、インスタンスプールで利用可能である）と判定した場合、コンテナ管理サービスは、上で説明したように、７１４で、インスタンスを選択し、７１６で、インスタンスをプロビジョニングし、また、７１８で、タスクへのアクセスを提供することができる。反対に、コンテナ管理サービスが、７２２で、要求されたタイプのインスタンスが利用可能であると判定しなかった（すなわち、稼働中であり、インスタンスプールで利用可能であるいかなる同等のインスタンスタイプのインスタンスも存在しない）と判定した場合、コンテナ管理サービスは、７２４で、例えばインスタンスプール内のインスタンスタイプの１つ以上の新しいインスタンスをインスタンス化することによって、追加的なインスタンスを提供するためにスケールアップするかどうかを判定することができる。例えば、インスタンスプール内にいかなるタイプ「Ａ」の利用可能なインスタンスも存在しないので、コンテナ管理サービスが、例えばタイプ「Ａ」の任意のインスタンスを取得し、プロビジョニングすることができなかった場合、コンテナ管理サービスは、インスタンスプール内のタイプ「Ａ」の１つ以上の新しいインスタンスをインスタンス化することができる。
【００６３】
追加的なインスタンスは、タスク定義によって決定されるように、コンテナをインスタンス化するための一組のパラメータを満たす一組の性能特性を有するインスタンスタイプのものとすることができる。インスタンスはまた、同等のインスタンスタイプのものとすることができ、ここで、同等のインスタンスタイプは、コンテナをインスタンスタイプのインスタンス上でインスタンス化するための一組のパラメータの最小数のパラメータを満たす一組の性能特性を有し、ここで、最小数は、コンテナ記述に指定される。例えば、コンテナをインスタンス上でインスタンス化するための一組のパラメータは、ＣＰＵ（すなわち、インスタンスのＣＰＵ仕様）、メモリ（すなわち、インスタンスのメモリ仕様）、またはネットワーク帯域幅（すなわち、インスタンスのネットワーク帯域幅仕様）についてパラメータを指定することができるが、コンテナ記述は、これらのうちの２つだけ（例えば、メモリおよびネットワーク帯域幅）が厳密に必要であると指定することができる。したがって、代わりに、２つのパラメータを満たす（すなわち、コンテナをインスタンスタイプのインスタンス上でインスタンス化するための一組のパラメータの最小数のパラメータを満たす）同等のインスタンスタイプを使用することができる。
【００６４】
コンテナ管理サービスが、７２４で、追加的なインスタンスを提供するためにスケールアップすると判定しなかった場合、コンテナ管理サービスは、７１０で、上で説明したように、１つ以上の利用不能の軽減動作を行うことができる。反対に、コンテナ管理サービスが、７２４で、追加的なインスタンスを提供するためにスケールアップすると判定した場合、管理サービスは、７２６で、追加的なインスタンスをインスタンス化することができ、また、上で説明したように、７１４で、追加的なインスタンスからインスタンスを選択し、７１６で、インスタンスをプロビジョニングし、また、７１８で、タスクへのアクセスを提供することができる。
【００６５】
図８は、図１に関連して、および一実施形態に従って説明されるように、コンテナインスタンス内のコンテナがコンテナ管理サービスを使用してインスタンス化される例示的な環境８００を例示する。図８に例示される実施例において、コンテナ管理サービス８０２は、８０４で、イメージリポジトリ８０６からコンテナイメージ８２２取り出すことができる。コンテナイメージ８２２は、コンテナをインスタンス化するために使用することができるコンテナのイメージである。コンテナイメージ８２２は、コンテナを動作させるために必要とされるソフトウェアおよびデータを含む。よって、例えば、コンテナイメージ８２２は、コンテナのためのオペレーティングシステムと、コンテナをコンテナインスタンスとインターフェースするためのドライバと、実行することができるソフトウェアと、データと、実行されたときに、コンテナに、タスクと関連付けられたアクションを行わせる１つ以上のスクリプトとを含むことができる。イメージリポジトリ８０６は、そのようなコンテナイメージの検索可能なリポジトリである。
【００６６】
次いで、コンテナ管理サービス８０２は、８０８でコンテナイメージがコンテナイメージボリューム８１８にコピーされる前に、８２４で、コンテナイメージを処理することができる。コンテナ管理サービス８０２は、８２４で、例えばコンテナイメージを暗号化すること、またはコンテナイメージを圧縮することによって、コンテナイメージを処理することができる。コンテナイメージボリューム８１８は、物理的または仮想的のいずれかであり、また、１つ以上のコンテナイメージを含む、記憶デバイスである。コンテナイメージボリューム８１８は、８２０で、インスタンス８１０等のインスタンスにマウントすること（すなわち、インスタンスのオペレーティングシステムを使用して、インスタンスに動作的にアタッチすること）ができる。次いで、インスタンス８１０によってコンテナイメージボリューム８１８を使用して、タスク８１４と関連付けられたコンテナ８１２をインスタンス化することができる。図８には例示されていないが、上で説明したように、タスク８１４は、ネットワークインターフェースを有することができる。コンテナイメージボリューム８１８は、上で説明したスクラッチボリューム８１６（または一時的なボリューム）とは別体であり得ることに留意されたい。一実施形態において、コンテナイメージボリューム８１８は、読み出し専用のインスタンスにマウントされる（すなわち、その結果、コンテナイメージボリューム８１８だけからインスタンスを読み出すことができる）。
【００６７】
図９は、図１に関連して、および一実施形態に従って説明されるように、コンテナインスタンス内のコンテナがコンテナ管理サービスを使用してインスタンス化される例示的な環境９００を例示する。図９に例示される実施例において、コンテナ管理サービス９０２は、９２０で、インスタンス９１０に命令して、９０４で、イメージリポジトリ９０６からコンテナイメージ９１８を取り出すことができる。コンテナ管理サービス９０２は、９２０で、インスタンス９１０に命令して、例えばネットワークインターフェース９１６を使用してコンテナイメージ９１８のリソースロケータをインスタンス９１０に提供することによって、９０４で、イメージリポジトリ９０６からコンテナイメージ９１８を取り出すことができる。上で説明したように、イメージリポジトリ９０６は、９０８で、ネットワークインターフェース９１６を使用して、コンテナイメージ９１８を、インスタンス９１０上で稼働するタスク９１４に提供することができる。一実施形態において、上で説明したように、ネットワークインターフェース９１６は、タスクと通信するために顧客によって使用されるネットワークインターフェースとは異なる。次いで、インスタンス９１０によってコンテナイメージ９１８を使用して、タスク９１４と関連付けられた１つ以上のコンテナ９１２をインスタンス化することができる。図９には例示されていないが、上で説明したように、インスタンス９１０は、スクラッチボリューム（または、一時的なボリューム）を有することができる。
【００６８】
図１０は、図１に関連して、および一実施形態に従って説明されるように、コンテナインスタンスマネージャを使用してコンテナインスタンスをインスタンス化するための例示的なプロセス１０００を例示する。図１に関連して説明されるコンテナ管理サービス１０４等のコンテナ管理サービスは、図１０に例示される例示的なプロセス１０００を行うことができる。コンテナ管理サービスは、最初に、１００２で、タスク定義を受信し、また、そのタスク定義に少なくとも部分的に基づいて、１００４で、タスクを実行するために必要とされる１つまたは複数のインスタンスタイプを決定することができる。コンテナ管理サービスは、次いで、１００６で、インスタンスプールから必要とされるインスタンスタイプの１つ以上のインスタンスを選択し、また、１００８で、選択されたインスタンスをプロビジョニングすることができる。コンテナ管理サービスは、次いで、１０１０で、タスクをインスタンス上で作成することができ（すなわち、上で説明したようにタスクフレームワークを作成することができ）、１０１２で、タスクのコンテナをインスタンス化することができ、また、最後に、１０１４で、タスクへのアクセスを顧客に提供することができる。
【００６９】
本開示の実施形態は、以下の付記を考慮して説明することができる。
１．ソフトウェアコンテナインスタンスを管理するためのコンピュータ実装の方法であって、
実行可能命令を伴って構成された１つ以上のコンピュータシステムの制御下で、
コンテナ管理サービスにおいてタスクのタスク定義を受信することであって、タスク定義が、コンテナ記述を含み、コンテナ記述が、コンテナをインスタンス化するための一組のパラメータを含み、一組のパラメータが、コンテナのＣＰＵの数およびメモリの量を含む、受信することと、
コンテナ記述に少なくとも部分的に基づいて、コンテナをインスタンス化するために使用可能なインスタンスタイプを決定することであって、インスタンスタイプが、コンテナをインスタンス化するための一組のパラメータを満たす一組の性能特性を有する、決定することと、
インスタンスプールからインスタンスタイプのインスタンスを選択することであって、インスタンスプールが、１つ以上の稼働中のインスタンスを含む、選択することと、
インスタンスをプロビジョニングして、タスクを実行することと、
インスタンス上のコンテナをインスタンス化することと、
タスクへのアクセスを、タスクと関連付けられた顧客に提供することであって、アクセスが、顧客がタスクと相互作用することを可能にする、提供することと、を含む、方法。
２．タスク定義が、コンテナがサービスと通信するためのものであることを示し、インスタンスと関連付けられたネットワークインターフェースを、サービスへの接続を可能にするように構成することをさらに含む、付記１に記載のコンピュータ実装の方法。
３．コンテナをインスタンス化することが、コンテナイメージボリュームをインスタンスにマウントすることを含み、コンテナイメージボリュームが、そこに記憶された、タスク定義に指定されたコンテナイメージを有する、付記１または２に記載のコンピュータ実装の方法。
４．コンテナをインスタンス化することが、
インスタンスと関連付けられたネットワークインターフェースを使用して、コンテナリポジトリからコンテナイメージを取り出すことと、
コンテナイメージを使用して、コンテナをインスタンス化することと、を含む、付記１〜３のいずれかに記載のコンピュータ実装の方法。
５．システムであって、プロセッサおよびメモリを伴って構成された少なくとも１つのコンピューティングデバイスを備え、メモリが、命令を含み、該命令が実行されると、システムに、
インスタンスプールからインスタンスを選択することであって、インスタンスプールが、一組の稼働中のインスタンスを含み、一組の稼働中のインスタンスの各インスタンスが、対応するインスタンスタイプを有し、インスタンスは、インスタンスタイプが、少なくともタスク定義内の情報から取得されたコンテナをインスタンス化するための一組のパラメータを満たす一組の性能特性を有するように選択され、インスタンスが、コンテナと関連付けられた顧客に割り当てられる、選択することと、
インスタンスをプロビジョニングすることと、
タスク定義に少なくとも部分的に基づいて、インスタンス上のコンテナをインスタンス化することと、を行わせる、システム。
６．システムにインスタンスプールからインスタンスを選択させる命令が、さらに命令を含み、該命令が実行されると、システムに、
タスク定義から取得された一組のパラメータを分析して、インスタンスの一組の性能仕様を生成することであって、インスタンスの一組の性能仕様が、インスタンスのＣＰＵ仕様、インスタンスのメモリ仕様、またはインスタンスのネットワーク帯域幅仕様、のうちの少なくとも１つを含む、生成することと、
一組の性能仕様を満たすリソースを含むインスタンスに少なくとも部分的に基づいて、インスタンスプールからインスタンスを選択することと、を行わせる、付記５に記載のシステム。
７．インスタンスの一組の性能仕様が、インスタンスのハードウェア要件を含み、インスタンスのハードウェア要件が、フィールドプログラマブルゲートアレイ要件、特定用途向け集積回路要件、ハードウェアセキュリティモジュール要件、またはグラフィックス処理ユニット要件、のうちの少なくとも１つを指定する、付記６に記載のシステム。
８．タスク定義が、一組のコンテナを説明し、一組のコンテナの各コンテナが、１つ以上のコンテナ記述に対応する、付記５〜７のいずれかに記載のシステム。
９．システムが、ネットワークインターフェースをインスタンスにアタッチして、インスタンスを顧客の仮想ネットワークに接続することによって、インスタンスをプロビジョニングする、付記５〜８のいずれかに記載のシステム。
１０．一時的なボリュームをインスタンスにアタッチすることによって、インスタンスをプロビジョニングし、一時的なボリュームは、コンテナが稼働している間に、データの読み出しおよび書き込みを行うために、コンテナによって使用可能である、付記５〜９のいずれかに記載のシステム。
１１．インスタンスのインスタンスエージェントが、インスタンスを監視し、また、インスタンスの１つ以上のヘルスメトリックを、コンピューティングリソースサービスプロバイダによって提供されるコンテナ管理サービスに提供する、付記５〜１０のいずれかに記載のシステム。
１２．インスタンスエージェントが、１つ以上のリソース使用状況メトリックについてコンテナを監視し、１つ以上のリソース使用状況メトリックが、コンテナと関連付けられたリソースコストを決定するために使用可能である、付記１１に記載のシステム。
１３．そこに記憶された実行可能命令を有する非一時的コンピュータ可読記憶媒体であって、コンピュータシステムの１つ以上のプロセッサによって実行された結果として、コンピュータシステムに、少なくとも、
インスタンスタイプが、コンテナをインスタンスタイプのインスタンス上でインスタンス化するための一組のパラメータを満たすように、インスタンスタイプを決定することであって、コンテナをインスタンス化するための一組のパラメータが、コンテナのコンテナ記述に含まれる、決定することと、
インスタンスプールからインスタンスタイプのインスタンスを選択することであって、インスタンスプールが、一組の稼働中のインスタンスを含む、選択することと、
インスタンスを、コンテナと関連付けられた顧客に割り当てさせることと、
コンテナを、コンテナ記述に対応するインスタンス上でインスタンス化することと、を行わせる、非一時的コンピュータ可読記憶媒体。
１４．コンピュータシステムにインスタンスタイプを決定させる命令が、さらに命令を含み、該命令が、１つ以上のプロセッサによって実行された結果として、コンピュータシステムに、インスタンスタイプの一組のパラメータに少なくとも部分的に基づいて、インスタンスタイプを決定させ、インスタンスタイプが、コンテナをインスタンスタイプのインスタンス上でインスタンス化するための一組のパラメータを満たす一組の性能特性を有する、付記１３に記載の非一時的コンピュータ可読記憶媒体。
１５．コンピュータシステムにインスタンスプールからインスタンスタイプのインスタンスを選択させる命令が、命令をさらに含み、該命令が、１つ以上のプロセッサによって実行された結果として、コンピュータシステムに、インスタンスプール内にいかなるインスタンスタイプのインスタンスも存在しないと判定されると、インスタンスタイプのインスタンス上のコンテナをインスタンス化するための一組のパラメータの最小数のパラメータを満たす一組の性能特性を有するインスタンスタイプを有する一組のインスタンスからインスタンスを選択させ、最小数が、コンテナ記述に指定される、付記１３または１４に記載の非一時的コンピュータ可読記憶媒体。
１６．コンピュータシステムに、インスタンスプールからインスタンスタイプのインスタンスを選択させる命令が、命令をさらに含み、該命令が、１つ以上のプロセッサによって実行された結果として、コンピュータシステムに、インスタンスプール内にいかなるインスタンスタイプのインスタンスも存在しないと判定されると、
インスタンスプール内のインスタンスタイプの１つ以上の新しいインスタンスをインスタンス化することと、
インスタンスタイプの１つ以上の新しいインスタンスからンスタンスを選択することと、を行わせる、付記１３〜１５のいずれかに記載の非一時的コンピュータ可読記憶媒体。
１７．インスタンスが、コンピューティングリソースサービスプロバイダによって提供されたコンテナ管理サービスと通信するインスタンスエージェントを含み、エージェントが、セキュリティ更新をインスタンスに適用するように構成され、セキュリティ更新が、コンテナ管理サービスから受信される、付記１３〜１６のいずれかに記載の非一時的コンピュータ可読記憶媒体。
１８．コンピュータシステムに、インスタンスタイプを決定させる命令が、命令をさらに含み、該命令が、１つ以上のプロセッサによって実行された結果として、コンピュータシステムに、インスタンスタイプが第２の一組のパラメータを満たすようにインスタンスタイプを決定させ、第２の一組のパラメータが、一組のパラメータのうちの１つ以上のパラメータとは異なる１つ以上のパラメータを含み、一組のパラメータのうちの１つ以上のパラメータとは異なる１つ以上のパラメータは、コンテナをインスタンス化するための一組のパラメータが、未プロビジョニングコンテナを指定するという判定に少なくとも部分的に基づいて選択される、付記１３〜１７のいずれかに記載の非一時的コンピュータ可読記憶媒体。
１９．コンピュータシステムに、インスタンスをプロビジョニングさせる命令が、さらに命令を含み、該命令が、１つ以上のプロセッサによって実行された結果として、コンピュータシステムに、ネットワークインターフェースをインスタンスにアタッチさせ、ネットワークインターフェースが、ウェブサービスインターフェイスを介してコンテナと通信することを可能にするように構成される、付記１３〜１８のいずれかに記載の非一時的コンピュータ可読記憶媒体。
２０．命令が、命令をさらに含み、該命令が、１つ以上のプロセッサによって実行された結果として、コンピュータシステムに、コンテナが終了した結果として、インスタンスをインスタンスプールに戻させる、付記１３〜１９のいずれかに記載の非一時的コンピュータ可読記憶媒体。
【００７０】
図１１は、種々の実施形態に従って態様を実施するための例示的な環境１１００の態様を例示する。認識されるように、説明の目的でウェブに基づく環境が使用されるが、種々の実施形態を実現するために、必要に応じて、異なる環境が使用され得る。環境は、電子クライアントデバイス１１０２を含み、該デバイスとしては、適切なネットワーク１１０４を通じて要求、メッセージ、または情報を送信および／または受信し、また、いくつかの実施形態において、情報をデバイスのユーザに搬送するように動作可能な、任意の適切なデバイスを挙げることができる。そのようなクライアントデバイスの例としては、パーソナルコンピュータ、携帯電話、ハンドヘルドメッセージングデバイス、ラップトップコンピュータ、タブレットコンピュータ、セットトップボックス、携帯情報端末、組み込み型コンピュータシステム、電子ブックリーダ等が挙げられる。ネットワークとしては、イントラネット、インターネット、セルラーネットワーク、ローカルエリアネットワーク、衛星ネットワーク、もしくは任意の他のそのようなネットワーク、および／またはそれらの組み合わせを含む、任意の適切なネットワークを挙げることができる。そのようなシステムに使用される構成要素は、選択されたネットワークおよび／または選択環境のタイプに少なくとも部分的に依存し得る。そのようなネットワークを介して通信するための数多くのプロトコルおよび構成要素は公知であり、本明細書では詳細に論じない。ネットワークを通じた通信は、有線接続または無線接続、およびそれらの組み合わせによって可能にすることができる。本実施例では、環境が、要求を受信し、それに応じてコンテンツを提供するためのウェブサーバ１１０６を含むので、ネットワークは、インターネットおよび／または他の公的にアドレス指定可能な通信ネットワークを含むが、他のネットワークの場合、当業者に明らになるように、類似する目的を果たす代替のデバイスを使用することができる。
【００７１】
例示的な環境は、少なくとも１つのアプリケーションサーバ１１０８と、データストア１１１０とを含む。連鎖され得るまたは別様には構成され得る、適切なデータストアからデータを取得する等の作業を行うように相互作用することができる、いくつかのアプリケーションサーバ、層もしくは他の要素、過程、または構成要素があり得ることを理解されたい。サーバは、本明細書で使用されるとき、ハードウェアデバイスまたは仮想コンピュータシステム等の種々の方法で実現され得る。いくつかの文脈において、サーバは、コンピュータシステム上で実行されているプログラムモジュールを指し得る。本明細書で使用される「データストア」という用語は、別途指示がない限り、または文脈から明らかでない限り、データを記憶し、それにアクセスし、それを取り出すことができる任意のデバイスまたはデバイスの組み合わせを指し、任意の数のデータサーバ、データベース、データ記憶デバイス、データ記憶媒体、およびそれらの任意の組み合わせを、任意の標準型、分散型、仮想、またはクラスタ型の環境において含み得る。アプリケーションサーバは、クライアントデバイスのための１つ以上のアプリケーションの態様を実行するために、必要に応じて、データストアと統合するための、およびアプリケーションのためのデータアクセスおよびビジネス論理ロジックの一部または全部を取り扱うための、任意の適切なハードウェア、ソフトウェア、およびファームウェアを含むことができる。アプリケーションサーバは、データストアと協働してアクセス制御サービスを提供し得、また、テキスト、グラフィックス、音声、ビデオ、および／またはユーザに提供するために使用可能な他のコンテンツが挙げられるが、これらに限定されない、コンテンツを生成することが可能であり、該コンテンツは、ハイパーテキストマークアップ言語（「ＨＴＭＬ」）、拡張マークアップ言語（「ＸＭＬ」）、ＪａｖａＳｃｒｉｐｔ（登録商標）、カスケーティングスタイルシート（「ＣＳＳ」）、ＪａｖａＳｃｒｉｐｔ（登録商標）  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ（ＪＳＯＮ）、および／または別の適切なクライアント側構造化言語の形態で、ウェブサーバによってユーザに提供され得る。クライアントデバイスに転送されるコンテンツは、クライアントデバイスによって処理されて、ユーザに聴覚的に、視覚的に、および／または他の感覚を通して知覚可能である形態が挙げられるが、これらに限定されない、１つ以上の形態でコンテンツを提供し得る。全ての要求および応答の取り扱い、ならびにクライアントデバイス１１０２とアプリケーションサーバ１１０８との間のコンテンツの送達は、この例において、ＰＨＰ：ハイパーテキストプリプロセッサ（「ＰＨＰ」）、Ｐｙｔｈｏｎ、Ｒｕｂｙ、Ｐｅｒｌ、Ｊａｖａ（登録商標）、ＨＴＭＬ、ＸＭＬ、ＪＳＯＮ、および／または別の適切なサーバ側構造化言語を使用するウェブサーバによって取り扱うことができる。さらに、単一のデバイスによって行われるように本明細書で説明される動作は、別途文脈から明らかでない限り、分散型システムおよび／または仮想システムを形成し得る複数のデバイスによって集合的に行われ得る。
【００７２】
データストア１１１０は、複数の別個のデータテーブル、データベース、データ文書、動的データ記憶スキーム、および／または特定の本開示の態様に関するデータ記憶するための他のデータ記憶機構および媒体を含むことができる。例えば、例示されるデータストアは、製品側のコンテンツを提供するために使用することができる、製品データ１１１２およびユーザ情報１１１６を記憶するための機構を含み得る。データストアはまた、ログデータ１１１４を記憶するための機構も含むように示され、該機構は、レポーティング、分析、または他のそのような目的のために使用することができる。ページ画像情報およびアクセス権利情報等の、データストアに記憶する必要があり得る、数多くの他の態様があり得、それらは、必要に応じて上で列記した機構のいずれかに、またはデータストア１１１０の追加的な機構に記憶することができることを理解されたい。データストア１１１０は、該データストアそれと関連付けられた論理を通して、アプリケーションサーバ１１０８から命令を受信し、該命令に応じてデータを取得する、更新する、または別様には処理する。アプリケーションサーバ１１０８は、受信した命令に応じて、静的データ、動的データ、または静的データおよび動的データの組み合わせを提供し得る。ウェブログ（ブログ）に使用されるデータ等の動的データ、ショッピングアプリケーション、ニュースサービス、および他のそのようなアプリケーションは、本明細書で説明されるようなサーバ側構造化言語によって生成され得、またはアプリケーションサーバ上で、もしくはその制御下で動作するコンテンツ管理システム（「ＣＭＳ」）によって提供され得る。１つの例において、ユーザは、ユーザが動作させるデバイスを通して、特定のタイプの品目の検索要求を提出し得る。この事例において、データストアは、ユーザの識別情報を検証するためにユーザ情報にアクセスし得、また、そのタイプの品目に関する情報を取得するために、カタログの詳細情報にアクセスすることができる。次いで、ユーザがユーザデバイス１１０２上のブラウザを介して視聴することができるウェブページ上の結果リスト等で、情報をユーザに返すことができる。関心の特定の品目の情報は、ブラウザの専用ページまたはウインドウで視聴することができる。しかしながら、本開示の実施形態は、必ずしもウェブページのコンテンツに限定されるわけではなく、より全般的には、処理要求全般に適用可能であり得、ここで、要求は、必ずしもコンテンツに対する要求ではないことに留意されたい。
【００７３】
各サーバは、一般的に、そのサーバの一般的な管理および操作のための実行可能プログラム命令を提供するオペレーティングシステムを含み、また、一般的に、サーバのプロセッサによって実行されたときに（すなわち、実行された結果として）、サーバがその意図する機能を行うことを可能にする命令を記憶する、コンピュータ可読記憶媒体（例えば、ハードディスク、ランダムアクセスメモリ、読み出し専用メモリ等）を含む。
【００７４】
環境は、１つの実施形態において、１つ以上のコンピュータネットワークまたは直接接続を使用して、通信リンクを介して相互接続される複数のコンピュータシステムおよび構成要素を利用する、分散型および／または仮想コンピューティング環境である。しかしながら、そのようなシステムは、図１１で例示されるよりも少ない数または多い数の構成要素を有するシステムで十分同等に動作できることが、当業者に認識されるであろう。したがって、図１１の例示的な環境１１００に例示されるシステムの描写は、本質的に例示的なものであり、本開示の範囲を限定するものではないとみなされるべきである。
【００７５】
種々の実施形態はさらに、多種多様な動作環境で実現することができ、いくつかの事例において、数多くのアプリケーションのうちのいずれかを動作させるために使用することができる１つ以上のユーザコンピュータ、コンピューティングデバイス、または処理デバイスを含むことができる。ユーザまたはクライアントデバイスとしては、標準的なオペレーティングシステムを稼働させるデスクトップコンピュータ、ラップトップコンピュータ、またはタブレットコンピュータ等の、数多くの汎用パーソナルコンピュータ、ならびに、モバイルソフトウェアを稼働させる、かつ数多くのネットワーキングおよびメッセージングプロトコルをサポートすることができる、セルラーデバイス、無線デバイス、およびハンドヘルドデバイスのうちのいずれかを挙げることができる。そのようなシステムとしてはまた、開発およびデータベース管理等の目的で、種々の市販のオペレーティングシステムおよび他の既知のアプリケーションのいずれかを稼働させる、数多くのワークステーションも挙げることができる。これらのデバイスとしてはまた、ネットワークを介して通信することができる、ダミー端末、シンクライアント、ゲーミングシステム、および他のデバイス等の、他の電子デバイスも挙げることができる。これらのデバイスとしてはまた、ネットワークを介して通信することが可能な仮想マシン、ハイパーバイザ、および他の仮想デバイス等の仮想デバイスも挙げることができる。
【００７６】
本開示の種々の実施形態は、伝送制御プロトコル／インターネットプロトコル（「ＴＣＰ／ＩＰ」）、ユーザデータグラムプロトコル（「ＵＤＰ」）、オープンシステムインターコネクション（「ＯＳＩ」）モデルの種々の層で動作するプロトコル、ファイル転送プロトコル（「ＦＴＰ」）、ユニバーサルプラグアンドプレイ（「ＵｐｎＰ」）、ネットワークファイルシステム（「ＮＦＳ」）、共通インターネットファイルシステム（「ＣＩＦＳ」）、およびＡｐｐｌｅＴａｌｋ等の、様々な市販のプロトコルのいずれかを使用して通信をサポートするための、当業者によく知られている、少なくとも１つのネットワークを利用する。ネットワークは、例えば、ローカルエリアネットワーク、ワイドエリアネットワーク、仮想プライベートネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話ネットワーク、赤外線ネットワーク、無線ネットワーク、衛星ネットワーク、およびそれらの任意の組み合わせとすることができる。いくつかの実施形態では、コネクション型プロトコルを使用して、ネットワークエンドポイント間で通信することができる。コネクション型プロトコル（接続ベースのプロトコルと呼ばれることもある）は、順序付けられたストリームでデータを伝送することが可能である。コネクション型プロトコルは、信頼性の高いもの、または信頼性の低いものとすることができる。例えば、ＴＣＰプロトコルは、信頼性の高いコネクション型プロトコルである。非同期転送モード（「ＡＴＭ」）およびフレームリレーは、信頼性の低いコネクション型プロトコルである。コネクション型プロトコルは、保証された順序を伴わずにパケットを伝送するＵＤＰ等のパケット型プロトコルとは対照的である。
【００７７】
ウェブサーバを利用する実施形態において、ウェブサーバは、ハイパーテキストトランスファープロトコル（「ＨＴＴＰ」）サーバ、ＦＴＰサーバ、共通ゲートウェイインターフェース（「ＣＧＩ」）サーバ、データサーバ、Ｊａｖａ（登録商標）サーバ、Ａｐａｃｈｅサーバ、およびビジネスアプリケーションサーバを含む、様々な任意のサーバまたは中間層アプリケーションのうちのいずれかを稼働させることができる。サーバ（複数可）はまた、ユーザデバイスからの要求に応答して、Ｊａｖａ（登録商標）、Ｃ、Ｃ＃、もしくはＣ＋＋等の任意のプログラミング言語、またはＲｕｂｙ、ＰＨＰ、Ｐｅｒｌ、Ｐｙｔｈｏｎ、もしくはＴＣＬ等の任意のスクリプト言語、ならびにそれらの組み合わせで書かれた１つ以上のスクリプトまたはプログラムとして実現され得る１つ以上のウェブアプリケーションを実行すること等によって、プログラムまたはスクリプトを実行することも可能であり得る。サーバ（複数可）としてはまた、Ｏｒａｃｌｅ（登録商標）、Ｍｉｃｒｏｓｏｆｔ（登録商標）、Ｓｙｂａｓｅ（登録商標）、およびＩＢＭ（登録商標）から市販されているもの、ならびにＭｙＳＱＬ、Ｐｏｓｔｇｒｅｓ、ＳＱＬｉｔｅ、ＭｏｎｇｏＤＢ、および構造化データまたは非構造化データを記憶すること、取り出すこと、それにアクセスすることが可能な任意の他のサーバが挙げられるがそれらに限定されない、データベースサーバも挙げることができる。データベースサーバとしては、テーブルベースのサーバ、文書ベースのサーバ、非構造化サーバ、リレーショナルサーバ、非リレーショナルサーバ、またはこれらのおよび／または他のデータベースサーバの組み合わせを挙げることができる。
【００７８】
環境は、上で論じたように、種々のデータストア、ならびに他のメモリおよび記憶媒体を含むことができる。これらは、コンピュータの１つ以上に対してローカルな（および／もしくはその中に存在する）記憶媒体上、またはネットワーク全体にわたるコンピュータのいずれかもしくは全てからリモートな記憶媒体上等の、様々な場所に存在することができる。特定の一組の実施形態において、情報は、当業者によく知られているストレージエリアネットワーク（「ＳＡＮ」）の中に存在し得る。同様に、コンピュータ、サーバ、または他のネットワークデバイスに起因する機能を行うための任意の必要なファイルを、必要に応じてローカルおよび／またはリモートに記憶することができる。システムがコンピュータ制御のデバイスを含む場合、そのような各デバイスは、バスを介して電気的に連結することができるハードウェア要素を含むことができ、該要素は、例えば、少なくとも１つの中央処理装置（「ＣＰＵ」または「プロセッサ」）と、少なくとも１つの入力デバイス（例えば、マウス、キーボード、コントローラ、タッチスクリーン、またはキーパッド）と、少なくとも１つの出力デバイス（例えば、表示デバイス、プリンタ、またはスピーカ）とを含む。そのようなシステムはまた、ディスクドライブ、光記憶デバイス、およびランダムアクセスメモリ（「ＲＡＭ」）または読み出し専用メモリ（「ＲＯＭ」）等の固体記憶デバイス、ならびにリムーバブル媒体デバイス、メモリカード、フラッシュカード等の、１つ以上の記憶デバイスも含むことができる。
【００７９】
そのようなデバイスはまた、上で説明したように、コンピュータ可読記憶媒体リーダ、通信デバイス（例えば、モデム、ネットワークカード（無線または有線）、赤外線通信デバイス等）、およびワーキングメモリも含むことができる。コンピュータ可読記憶媒体リーダは、リモート、ローカル、固定の、および／またはリムーバブル記憶デバイスを表すコンピュータ可読記憶媒体、ならびにコンピュータ可読情報を一時的におよび／または永続的に含む、記憶する、伝送する、および取り出すための記憶媒体と接続することができるか、または該記憶媒体を受容するように構成することができる。システムおよび種々のデバイスはまた、一般的に、オペレーティングシステム、およびクライアントアプリケーションまたはウェブブラウザ等のアプリケーションプログラムを含む、少なくとも１つのワーキングメモリデバイス内に位置する数多くのソフトウェアアプリケーション、モジュール、サービス、または他の要素も含む。加えて、カスタマイズされたハードウェアも使用することができ、および／または特定の要素を、ハードウェア、ソフトウェア（アプレット等のポータブルソフトウェアを含む）、または双方に実装することができる。さらに、ネットワーク入力／出力デバイス等の他のコンピューティングデバイスへの接続を用いることができる。
【００８０】
コードまたはコードの一部分を含むための記憶媒体およびコンピュータ可読媒体としては、ＲＡＭ、ＲＯＭ、電気的消去可能プログラマブル読み出し専用メモリ（「ＥＥＰＲＯＭ」）、フラッシュメモリ、もしくは他のメモリ技術、コンパクトディスク読み出し専用メモリ（「ＣＤ−ＲＯＭ」）、デジタル多用途ディスク（ＤＶＤ）、もしくは他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、もしくは他の磁気記憶デバイス、または所望の情報を記憶するために使用することができ、かつシステムデバイスによってアクセスすることができる任意の他の媒体を含む、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータ等の情報を記憶および／または伝送するための任意の方法または技術で実現される揮発性および不揮発性のリムーバブル媒体および非リムーバブル媒体等が挙げられるが、それらに限定されない、記憶媒体および通信媒体を含む、当該技術分野で既知であるまたは使用されている、任意の適切な媒体が挙げられる。本明細書で提供される開示および教示に基づいて、当業者は、種々の実施形態を実施するための他の方法および／または方法を認識するであろう。
【００８１】
故に、本明細書および図面は、限定的な意味ではなく、例示的な意味であるとみなされるべきである。しかしながら、特許請求の範囲に記載される本発明のより広範な趣旨および範囲から逸脱することなく、種々の修正および変更が行われ得ることが明らかになるであろう。
【００８２】
他の変形例は、本開示の趣旨の範囲内である。したがって、開示される手法は、種々の修正物および代替構造が可能であるが、その特定の例示される実施形態を図面に示し、上で詳細に説明した。しかしながら、本発明を、開示する１つまたは複数の特定の形態に限定することは意図しておらず、それとは逆に、添付の特許請求の範囲によって定義されるような本発明の趣旨および範囲の範囲内に入る全ての修正物、代替の構成物、および均等物を網羅することを意図することを理解されたい。
【００８３】
開示された実施形態を説明する文脈における（特に以下の特許請求の範囲の文脈における）「ａ」および「ａｎ」および「ｔｈｅ」という用語、ならびに類似の指示対象の使用は、本明細書で別途指示されない限り、または文脈によって明らかに否定されない限り、単数および複数の両方を網羅するものと解釈されたい。「備える（ｃｏｍｐｒｉｓｉｎｇ）」、「有する（ｈａｖｉｎｇ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」、および「含有する（ｃｏｎｔａｉｎｉｎｇ）」という用語は、別途注記のない限り、オープンエンドの用語（すなわち、「含むが、それに限定されない」ことを意味する）として解釈されたい。「接続される（ｃｏｎｎｅｃｔｅｄ）」という用語は、未修正であるとき、および物理的接続を指すときに、途中に中断がある場合であっても、部分的または全体的にその中に含まれる、取り付けられる、または互いに接合されるものとして解釈されたい。本明細書での値の範囲の列挙は、本明細書で別途指示されない限り、単に、その範囲内に入る各別個の値を個々に参照する簡単な方法としての役割を果たすように意図されたものであり、各別個の値は、本明細書で個々に列挙されているかのように、本明細書に組み込まれる。「組」（例えば、「一組の品目」）という用語の使用は、別途注記のない限り、または文脈と矛盾しない限り、１つ以上の部材を備える、空でない集合であるものとして解釈されたい。さらに、別途注記のない限り、または文脈と矛盾しない限り、対応する組の「サブセット」という用語は、必ずしも対応する組の適切なサブセットを意味するものではなく、サブセットおよび対応する組は、同等であり得る。
【００８４】
「Ａ、Ｂ、およびＣのうちの少なくとも１つ（ａｔ  ｌｅａｓｔ  ｏｎｅ  ｏｆ  Ａ，Ｂ，ａｎｄ  Ｃ）」または「Ａ、ＢおよびＣのうちの少なくとも１つ（ａｔ  ｌｅａｓｔ  ｏｎｅ  ｏｆ  Ａ，Ｂ  ａｎｄ  Ｃ）」という形態の慣用句等の接続語は、別途具体的に提示されない限り、または別様には明らかに文脈と矛盾しない限り、そうでなければ、その文脈は、一般に、品目、用語等がＡまたはＢまたはＣ、またはＡおよびＢおよびＣの組の任意の空でないサブセットであり得ることを提示するために使用されるものと理解されたい。例えば、上の接続語句で使用される３つの項を有する組の例示的な例において、「Ａ、Ｂ、およびＣのうちの少なくとも１つ（ａｔ  ｌｅａｓｔ  ｏｎｅ  ｏｆ  Ａ，Ｂ，ａｎｄ  Ｃ）」および「Ａ、ＢおよびＣのうちの少なくとも１つ（ａｔ  ｌｅａｓｔ  ｏｎｅ  ｏｆ  Ａ，Ｂ  ａｎｄ  Ｃ）」は、｛Ａ｝、｛Ｂ｝、｛Ｃ｝、｛Ａ、Ｂ｝、｛Ａ、Ｃ｝、｛Ｂ、Ｃ｝、｛Ａ、Ｂ、Ｃ｝という組のうちのいずれかを指す。したがって、そのような接続語は、一般に、特定の実施形態が、少なくとも１つのＡ、少なくとも１つのＢ、少なくとも１つのＣが各々存在することを必要とすることを意味することを意図しない。
【００８５】
本明細書に記載される全ての方法は、本明細書に別途記載のない限り、または文脈に明らかな矛盾がない限り、任意の好適な順序で行うことができる。本明細書で説明されるプロセス（またはその変形および／または組み合わせ）は、実行可能命令を伴って構成された１つ以上のコンピュータシステムの制御下で行うことができ、また、ハードウェアまたはその組み合わせによって、１つ以上のプロセッサ上で集合的に実行するコード（例えば、実行可能命令、１つ以上のコンピュータプログラム、または１つ以上のアプリケーション）として実施することができる。このコードは、例えば１つ以上のプロセッサによって実行可能な複数の命令を含むコンピュータプログラムの形態で、コンピュータ可読記憶媒体に記憶することができる。コンピュータ可読記憶媒体は、非一時的とすることができる。いくつかの実施形態において、コードは、実行可能命令を記憶した一組の１つ以上の非一時的コンピュータ可読記憶媒体に記憶され、該命令は、コンピュータシステムの１つ以上のプロセッサによって実行されたときに（すなわち、実行された結果として）、コンピュータシステムに、本明細書で説明される動作を行わせる。一組の非一時的コンピュータ可読記憶媒体は、多数の非一時的コンピュータ可読記憶媒体を備えることができ、多数の非一時的コンピュータ可読記憶媒体の個々の非一時的記憶媒体の１つ以上は、多数の非一時的コンピュータ可読記憶媒体が全てのコードを集合的に記憶している間、全てのコードが存在しない場合がある。さらに、いくつかの例において、実行可能命令は、異なる命令が異なるプロセッサによって実行されるように実行される。例示的な例として、非一時的コンピュータ可読記憶媒体は、命令を記憶することができる。主ＣＰＵは、命令のうちのいくつかを実行することができ、グラフィックスプロセッサユニットは、他の命令を実行することができる。一般に、コンピュータシステムの異なる構成要素は、別個のプロセッサを有することができ、異なるプロセッサは、命令の異なるサブセットを実行することができる。
【００８６】
故に、いくつかの例において、コンピュータシステムは、本明細書で説明されるプロセスの動作を単独で、または集合的に行う、１つ以上のサービスを実行するように構成される。そのようなコンピュータシステムは、例えば、動作を行うことを可能にする適用可能なハードウェアおよび／またはソフトウェアを伴って構成することができる。さらに、本開示の種々の実施形態を実施するコンピュータシステムは、いくつかの例では、単一のデバイスとすることができ、他の例では、多数のデバイスを含む分散型コンピュータシステムとすることができ、該デバイスは、分散型コンピュータシステムが本明細書で説明される動作を行うように、かつ単一のデバイスが全ての動作を行うことができないように、異なって動作する。
【００８７】
本明細書で提供される任意のおよび全ての例、または例示的な言葉（例えば「等（ｓｕｃｈ  ａｓ）」は、単に、本発明の実施形態をより明確にすることを意図しているに過ぎず、別途特許請求されていない限り、本発明の範囲を限定するものではない。明細書の中のいかなる言葉も、特許請求されていない何らかの要素が本発明の実践に必須であることを示すものではないと解釈されたい。
【００８８】
本発明を行うための、発明者等に既知の最良の方法を含む、本開示の実施形態が本明細書で説明される。当業者には、上の説明を読むことにより、こうした実施形態の変形例が明らかとなり得る。本発明者らは、そのような変形例を必要に応じて採用することを予期し、本発明者らは、本明細書で具体的に説明されるもの以外で本開示が実践されることを意図する。故に、本開示の範囲は、適用法によって許容される本明細書に添付される特許請求の範囲に記載される主題の全ての修正物および等価物を含む。さらに、上で説明される要素の全ての可能な変形例におけるその要素の任意の組み合わせは、本明細書で別途指示されない限り、または明らかに文脈と矛盾しない限り、本開示の範囲によって包含される。
【００８９】
本明細書に列挙される出版物、特許出願、および特許を含む全ての参考文献は、あたかも各参考文献が参照により組み込まれると個別にかつ具体的に示され、その全体が本明細書に記載されているのと同程度まで、参照により本明細書に組み込まれる。
【図１】
2019530095.tif 000004
【図２】
2019530095.tif 000005
【図３】
2019530095.tif 000006
【図４】
2019530095.tif 000007
【図５】
2019530095.tif 000008
【図６】
2019530095.tif 000009
【図７】
2019530095.tif 000010
【図８】
2019530095.tif 000011
【図９】
2019530095.tif 000012
【図１０】
2019530095.tif 000013
【図１１】
2019530095.tif 000014
【手続補正書】
【提出日】平成31年3月28日(2019.3.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
システムであって、プロセッサおよびメモリを伴って構成された少なくとも１つのコンピューティングデバイスを備え、前記メモリが、命令を含み、該命令が実行されると、前記システムに、
インスタンスプールからインスタンスを選択することであって、前記インスタンスプールが、一組の稼働中のインスタンスを含み、前記一組の稼働中のインスタンスの各インスタンスが、対応するインスタンスタイプを有し、前記インスタンスは、前記インスタンスタイプが、少なくともタスク定義内の情報から取得されたコンテナをインスタンス化するための一組のパラメータを満たす一組の性能特性を有するように選択され、前記インスタンスが、前記コンテナと関連付けられた顧客に割り当てられる、選択することと、
前記インスタンスをプロビジョニングすることと、
前記タスク定義に少なくとも部分的に基づいて、前記インスタンス上の前記コンテナをインスタンス化することと、を行わせる、システム。
【請求項２】
前記システムに前記インスタンスプールから前記インスタンスを選択させる前記命令が、さらに命令を含み、該命令が実行されると、前記システムに、
前記タスク定義から取得された前記一組のパラメータを分析して、前記インスタンスの一組の性能仕様を生成することであって、前記インスタンスの前記一組の性能仕様が、前記インスタンスのＣＰＵ仕様、前記インスタンスのメモリ仕様、または前記インスタンスのネットワーク帯域幅仕様、のうちの少なくとも１つを含む、生成することと、
前記一組の性能仕様を満たすリソースを含む前記インスタンスに少なくとも部分的に基づいて、前記インスタンスプールから前記インスタンスを選択することと、を行わせる、請求項１に記載のシステム。
【請求項３】
前記インスタンスの前記一組の性能仕様が、前記インスタンスのハードウェア要件を含み、前記インスタンスの前記ハードウェア要件が、フィールドプログラマブルゲートアレイ要件、特定用途向け集積回路要件、ハードウェアセキュリティモジュール要件、またはグラフィックス処理ユニット要件、のうちの少なくとも１つを指定する、請求項２に記載のシステム。
【請求項４】
前記タスク定義が、一組のコンテナを説明し、前記一組のコンテナの各コンテナが、１つ以上のコンテナ記述に対応する、請求項１〜３のいずれか一項に記載のシステム。
【請求項５】
前記システムが、ネットワークインターフェースを前記インスタンスにアタッチして、前記インスタンスを前記顧客の仮想ネットワークに接続することによって、および一時的なボリュームを前記インスタンスにアタッチすることによって、前記インスタンスをプロビジョニングし、前記一時的なボリュームは、前記コンテナが稼働している間に、データの読み出しおよび書き込みを行うために、前記コンテナによって使用可能である、請求項１〜４のいずれか一項に記載のシステム。
【請求項６】
前記インスタンスのインスタンスエージェントが、前記インスタンスを監視し、また、前記インスタンスの１つ以上のヘルスメトリックを、コンピューティングリソースサービスプロバイダによって提供されるコンテナ管理サービスに提供する、請求項１〜５のいずれか一項に記載のシステム。
【請求項７】
前記インスタンスエージェントが、１つ以上のリソース使用状況メトリックについて前記コンテナを監視し、前記１つ以上のリソース使用状況メトリックが、前記コンテナと関連付けられたリソースコストを決定するために使用可能である、請求項６に記載のシステム。
【請求項８】
方法であって、
インスタンスタイプが、コンテナを前記インスタンスタイプのインスタンス上でインスタンス化するための一組のパラメータを満たすように、前記インスタンスタイプを決定することであって、前記コンテナをインスタンス化するための前記一組のパラメータが、前記コンテナのコンテナ記述に含まれる、決定することと、
インスタンスプールから前記インスタンスタイプのインスタンスを選択することであって、前記インスタンスプールが、一組の稼働中のインスタンスを含む、選択することと、
前記インスタンスを、前記コンテナと関連付けられた顧客に割り当てさせることと、
前記コンテナを、前記コンテナ記述に対応する前記インスタンス上でインスタンス化することと、を含む、方法。
【請求項９】
前記インスタンスタイプを決定することが、前記インスタンスタイプの前記一組のパラメータに少なくとも部分的に基づいて、前記インスタンスタイプを決定することをさらに含み、前記インスタンスタイプが、前記コンテナを前記インスタンスタイプのインスタンス上でインスタンス化するための前記一組のパラメータを満たす一組の性能特性を有する、請求項８に記載の方法。
【請求項１０】
前記インスタンスタイプの前記インスタンスを選択することが、前記インスタンスタイプのいかなるインスタンスも前記インスタンスプール内に存在しないと判定されると、一組のインスタンスから前記インスタンスを選択することであって、インスタンスタイプが、前記コンテナを前記インスタンスタイプのインスタンス上でインスタンス化するための前記一組のパラメータの最小数のパラメータを満たす一組の性能特性を有し、前記最小数が、前記コンテナ記述に指定される、選択することをさらに含む、請求項８または９に記載の方法。
【請求項１１】
前記インスタンスタイプの前記インスタンスを選択することが、
前記インスタンスプール内の前記インスタンスタイプの１つ以上の新しいインスタンスをインスタンス化することと、
前記インスタンスタイプの前記１つ以上の新しいインスタンスから前記インスタンスを選択することと、をさらに含む、請求項８〜１０のいずれか一項に記載の方法。
【請求項１２】
前記インスタンスが、コンピューティングリソースサービスプロバイダによって提供されたコンテナ管理サービスと通信するインスタンスエージェントを含み、前記インスタンスエージェントが、セキュリティ更新を前記インスタンスに適用するように構成され、前記セキュリティ更新が、前記コンテナ管理サービスから受信される、請求項８〜１１のいずれか一項に記載の方法。
【請求項１３】
前記インスタンスタイプを決定することは、前記インスタンスタイプが第２の一組のパラメータを満たすように、前記インスタンスタイプを決定することをさらに含み、前記第２の一組のパラメータが、前記一組のパラメータのうちの１つ以上のパラメータとは異なる１つ以上のパラメータを含み、前記一組のパラメータのうちの前記１つ以上のパラメータとは異なる前記１つ以上のパラメータは、前記コンテナをインスタンス化するための前記一組のパラメータが、未プロビジョニングコンテナを指定するという判定に少なくとも部分的に基づいて選択される、請求項８〜１２のいずれか一項に記載の方法。
【請求項１４】
前記インスタンスをプロビジョニングすることが、ネットワークインターフェースを前記インスタンスにアタッチすることをさらに含み、前記ネットワークインターフェースが、ウェブサービスインターフェイスを介して前記コンテナと通信することを可能にするように構成される、請求項８〜１３のいずれか一項に記載の方法。
【請求項１５】
前記コンテナが終了した結果として、前記インスタンスを前記インスタンスプールに戻すことをさらに含む、請求項８〜１４のいずれか一項に記載の方法。
【国際調査報告】
2019530095.tif 000015
2019530095.tif 000016