(57)【特許請求の範囲】
【請求項１】
低レイテンシの計算的能力を提供するためのシステムであって、
ユーザの少なくとも１つのプログラムコードを記憶するように構成された電子データストアと、
特有のコンピュータ実行可能命令を実行する１つまたは複数のハードウェアコンピューティングデバイスを含む仮想計算システムとを備え、前記仮想計算システムは、前記電子データストアと通信し、少なくとも、
１つまたは複数の物理コンピューティングデバイスにおいて複数の仮想マシンインスタンスを維持することであって、前記複数の仮想マシンインスタンスは、１つまたは複数のソフトウェアコンポーネントがロードされ、かつユーザに割り当てられるのを待機している、仮想マシンインスタンスを含むウォーミングプール、及び１人または複数人のユーザに、現在、割り当てられている仮想マシンインスタンスを含むアクティブプールを備える、前記維持することと、
前記仮想計算システムにおいて特定のユーザに関連付けられるプログラムコードを実行するための要求を受信することであって、前記要求が、前記プログラムコード及び前記プログラムコードに関連付けられる前記特定のユーザを示す情報を含む、前記受信することと、
前記受信された要求に基づいて、前記プログラムコードを実行させることになる１つまたは複数のセキュリティパラメータを指定するユーザ指定のセキュリティポリシを決定することと、
前記ウォーミングプールまたは前記アクティブプールから、前記プログラムコードを実行するのに使用されることになる仮想マシンインスタンスを選択することと、
前記ユーザ指定のセキュリティポリシに基づいて、前記選択された仮想マシンインスタンスにコンテナを作成することと、
前記特定のユーザに関連付けられる前記プログラムコードを、前記コンテナ上に前記電子データストアからロードさせ、前記セキュリティポリシに従って前記コンテナにおいて実行させることと
を行うように構成される、
前記システム。
【請求項２】
前記１つまたは複数のセキュリティパラメータが、処理持続時間限度、メモリ限度、伝送制御プロトコル（「ＴＣＰ」）ソケット接続を可能にするパラメータ、前記コンテナへのインバウンドもしくはアウトバウンドのネットワーク接続を可能にするパラメータ、前記コンテナが仮想プライベートクラウドと通信できるようにするパラメータ、前記コンテナが前記選択された仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、前記コンテナが第２の仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、及び前記コンテナが前記プログラムコードとの関連で実行することを許可されるアクセス制限機能のリスト、のうちの１つまたは複数を含む、請求項１に記載のシステム。
【請求項３】
前記ユーザ指定のセキュリティポリシが、前記特定のユーザに関連付けられるセキュリティポリシに一部、基づいている、請求項１に記載のシステム。
【請求項４】
特有のコンピュータ実行可能命令を実行する１つまたは複数のハードウェアコンピューティングデバイスを含む仮想計算システム、
を備えるシステムであって、前記仮想計算システムが、少なくとも、
前記仮想計算システムにおいてプログラムコードを実行するための要求に基づいて、前記プログラムコードを実行させることになる１つまたは複数のセキュリティパラメータを指定するユーザ指定のセキュリティポリシを決定することであって、前記プログラムコードが、特定のユーザに関連付けられる、前記決定することと、
１つまたは複数の物理コンピューティングデバイスにおいて維持される複数の仮想マシンインスタンスから、前記プログラムコードを実行するのに使用されることになる仮想マシンインスタンスを選択することと、
前記１つまたは複数のセキュリティパラメータに基づいて、前記選択された仮想マシンインスタンスにコンテナを取得することと、
前記特定のユーザに関連付けられる前記プログラムコードを、前記ユーザ指定のセキュリティポリシに少なくとも一部基づいて、前記コンテナにおいて実行させることと
を行うように構成される、
前記システム。
【請求項５】
前記１つまたは複数のセキュリティパラメータが、処理持続時間限度、メモリ限度、伝送制御プロトコル（「ＴＣＰ」）ソケット接続を可能にするパラメータ、前記コンテナへのインバウンドもしくはアウトバウンドのネットワーク接続を可能にするパラメータ、前記コンテナが補助サービスと通信できるようにするパラメータ、前記コンテナが前記選択された仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、前記コンテナが第２の仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、及び前記コンテナが前記プログラムコードとの関連で実行することを許可されるアクセス制限機能のリスト、のうちの１つまたは複数を含む、請求項４に記載のシステム。
【請求項６】
前記セキュリティポリシが、前記仮想計算システムにおいて前記プログラムコードを実行するのに割り当てられることになるコンピューティングリソースの量をさらに指定し、前記仮想マシンインスタンスにおいて前記コンテナを作成することが、少なくとも、前記仮想マシンインスタンスにおいて利用可能なコンピューティングリソースから、コンピューティングリソースの示された量を割り当てることを含む、請求項４に記載のシステム。
【請求項７】
前記セキュリティポリシが、少なくとも、信頼されている認証情報を使用して実行されることになる前記プログラムコードの第１の部分、及び前記信頼されている認証情報を使用せずに実行されることになる前記プログラムコードの第２の部分を示す構成データをさらに含む、請求項４に記載のシステム。
【請求項８】
前記ユーザ指定のセキュリティポリシが、前記特定のユーザに関連付けられるセキュリティポリシに一部基づいている、請求項４に記載のシステム。
【請求項９】
前記仮想計算システムが、
１人または複数人のユーザに、現在、割り当てられている仮想マシンインスタンスのアクティブプールを維持することであって、前記アクティブプールの中の各仮想マシンインスタンスは、１つまたは複数のソフトウェアコンポーネントがロードされている、前記維持することと、
前記アクティブプールから前記仮想マシンインスタンスを選択することであって、前記仮想マシンインスタンスが、前記ユーザ指定のセキュリティポリシに従って構成される、前記選択することと、
を行うようにさらに構成される、請求項４に記載のシステム。
【請求項１０】
前記１つまたは複数のセキュリティパラメータに従って、前記選択された仮想マシンインスタンスにコンテナを取得するために、前記仮想計算システムは、
前記プログラムコードがロードされ、かつ前記１つまたは複数のセキュリティパラメータに従って構成されている、構成されたコンテナを、前記仮想マシンインスタンスが含んでいることを決定することと、
前記プログラムコードを実行するための使用に向けて、前記構成されたコンテナを選択することと、
を行うようにさらに構成される、請求項４に記載のシステム。
【請求項１１】
コンピュータ実装方法であって、
特有の実行可能命令を実行する１つまたは複数のコンピューティングデバイスによって実装されるとき、
仮想計算システムにおいてプログラムコードを実行するための要求に基づいて、前記プログラムコードを実行させることになる１つまたは複数のセキュリティパラメータを指定するユーザ指定のセキュリティポリシを決定することであって、前記プログラムコードが、特定のユーザに関連付けられる、前記決定することと、
１つまたは複数の物理コンピューティングデバイスにおいて維持される複数の仮想マシンインスタンスから、前記プログラムコードを実行するのに使用されることになる仮想マシンインスタンスを選択することと、
前記１つまたは複数のセキュリティパラメータに従って、前記選択された仮想マシンインスタンスにコンテナを作成することと、
前記特定のユーザに関連付けられる前記プログラムコードを、前記ユーザ指定のセキュリティポリシに少なくとも一部基づいて、前記コンテナにおいて実行させることと、
を含む、前記コンピュータ実装方法。
【請求項１２】
前記１つまたは複数のセキュリティパラメータが、処理持続時間限度、メモリ限度、伝送制御プロトコル（「ＴＣＰ」）ソケット接続を可能にするパラメータ、前記コンテナへのインバウンドもしくはアウトバウンドのネットワーク接続を可能にするパラメータ、前記コンテナが補助サービスと通信できるようにするパラメータ、前記コンテナが前記選択された仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、前記コンテナが第２の仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、及び前記コンテナが前記プログラムコードとの関連で実行することを許可されるアクセス制限機能のリスト、のうちの１つまたは複数を含む、請求項１１に記載のコンピュータ実装方法。
【請求項１３】
前記セキュリティポリシが、前記仮想計算システムにおいて前記プログラムコードを実行するのに割り当てられることになるコンピューティングリソースの量をさらに指定し、前記仮想マシンインスタンスにおいて前記コンテナを作成することが、少なくとも、前記仮想マシンインスタンスにおいて利用可能なコンピューティングリソースから、コンピューティングリソースの示された量を割り当てることを含む、請求項１１に記載のコンピュータ実装方法。
【請求項１４】
前記１つまたは複数のセキュリティパラメータに従って、前記選択された仮想マシンインスタンスにコンテナを取得することは、
前記プログラムコードがロードされ、かつ前記１つまたは複数のセキュリティパラメータに従って構成されているコンテナを、前記仮想マシンインスタンスが含んでいることを決定することと、
前記プログラムコードを実行するための使用に向けて、前記コンテナを選択することと、
をさらに含む、請求項１１に記載のコンピュータ実装方法。
【請求項１５】
前記１つまたは複数のセキュリティパラメータに従って、前記選択された仮想マシンインスタンスにコンテナを取得することは、
前記プログラムコードがロードされ、かつ前記１つまたは複数のセキュリティパラメータに従って構成されているコンテナを、前記仮想マシンインスタンスが含んでいないことを決定することと、
前記１つまたは複数のセキュリティパラメータに従ってコンテナを作成し、前記特定のユーザに関連付けられる前記プログラムコードを、前記コンテナ上に電子データストアからロードさせることと、
をさらに含む、請求項１１に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【０００１】
＜他出願の相互参照＞
本出願の出願人は、２０１５年２月４日に以下の米国特許出願を先に出願済みである。
出願番号  １４／６１３，７３５
発明の名称  ＳＥＣＵＲＩＴＹ  ＰＲＯＴＯＣＯＬＳ  ＦＯＲ  ＬＯＷ  ＬＡＴＥＮＣＹ  ＥＸＥＣＵＴＩＯＮ  ＯＦ  ＰＲＯＧＲＡＭ  ＣＯＤＥ
出願番号  １４／６１３，７２３
発明の名称  ＳＥＣＵＲＩＴＹ  ＰＲＯＴＯＣＯＬＳ  ＦＯＲ  ＬＯＷ  ＬＡＴＥＮＣＹ  ＥＸＥＣＵＴＩＯＮ  ＯＦ  ＰＲＯＧＲＡＭ  ＣＯＤＥ
【０００２】
本出願の出願人は、２０１４年９月３０日に以下の米国特許出願を先に出願済みである。
出願番号  １４／５０２，５８９
発明の名称  発明の名称  ＭＥＳＳＡＧＥ−ＢＡＳＥＤ  ＣＯＭＰＵＴＡＴＩＯＮ  ＲＥＱＵＥＳＴ  ＳＣＨＥＤＵＬＩＮＧ
出願番号  １４／５０２，８１０
発明の名称  ＬＯＷ  ＬＡＴＥＮＣＹ  ＣＯＭＰＵＴＡＴＩＯＮＡＬ  ＣＡＰＡＣＩＴＹ  ＰＲＯＶＩＳＩＯＮＩＮＧ
出願番号  １４／５０２，７１４
発明の名称  ＡＵＴＯＭＡＴＩＣ  ＭＡＮＡＧＥＭＥＮＴ  ＯＦ  ＬＯＷ  ＬＡＴＥＮＣＹ  ＣＯＭＰＵＴＡＴＩＯＮＡＬ  ＣＡＰＡＣＩＴＹ
出願番号  １４／５０２，９９２
発明の名称  ＴＨＲＥＡＤＩＮＧ  ＡＳ  Ａ  ＳＥＲＶＩＣＥ
出願番号  １４／５０２，６４８
発明の名称  ＰＲＯＧＲＡＭＭＡＴＩＣ  ＥＶＥＮＴ  ＤＥＴＥＣＴＩＯＮ  ＡＮＤ  ＭＥＳＳＡＧＥ  ＧＥＮＥＲＡＴＩＯＮ  ＦＯＲ  ＲＥＱＵＥＳＴＳ  ＴＯ  ＥＸＥＣＵＴＥ  ＰＲＯＧＲＡＭ  ＣＯＤＥ
出願番号  １４／５０２，７４１
発明の名称  ＰＲＯＣＥＳＳＩＮＧ  ＥＶＥＮＴ  ＭＥＳＳＡＧＥＳ  ＦＯＲ  ＵＳＥＲ  ＲＥＱＵＥＳＴＳ  ＴＯ  ＥＸＥＣＵＴＥ  ＰＲＯＧＲＡＭ  ＣＯＤＥ
出願番号  １４／５０２，６２０
発明の名称  ＤＹＮＡＭＩＣ  ＣＯＤＥ  ＤＥＰＬＯＹＭＥＮＴ  ＡＮＤ  ＶＥＲＳＩＯＮＩＮＧ
【０００３】
上記に参照される出願の開示は、その全体において参照により本明細書に組み込まれる。
【背景技術】
【０００４】
一般的に説明すると、コンピューティングデバイスは、通信ネットワーク、または一連の通信ネットワークを利用して、データを交換する。企業及び組織は、いくつかのコンピューティングデバイスを相互接続するコンピュータネットワークを運用して、サードパーティに対する運用を支援する、またはサービスを提供する。コンピューティングシステムは、単一の地理的な場所に配置されることも、または複数の別個の地理的な場所に配置される（たとえば、プライベートもしくは公共の通信ネットワークを介して相互接続される）こともある。具体的には、データセンタ、または本明細書においては概して「データセンタ（ｄａｔａ  ｃｅｎｔｅｒ）」と呼ばれるデータ処理センタは、データセンタのユーザにコンピューティングリソースを提供するために、いくつかの相互接続されたコンピューティングシステムを含み得る。データセンタは、組織の代わりに運用されるプライベートデータセンタ、または一般公共の代わりにもしくは利益のために運用される公共データセンタであってよい。
【０００５】
データセンタリソースの利用上昇を促進するために、仮想化技術は、単一の物理コンピューティングデバイスが、データセンタのユーザに独立したコンピューティングデバイスとして現れ、動作する仮想マシンの１つまたは複数のインスタンスをホストすることを可能にし得る。仮想化により、単一の物理コンピューティングデバイスは、動的な形で仮想マシンを作成する、維持する、削除する、またはそうでければ管理することができる。ひいては、ユーザは、単一のコンピューティングデバイス、またはネットワーク化されたコンピューティングデバイスの構成を含んだ、データセンタからのコンピュータリソースを要求することができ、様々な数の仮想マシンリソースを提供することができる。
【０００６】
いくつかのシナリオにおいては、仮想マシンインスタンスは、特有の機能性を提供するように、いくつかの仮想マシンインスタンスタイプに従って構成され得る。たとえば、様々なコンピューティングデバイスは、コンピューティングデバイスが、相異なる所望の機能性を提供できるようにするために、または同様の機能性をより効率的に提供できるようにするために、オペレーティングシステムまたはオペレーティングシステム構成され得て、仮想化されたハードウェアリソース及びソフトウェアアプリケーションの相異なる組合せに関連付けられ得る。これらの仮想マシンインスタンスタイプ構成は、仮想マシンが、一旦、起動されると実行することになるソフトウェアを含んでいる静的データ（たとえば、それらの構成及びデータファイルなどと一緒にＯＳならびにアプリケーション）を含むデバイスイメージ内に含まれていることが多い。デバイスイメージは、通常、インスタンスを作成する、または初期化するのに使用されるディスクにおいて記憶される。したがって、コンピューティングデバイスは、デバイスイメージを処理して、所望のソフトウェア構成を実装することができる。
【発明の概要】
【０００７】
本開示の前述の態様、及び付随する利点の多くは、これが、添付の図面と併せて解釈されるとき、以下の詳細な説明を参照することによってより良く理解されるようになるにつれて、より容易に理解されることになるであろう。
【図面の簡単な説明】
【０００８】
【図１】例示的な態様による、低レイテンシの計算能力を提供するための例示的な環境を示すブロック略図である。
【図２】図１の仮想計算システムなど、仮想計算システムによって実装される、低レイテンシの計算能力を提供するための環境におけるセキュリティを管理するためのセキュリティマネージャを提供するコンピューティングデバイスの全体的なアーキテクチャを示す。
【図３】図１の仮想計算システムなど、仮想計算システムによって実装される、ユーザ指定のセキュリティポリシに関与するセキュリティルーチンを示すフロー図である。
【図４】図１の仮想計算システムなど、仮想計算システムによって実装される、補助サービスとのインターフェースに関与するセキュリティルーチンを示すフロー図である。
【図５】図１の仮想計算システムなど、仮想計算システムによって実装される、相異なる信頼レベルに関連付けられる部分でのプログラムコードの実行に関与するセキュリティルーチンを示すフロー図である。
【図６】図１の仮想計算システムなど、仮想計算システムによって実装される、補助サービスとのインターフェースに関与するセキュリティルーチンのための例示的な環境を示すブロック略図である。
【図７】図１の仮想計算システムなど、仮想計算システムによって実装される、相異なる信頼レベルに関連付けられる部分でのプログラムコードの実行に関与するセキュリティルーチンのための例示的な環境を示すブロック略図である。
【発明を実施するための形態】
【０００９】
企業及び組織はもはや、コンピューティング動作を行う（たとえば、スレッド、プログラム、関数、ソフトウェア、ルーチン、サブルーチン、処理などを含むコードを実行する）ために、自らのデータセンタを取得し、管理する必要はない。クラウドコンピューティングの出現により、従来はハードウェアコンピューティングデバイスによって提供されていたストレージ空間及び計算パワーは、今や、インターネット（Ｉｎｔｅｒｎｅｔ）を介して数分で獲得され、構成され得る。したがって、開発者は、物理マシンの取得について悩む必要なく、所望の量のコンピューティングリソースをすぐに購入することができる。そのようなコンピューティングリソースは、通常、仮想コンピューティングリソース、または仮想マシンインスタンスの形態で購入される。仮想マシンのこれらのインスタンスは、物理マシン（たとえば、コンピュータ）のソフトウェアの実装であり、それは、物理コンピューティングデバイスにおいてホストされ、それ自体のオペレーティングシステム及び従来から物理マシンにおいて提供されている他のアプリケーションを含んでよい。これらの仮想マシンインスタンスには、仮想マシンインスタンスにおいて動作するアプリケーションが、要求することができ、物理コンピュータと同じ形で利用することができるコンピューティングリソース（たとえば、メモリ、ＣＰＵ、ディスク、ネットワークなど）の組が構成されている。
【００１０】
しかしながら、仮想コンピューティングリソースが（たとえば、仮想マシンインスタンスの形態で）購入される場合であっても、開発者は依然として、どのくらいの数またはどのタイプの仮想マシンインスタンスを購入するか、及びそれらをどのくらいの間、保持するかを決めなくてはならない。たとえば、仮想マシンインスタンスを使用する費用は、タイプ、及びそれらが貸し出される時間数に応じて変わり得る。加えて、仮想マシンが貸し出し可能な最小時間は、通常、数時間のオーダーである。さらには、開発者は、ハードウェア及びソフトウェアのリソース（たとえば、オペレーティングシステム及び言語ランタイムのタイプなど）を指定して、仮想マシンにインストールしなくてはならない。開発者が有する可能性がある他の懸念事項には、過剰利用（たとえば、取得するコンピューティングリソースが少な過ぎること、及びパフォーマンス問題を抱えていること）、利用不足（たとえば、コードを実行するのに必要よりも多いコンピューティングリソースを取得すること、したがって過剰に支払うこと）、トラフィックの変化の予測（たとえば、それにより、開発者は、いつ拡大すべきか、または縮小すべきかを知る）、ならびにユーザが数秒の、または数ミリ秒ものオーダーのコンピューティング能力を望んでいる場合があったとしても、３〜１０分以上かかる可能性があるインスタンス及び言語ランタイムの立上げ遅延が含まれる。したがって、ユーザが、サービスプロバイダによって提供される仮想マシンインスタンスを活用できるようにする改善された方法が望ましい。
【００１１】
本開示の態様によれば、ユーザ要求が受信されるやいなや、使用の準備ができる事前初期化された仮想マシンインスタンスのプールを維持することによって、ユーザコードの実行（たとえば、インスタンス及び言語ランタイムの立上げ時間）に関連付けられる遅延（時として、レイテンシと呼ばれる）は、有意に低減し得る。
【００１２】
概して説明すると、本開示の態様は、仮想マシンインスタンス、及びその中に作成されるコンテナの管理に関する。具体的には、仮想計算システムにおける仮想マシンインスタンスの管理を容易にするシステム及び方法が開示される。仮想計算システムは、１つまたは複数のソフトウェアコンポーネント（たとえば、オペレーティングシステム、言語ランタイム、ライブラリなど）がその上にロードされた仮想マシンインスタンスのプールを維持する。仮想マシンインスタンスのプールを維持することは、新規インスタンスを作成すること、外部インスタンスプロビジョニングサービスから新規インスタンスを取得すること、インスタンスを破壊すること、インスタンスをユーザに割り当てること／再割当てすること、インスタンス（たとえば、その中のコンテナまたはリソース）を修正することなどを含み得る。プールの中の仮想マシンインスタンスは、プログラムコードを実行するためのユーザ要求をサービスするように指定され得る。本開示においては、「プログラムコード（ｐｒｏｇｒａｍ  ｃｏｄｅ）」、「ユーザコード（ｕｓｅｒ  ｃｏｄｅ）」、及び「クラウド関数（ｃｌｏｕｄ  ｆｕｎｃｔｉｏｎ）」という語句は、時として、互換的に用いられ得る。プログラムコードは、仮想マシンインスタンスにおいて作成される孤立コンテナにおいて実行され得る。プールの中の仮想マシンインスタンスは、要求が受信される時点までに、既に、起動されており、特定のオペレーティングシステム及び言語ランタイムがロードされているので、要求を（たとえば、仮想マシンインスタンスにおいて作成される１つまたは複数のコンテナにおいてユーザコードを実行することによって）扱うことができる計算能力を見つけることに関連付けられる遅延は、有意に低減する。
【００１３】
別の態様においては、仮想計算システムは、ユーザコードを実行するために割り当てられるリソースの量に関する情報についてモニタリングし、ログを取ってもよい。そうすることによって、仮想計算システムは、割り当てられたリソースの量を調整することによって、ユーザコード実行についてのパフォーマンスを改善するための機会を識別することができ得る。過剰利用の場合には、割り当てられたリソースの量を増加させることによって、エラー率が低減し得、利用不足の場合には、割り当てられたリソースの量を減少させることによって、ユーザコードの実行に関連付けられる費用が低減し得る。
【００１４】
次に、本開示の具体的な実施形態及び例示的な適用例について、図面を参照して説明する。これらの実施形態及び例示的な適用例は、本開示を例示するように意図するものであり、限定するように意図するものではない。
【００１５】
図１を参照して、仮想環境１００の実施形態を示すブロック略図について説明する。図１に示されている例は、ユーザコンピューティングデバイス１０２のユーザ（たとえば、開発者など）が、仮想計算システム１１０によって提供される仮想コンピューティングリソースを使用して様々なプログラムコードを実行してよい仮想環境１００を含む。
【００１６】
例として、仮想計算システム１１０と通信し、デスクトップコンピュータ、ラップトップ、及びモバイルフォンを含む様々な例示的ユーザコンピューティングデバイス１０２が、示されている。概して、ユーザコンピューティングデバイス１０２は、デスクトップ、ラップトップ、モバイルフォン（またはスマートフォン）、タブレット、キオスク、ワイヤレスデバイス、及び他の電子デバイスなどの任意のコンピューティングデバイスとすることができる。加えて、ユーザコンピューティングデバイス１０２は、同じまたは相異なるデータセンタにおいて動作するウェブサービスを含んでよく、ここで、たとえば、相異なるウェブサービスは、本明細書に説明されている１つまたは複数の技法を行うために互いにプログラムに従って通信してよい。さらには、ユーザコンピューティングデバイス１０２は、インターネット・アプライアンス及び接続されたデバイスなど、モノのインターネット（ＩｏＴ：Ｉｎｔｅｒｎｅｔ  ｏｆ  Ｔｈｉｎｇｓ）デバイスを含んでよい。仮想計算システム１１０は、ユーザコンピューティングデバイス１０２に、１つまたは複数のユーザインターフェース、コマンドラインインターフェース（ＣＬＩ：ｃｏｍｍａｎｄ−ｌｉｎｅ  ｉｎｔｅｒｆａｃｅ）、アプリケーションプログラミングインターフェース（ＡＰＩ：ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）、及び／または他のプログラマチックインターフェースを提供して、ユーザコードを生成しアップロードすること、ユーザコードを呼び出す（たとえば、仮想計算システム１１０においてユーザコードを実行するための要求を提出する）こと、イベントベースのジョブもしくはタイムドジョブをスケジューリングすること、ユーザコードをトラッキングすること、ならびに／またはユーザの要求及び／もしくはユーザコードに関する他のロギングまたはモニタリング情報を視聴してよい。１つまたは複数の実施形態は、ユーザインターフェースを使用するように本明細書には説明され得るが、加えてまたは代替として、そのような実施形態が、任意のＣＬＩ、ＡＰＩ、または他のプログラマチックインターフェースを使用し得ることを認識されたい。
【００１７】
ユーザコンピューティングデバイス１０２は、ネットワーク１０４を介して仮想計算システム１１０にアクセスする。ネットワーク１０４は、任意のワイヤードネットワーク、ワイヤレスネットワーク、またはそれらの組合せであってよい。加えて、ネットワーク１０４は、パーソナルエリアネットワーク、ローカルエリアネットワーク、広域ネットワーク、（たとえば、ラジオもしくはテレビの）無線放送ネットワーク、ケーブルネットワーク、衛星ネットワーク、セルラ電話ネットワーク、またはそれらの組合せであってよい。たとえば、ネットワーク１０４は、可能性としてインターネットなどの様々な別個のパーティによって動作される、リンクされたネットワークの公的にアクセス可能なネットワークであってよい。いくつかの実施形態においては、ネットワーク１０４は、会社または大学のイントラネットなど、プライベートまたはセミプライベートのネットワークであってもよい。ネットワーク１０４は、グローバルシステムフォーモバイルコミュニケーションズ（ＧＳＭ：Ｇｌｏｂａｌ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｍｏｂｉｌｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ）ネットワーク、符号分割多元接続（ＣＤＭＡ：Ｃｏｄｅ  Ｄｉｖｉｓｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ａｃｃｅｓｓ）ネットワーク、ロングタームエボリューション（ＬＴＥ：Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）ネットワーク、もしくは任意の他のタイプのワイヤレスネットワークなど、１つまたは複数のワイヤレスネットワークを含むことができる。ネットワーク１０４は、インターネットまたは他の前述のタイプのネットワークのうちのいずれかを介して通信するのにプロトコル及びコンポーネントを使用することができる。たとえば、ネットワーク１０４によって使用されるプロトコルには、ハイパーテキスト転送プロトコル（ＨＴＴＰ：Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）、ＨＴＴＰセキュア（ＨＴＴＰＳ：ＨＴＴＰ  Ｓｅｃｕｒｅ）、メッセージキューテレメトリトランスポート（ＭＱＴＴ：Ｍｅｓｓａｇｅ  Ｑｕｅｕｅ  Ｔｅｌｅｍｅｔｒｙ  Ｔｒａｎｓｐｏｒｔ）、及び制約付きアプリケーションプロトコル（ＣｏＡＰ：Ｃｏｎｓｔｒａｉｎｅｄ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）などを挙げることができる。インターネットまたは他の前述のタイプの通信ネットワークのうちのいずれかを介して通信するためのプロトコルならびにコンポーネントは、当業者にはよく知られており、したがって、本明細書においてより詳細には説明しない。
【００１８】
仮想計算システム１１０は、１つまたは複数のコンピュータネットワークを使用して相互接続されているいくつかのコンピュータシステムを含む分散型コンピューティング環境において動作しているように図１には示されている。仮想計算システム１１０はまた、図１に例示されているよりも少ない数または多い数のデバイスを有するコンピューティング環境内で動作することも可能であり得る。したがって、図１における仮想計算システム１１０の描写は、例示として解釈すべきであり、本開示に対する限定として解釈すべきではない。たとえば、仮想計算システム１１０またはその様々な構成要素は、本明細書に説明されている方法の少なくとも一部分を実装するために、様々なＷｅｂサービスコンポーネント、ホスト型もしくは「クラウド（ｃｌｏｕｄ）」コンピューティング環境、及び／またはピアツーピアネットワーク構成を実装することが可能であり得る。
【００１９】
さらには、仮想計算システム１１０は、ハードウェア及び／またはソフトウェアにおいて実装され得、例として、本明細書に説明されることになる様々な特徴を行うためのコンピュータ実行可能命令を実行するように構成された物理コンピュータハードウェアにおいて実装される１つまたは複数の物理もしくは仮想サーバを含んでよい。１つまたは複数のサーバは、例として、１つまたは複数のデータセンタにおいて、地理的に分散されても、または地理的に同じ場所に配置されてもよい。
【００２０】
図１に示されている環境においては、仮想環境１００は、フロントエンド１２０と、ウォーミングプールマネージャ１３０と、ワーカマネージャ１４０と、セキュリティマネージャ１５０とを含む仮想計算システム１１０を含む。示されている例においては、仮想マシンインスタンス（「インスタンス」）１５２、１５４は、ウォーミングプールマネージャ１３０によって管理されるウォーミングプール１３０Ａの中に示され、インスタンス１５６、１５７、１５８、１５９は、ワーカマネージャ１４０によって管理されるアクティブプール１４０Ａの中に示されている。仮想計算システム１１０内の様々なコンポーネントの図は、本質的に論理的であり、コンポーネントのうちの１つまたは複数は、単一のコンピューティングデバイスまたは複数のコンピューティングデバイスによって実装され得る。たとえば、インスタンス１５２、１５４、１５６、１５７、１５８、１５９は、相異なる様々な地理的な領域の中の１つまたは複数の物理コンピューティングデバイスにおいて実装され得る。同様に、フロントエンド１２０、ウォーミングプールマネージャ１３０、ワーカマネージャ１４０、及びセキュリティマネージャ１５０はそれぞれ、複数の物理コンピューティングデバイスにわたって実装され得る。代替として、フロントエンド１２０、ウォーミングプールマネージャ１３０、ワーカマネージャ１４０、及びセキュリティマネージャ１５０のうちの１つまたは複数は、単一の物理コンピューティングデバイスにおいて実装され得る。いくつかの実施形態においては、仮想計算システム１１０は、複数のフロントエンド、複数のウォーミングプールマネージャ、複数のワーカマネージャ、及び／または複数の能力マネージャを備えてよい。６つの仮想マシンインスタンスが、図１の例には示されているが、本明細書に説明されている実施形態は、そのように限定されず、当業者は、仮想計算システム１１０が、任意の数の物理コンピューティングデバイスを使用して実装される任意の数の仮想マシンインスタンスを備え得ることを認識するであろう。同様に、単一のウォーミングプール及び単一のアクティブプールが、図１の例には示されているが、本明細書に説明されている実施形態は、そのように限定されず、当業者は、仮想計算システム１１０が、任意の数のウォーミングプール及びアクティブプールを備え得ることを認識するであろう。
【００２１】
図１の例においては、仮想計算システム１１０は、ネットワーク１０４に接続されているように示されている。いくつかの実施形態においては、仮想計算システム１１０内のコンポーネントのうちのいずれも、ネットワーク１０４を介して仮想環境１００の他のコンポーネント（たとえば、ユーザコンピューティングデバイス１０２、ならびにモニタリング／ロギング／課金サービス１０７、ストレージサービス１０８、インスタンスプロビジョニングサービス１０９、及び／または仮想計算システム１１０と通信することができる他のサービスを含むことができる補助サービス１０６）と通信することができる。他の実施形態においては、仮想計算システム１１０のコンポーネントがすべて、仮想環境１００の他のコンポーネントと通信できるとは限らない。１つの例においては、フロントエンド１２０のみが、ネットワーク１０４に接続され得、仮想計算システム１１０の他のコンポーネントは、フロントエンド１２０を介して仮想環境１００の他のコンポーネントと通信し得る。
【００２２】
ユーザは、仮想計算システム１１０を使用して、その上のユーザコードを実行してよい。たとえば、ユーザは、自分が開発したウェブまたはモバイルアプリケーションに関係してコード片を実行したいと望む場合がある。コードを実行する１つのやり方は、サービスとしてインフラストラクチャを提供するサービスプロバイダから仮想マシンインスタンスを取得すること、ユーザのニーズに合うように仮想マシンインスタンスを構成すること、及び構成された仮想マシンインスタンスを使用してコードを実行することになる。代替として、ユーザは、コード実行要求を仮想計算システム１１０に送信してよい。仮想計算システム１１０は、コード実行要求に基づいて、計算能力（たとえば、より詳細に後述されるコンテナ、インスタンスなど）の取得及び構成設定を扱い、その計算能力を使用してコードを実行することができる。仮想計算システム１１０は、ボリュームに基づいて、自動的に拡大及び縮小することができ、それによって、ユーザは、過剰利用（たとえば、取得するコンピューティングリソースが少な過ぎること、及びパフォーマンス問題を抱えていること）、または利用不足（たとえば、コードを実行するのに必要よりも多いコンピューティングリソースを取得すること、したがって過剰に支払うこと）について気にかけなくてはならない負担から開放され得る。
【００２３】
フロントエンド１２０は、仮想計算システム１１０においてユーザコードを実行するための要求をすべて処理する。１つの実施形態においては、フロントエンド１２０は、仮想計算システム１１０によって提供される他のサービスすべてに対して、フロントドアとして機能する。フロントエンド１２０は、要求を処理し、確実に要求が適正に承認されるようにする。たとえば、フロントエンド１２０は、要求に関連付けられるユーザが、要求において指定されるユーザコードにアクセスすることを承認されるかどうかを判定してよい。
【００２４】
本明細書に用いられているユーザコードは、特有のプログラム言語で記述された任意のプログラムコード（たとえば、プログラム、ルーチン、サブルーチン、スレッドなど）を示し得る。本開示においては、「コード（ｃｏｄｅ）」、「ユーザコード（ｕｓｅｒ  ｃｏｄｅ）」、及び「プログラムコード（ｐｒｏｇｒａｍ  ｃｏｄｅ）」という用語は、互換的に用いられ得る。そのようなユーザコードは、たとえば、ユーザによって開発される特定のウェブアプリケーションまたはモバイルアプリケーションに関係して、特有のタスクを達成するために実行され得る。たとえば、ユーザコードは、ＪａｖａＳｃｒｉｐｔ（ｎｏｄｅ．ｊｓ）、Ｊａｖａ、Ｐｙｔｈｏｎ、及び／またはＲｕｂｙで記述され得る。要求は、ユーザコード（またはその場所）と、ユーザコードを実行するのに使用されることになる１つまたは複数の引数とを含み得る。たとえば、ユーザは、ユーザコードを実行するための要求と一緒にユーザコードを提供してよい。別の例においては、要求は、先にアップロードされたプログラムコードを（たとえば、コードをアップロードするためのＡＰＩを使用して）、その名称またはその固有ＩＤによって識別し得る。さらなる別の例においては、コードは、要求が仮想計算システム１１０によって受信されるよりも前に、要求に含められるだけでなく、別個の場所（たとえば、ストレージサービス１０８、または仮想計算システム１１０の内部のストレージサービス）にアップロードされ得る。仮想計算システム１１０は、要求が処理される時点においてコードが利用可能であるところに基づいて、そのコード実行戦略を変更してよい。
【００２５】
フロントエンド１２０は、ユーザからのハイパーテキスト転送プロトコルセキュア（ＨＴＴＰＳ）要求に応答して、そのようなユーザコードを実行するための要求を受信してもよい。また、ＨＴＴＰＳ要求に含まれている任意の情報（たとえば、ヘッダ及びパラメータ）も、ユーザコードを実行するときに処理され、利用され得る。上に論じたように、たとえば、ＨＴＴＰ、ＭＱＴＴ、及びＣｏＡＰを含む任意の他のプロトコルを使用して、コード実行要求を含んでいるメッセージをフロントエンド１２０に転送してよい。フロントエンド１２０はまた、ユーザが自動要求生成をトリガするために登録したイベントなどのイベントが検出されるとき、そのようなユーザコードを実行するための要求を受信し得る。たとえば、ユーザは、補助サービス１０６にユーザコードを登録し、特定のイベントが行われた（たとえば、新規ファイルがアップロードされた）ときはいつでも、ユーザコードを実行するための要求がフロントエンド１２０に送信されることを指定していてもよい。代替として、ユーザは、タイムドジョブ（ｔｉｍｅｄ  ｊｏｂ）を登録していても（たとえば、ユーザコードを２４時間ごとに実行しても）よい。そのような例においては、スケジューリングされた時間がタイムドジョブに達すると、ユーザコードを実行するための要求は、フロントエンド１２０に送信され得る。さらなる別の例においては、フロントエンド１２０は、着信コード実行要求のキューを有してよく、ユーザのバッチジョブが仮想計算システムの作業キューから除去されたとき、フロントエンド１２０は、ユーザ要求を処理してよい。さらなる別の例においては、要求は、仮想計算システム１１０内の別のコンポーネント、または図１には示されていない他のサーバもしくはサービスを起源としてよい。
【００２６】
ユーザ要求は、ユーザコード一緒に使用されることになる１つまたは複数のサードバーティライブラリ（ネイティブライブラリを含む）を指定してよい。１つの実施形態においては、ユーザ要求は、ユーザコードならびに任意のライブラリ（及び／またはそのストレージ場所の識別情報）を含んでいるＺＩＰファイルである。いくつかの実施形態においては、ユーザ要求は、実行されることになるプログラムコード、プログラムコードが記述される言語、要求に関連付けられるユーザ、及び／またはプログラムコードを実行するために確保されることになるコンピューティングリソース（たとえば、メモリ、ＣＰＵ、ストレージ、ネットワークパケットなど）を示すメタデータ含む。たとえば、プログラムコードには、ユーザによって先にアップロードされ、仮想計算システム１１０（たとえば、標準ルーチン）によって提供され、及び／またはサードパーティによって提供される要求が与えられ得る。いくつかの実施形態においては、リソースレベルの制約（たとえば、どれくらいのメモリが特定のユーザコードを実行するために割り当てられることになるか）は、特定のユーザコードについて指定され、ユーザコードの各実行にわたって変化しなくてよい。そのような場合においては、仮想計算システム１１０は、各個々の要求が受信される前に、そのようなリソースレベルの制約にアクセスしてよく、個々の要求は、そのようなリソースレベルの制約を指定しなくてよい。いくつかの実施形態においては、リソースレベルの制約は、時間とともに調整され、単一のプログラムコードの相異なる実行にわたって変化し得る。たとえば、同じプログラムコードを使用して、２つの相異なるデータセットを処理してよく、ここで、一方のデータセットには、他方よりも多くのリソースが必要である。そのような場合においては、ユーザは、２つの相異なる実行について相異なるリソース制約を指定してよく、または仮想計算システム１１０は、ユーザ及び／もしくはプログラムコードの空間的な（たとえば、仮想計算システム１１０の他の部分における）、または履歴上の（たとえば、経時的）傾向に基づいて、プログラムコードの各実行に対して割り当てられるリソースの量を自動的に調整し得る。いくつかの実施形態においては、ユーザ要求は、要求がユーザコードを実行しなくてはならない許可の種類を示す許可データなどの他の制約を指定してよい。そのような許可データは、（たとえば、プライベートネットワーク上の）プライベートリソースにアクセスするために仮想計算システム１１０によって使用され得る。
【００２７】
いくつかの実施形態においては、ユーザ要求は、ユーザ要求を扱うために採用すべき挙動を指定してよい。そのような実施形態においては、ユーザ要求は、ユーザ要求に関連付けられるユーザコードが実行すべきである１つまたは複数の実行モードを可能にするためのインジケータを含み得る。たとえば、要求は、ユーザコードの実行に関係して生成され得るデバッギング及び／またはロギング出力が、ユーザに（たとえば、コンソールユーザインターフェースを介して）戻すように供給されるデバッグモードで、ユーザコードが実行すべきであるかどうかを示すためのフラグまたはヘッダを含んでよい。そのような例においては、仮想計算システム１１０は、要求を調べ、フラグまたはヘッダを探してよく、それが存在する場合、仮想計算システム１１０は、ユーザコードが実行されるコンテナの挙動（たとえば、ロギング機能）を修正して、出力データをユーザに戻すように供給させてよい。いくつかの実施形態においては、挙動／モードインジケータは、仮想計算システム１１０によってユーザに提供されるユーザインターフェースによって、要求に加えられる。ソースコードプロファイリング、リモートデバッギングなどの他の特徴もまた、要求において提供される指示に基づいてイネーブル、またはディスエーブルされ得る。
【００２８】
いくつかの実施形態においては、仮想計算システム１１０は、複数のフロントエンド１２０を含み得る。そのような実施形態においては、ロードバランサが、たとえば、ラウンドロビン方式で、着信要求を複数のフロントエンド１２０に配信するために設けられ得る。いくつかの実施形態においては、ロードバランサが、着信要求を複数のフロントエンド１２０に配信する方式は、ウォーミングプール１３０Ａ及び／またはアクティブプール１４０Ａの状態に基づいてよい。たとえば、ウォーミングプール１３０Ａにおける能力が十分であると考えられる場合、要求は、フロントエンド１２０の個々の能力に基づいて（たとえば、１つまたは複数のロードバランシング制限に基づいて）、複数のフロントエンド１２０に配信され得る。一方、ウォーミングプール１３０Ａにおける能力が閾値量未満である場合、そのようなロードバランシング制限のうちの１つまたは複数は、除去され得、それにより、要求は、ウォーミングプール１３０Ａから取られる仮想マシンインスタンスの数を低減させる、または最小限に抑える形で、複数のフロントエンド１２０に配信され得る。たとえば、ロードバランシング制限に従って、要求がフロントエンドＡにルート設定すべき場合であっても、フロントエンドＡは、要求をサービスするためにウォーミングプール１３０Ａからインスタンスを取り出す必要があるが、フロントエンドＢが、同じ要求をサービスするためにそのアクティブプールの中のインスタンスのうちの１つを使用することができる場合、要求は、フロントエンドＢにルート設定され得る。
【００２９】
ウォーミングプールマネージャ１３０は、仮想計算システム１１０が仮想計算システム１１０においてユーザコードを実行するための要求を受信したとき、仮想マシンインスタンスが確実にワーカマネージャ１４０によって使用されるように準備できているようにする。図１に示されている例においては、ウォーミングプールマネージャ１３０は、ウォーミングプール１３０Ａを管理し、このウォーミングプール１３０Ａは、着信ユーザコード実行要求をサービスするのに使用され得る事前初期化され、事前構成された仮想マシンインスタンスの（時として、プールと呼ばれる）グループである。いくつかの実施形態においては、ウォーミングプールマネージャ１３０は、仮想マシンインスタンスを、仮想計算システム１１０内の１つまたは複数の物理コンピューティングマシンにおいて起動させ、ウォーミングプール１３０Ａに追加させる。他の実施形態においては、ウォーミングプールマネージャ１３０は、補助仮想マシンインスタンスサービス（たとえば、図１のインスタンスプロビジョニングサービス１０９）と通信して、新規インスタンスを作成し、ウォーミングプール１３０Ａに追加する。いくつかの実施形態においては、ウォーミングプールマネージャ１３０は、仮想計算システム１１０内の物理コンピューティングデバイスと１つまたは複数の仮想マシンインスタンスサービスの両方を利用して、フロントエンド１２０によって受信されるコード実行要求をサービスするのに使用され得る計算能力を取得し、維持してよい。いくつかの実施形態においては、仮想計算システム１１０は、ウォーミングプール１３０Ａにおける利用可能な能力を制御する（たとえば、増加させる、もしくは減少させる）ための１つまたは複数の論理ノブもしくはスイッチを含んでよい。たとえば、システム管理者は、そのようなノブまたはスイッチを使用して、ピーク時間中にウォーミングプール１３０Ａにおいて利用可能な能力（たとえば、事前起動されたインスタンスの数）を増加させてよい。いくつかの実施形態においては、ウォーミングプール１３０Ａの中の仮想マシンインスタンスは、ユーザのコードを実行するための特有のユーザ要求とは無関係に、所定の構成セットに基づいて構成され得る。所定の構成セットは、ユーザコードを実行するための様々なタイプの仮想マシンインスタンスに対応することができる。ウォーミングプールマネージャ１３０は、現在または以前のユーザコード実行に関する１つまたは複数のメトリックに基づいて、ウォーミングプール１３０Ａの中の仮想マシンインスタンスのタイプ及び数を最適化することができる。
【００３０】
図１に示されているように、インスタンスは、オペレーティングシステム（ＯＳ）及び／または言語ランタイムがその上にロードされていてよい。たとえば、ウォーミングプールマネージャ１３０によって管理されるウォーミングプール１３０Ａは、インスタンス１５２、１５４を含む。インスタンス１５２は、ＯＳ１５２Ａ、及びランタイム１５２Ｂを含む。インスタンス１５４は、ＯＳ１５４Ａを含む。いくつかの実施形態においては、ウォーミングプール１３０Ａの中のインスタンスはまた、コンテナを含むことができ（さらには、オペレーティングシステム、ランタイム、ユーザコードなどのコピーも含み得る）、それについては、より詳細に後述する。インスタンス１５２は、単一のランタイムを含んでいるように図１には示されているが、他の実施形態においては、図１に示されているインスタンスは、２つ以上のランタイムを含むことができ、それらはそれぞれ、異なるユーザコードを実行するのに使用され得る。いくつかの実施形態においては、ウォーミングプールマネージャ１３０は、ウォーミングプール１３０Ａの中のインスタンスのリストを維持することができる。インスタンスのリストは、さらには、インスタンスの構成（たとえば、ＯＳ、ランタイム、コンテナなど）を指定することができる。
【００３１】
いくつかの実施形態においては、ウォーミングプール１３０Ａの中の仮想マシンインスタンスは、任意のユーザの要求を出すのに使用され得る。１つの実施形態においては、ウォーミングプール１３０Ａの中の仮想マシンインスタンスはすべて、同じまたは実質的に同様の形で構成されている。別の実施形態においては、ウォーミングプール１３０Ａの中の仮想マシンインスタンスは、異なるユーザのニーズに合うように別様に構成され得る。たとえば、仮想マシンインスタンスは、相異なるオペレーティングシステム、相異なる言語ランタイム、及び／または相異なるライブラリがその上にロードされていてよい。さらなる別の実施形態においては、ウォーミングプール１３０Ａの中の仮想マシンインスタンスは、同じまたは実質的に同様の形で（たとえば、同じＯＳ、言語ランタイム、及び／またはライブラリにより）構成され得るが、それらのインスタンスのうちの一部は、相異なるコンテナ構成を有してもよい。たとえば、２つのインスタンスは、ＰｙｔｈｏｎとＲｕｂｙの両方についてのランタイムを有することができるが、一方のインスタンスは、コンテナがＰｙｔｈｏｎコードを実行するように構成されていてよく、他方のインスタンスは、コンテナがＲｕｂｙコードを実行するように構成されていてよい。いくつかの実施形態においては、同一に構成された仮想マシンインスタンスをそれぞれが有する、複数のウォーミングプール１３０Ａが提供される。
【００３２】
ウォーミングプールマネージャ１３０は、ウォーミングプール１３０Ａの中の仮想マシンインスタンスを事前構成してよく、それにより、各仮想マシンインスタンスが、仮想計算システム１１０においてプログラムコードを実行するためのユーザ要求によって要求され、または指定され得る動作条件のうちの少なくとも１つを満たすように構成されている。１つの実施形態においては、動作条件は、潜在的なユーザコードが記述され得るプログラム言語を含んでよい。たとえば、そのような言語には、Ｊａｖａ、ＪａｖａＳｃｒｉｐｔ、Ｐｙｔｈｏｎ、及びＲｕｂｙなどを挙げることができる。いくつかの実施形態においては、ユーザコートが記述され得る言語セットは、ユーザコードを実行するための要求を満たすことができる仮想マシンインスタンスの事前初期化を容易にするために、所定のセット（たとえば、４つの言語のセット、ただし、いくつかの実施形態においては、４つよりも多いまたは少ない言語のセットが提供される）に限定され得る。たとえば、ユーザが、仮想計算システム１１０によって提供されるユーザインターフェースを介して要求を構成しているとき、ユーザインターフェースは、ユーザコードを実行するための所定の動作条件のうちの１つを指定するように、ユーザにプロンプト指示してよい。別の例においては、仮想計算システム１１０によって提供されるサービスを利用するためのサービスレベル合意（ＳＬＡ：ｓｅｒｖｉｃｅ−ｌｅｖｅｌ  ａｇｒｅｅｍｅｎｔ）は、ユーザ要求が満たすべき条件のセット（たとえば、プログラミング言語、コンピューティングリソースなど）を指定してよく、仮想計算システム１１０は、要求が、要求を扱う際の条件セットを満たすと仮定してよい。別の例においては、要求において指定される動作条件は、要求を処理するのに使用されることになる計算パワーの量、要求のタイプ（たとえば、ＨＴＴＰ対トリガされたイベント）、要求のタイムアウト（たとえば、要求が終了し得た後の閾値時間）、及びセキュリティポリシ（たとえば、ウォーミングプール１３０Ａの中のどのインスタンスが、どのユーザによって使用可能であるかを制御し得る）などを含み得る。
【００３３】
ワーカマネージャ１４０は、着信コード実行要求をサービスするのに使用されるインスタンスを管理する。図１に示されている例においては、ワーカマネージャ１４０は、現在、１人または複数人のユーザに割り当てられている仮想マシンインスタンスの（時として、プールと呼ばれる）グループであるアクティブプール１４０Ａを管理する。仮想マシンインスタンスは、ここでは、特定のユーザに割り当てられていると説明されているが、いくつかの実施形態においては、インスタンスは、ユーザのグループに割り当てられ得、それにより、インスタンスは、ユーザのグループに結び付けられ、グループのいずれのメンバも、インスタンス上のリソースを利用することができる。たとえば、同じグループの中のユーザは、（たとえば、彼らのセキュリティ認証情報に基づいて）同じセキュリティグループに属してよく、それにより、別のメンバのコードが同じインスタンス上の別のコンテナにおいて実行された後に特定のインスタンス上のコンテナにおける１人のメンバのコードを実行すると、セキュリティリスクを引き起こすことがない。同様に、ワーカマネージャ１４０は、どの要求がどのコンテナにおいて実行され得るか、及びどのインスタンスがどのユーザに割り当てられ得るかを示す１つまたは複数のポリシに従って、インスタンス及びコンテナを割り当てることができる。例示的なポリシは、インスタンスが、同じアカウント（たとえば、仮想計算システム１１０によって提供されるサービスにアクセスするためのアカウント）を共有するユーザの集合に割り当てられることを指定してよい。いくつかの実施形態においては、同じユーザグループに関連付けられる要求は（たとえば、それに関連付けられるユーザコードが同一である場合）、同じコンテナを共有してよい。いくつかの実施形態においては、要求は、グループの相異なるユーザを区別することはなく、単に要求に関連付けられるユーザが属しているグループを示すにすぎない。
【００３４】
図１に示されている例においては、ユーザコードは、コンテナと呼ばれる分離された計算システムにおいて実行される。コンテナは、仮想マシンインスタンス内で、そのインスタンスにおいて利用可能なリソースを使用して作成される論理装置である。たとえば、ワーカマネージャ１４０は、ユーザコードを実行するための要求において指定される情報に基づいて、新規コンテナを作成する、またはアクティブプール１４０Ａの中のインスタンスのうちの１つに既存のコンテナを配置し、コンテナを要求に関連付けられるユーザコードの実行を扱うための要求に割り当ててよい。１つの実施形態においては、そのようなコンテナは、Ｌｉｎｕｘコンテナとして実装される。アクティブプール１４０Ａの中の仮想マシンインスタンスは、１つまたは複数のコンテナがその上に作成されていてよく、ユーザに関連付けられる１つまたは複数のプログラムコードがその上に（たとえば、コンテナのうちの１つか、またはインスタンスのローカルキャッシュかのいずれかに）ロードされていてよい
【００３５】
図１に示されているように、インスタンスは、オペレーティングシステム（ＯＳ）、言語ランタイム、及びコンテナを有し得る。コンテナは、ＯＳ及び言語ランタイム、ならびにユーザコードの個々のコピーがその上にロードされていてよい。図１の例においては、ワーカマネージャ１４０によって管理されるアクティブプール１４０Ａは、インスタンス１５６、１５７、１５８、１５９を含む。インスタンス１５６は、コンテナ１５６Ａ、１５６Ｂを有する。コンテナ１５６Ａは、ＯＳ１５６Ａ−１、ランタイム１５６Ａ−２、及びコード１５６Ａ−３がその上にロードされている。示されている例においては、コンテナ１５６Ａは、それ自体のＯＳ、ランタイム、及びコードがその上にロードされている。１つの実施形態においては、ＯＳ１５６Ａ−１（たとえば、そのカーネル）、ランタイム１５６Ａ−２、及び／またはコード１５６Ａ−３は、コンテナ１５６Ａ、１５６Ｂ（及び図１に示されていない任意の他のコンテナ）間で共有される。別の例においては、ＯＳ１５６Ａ−１（たとえば、カーネルの外で動作する任意のコード）、ランタイム１５６Ａ−２、及び／またはコード１５６Ａ−３は、コンテナ１５６Ａについて作成され、インスタンス１５６上の他のコンテナと共有されない独立したコピーである。さらなる別の実施形態においては、ＯＳ１５６Ａ―１、ランタイム１５６Ａ−２、及び／またはコード１５６Ａ−３のうちのいくつかの部分は、インスタンス１５６上のコンテナ間で共有され、そのうちの他の部分は、コンテナ１５６Ａに特有の独立したコピーである。インスタンス１５７は、コンテナ１５７Ａ、１５７Ｂ、１５７Ｃを含み、インスタンス１５８は、コンテナ１５８Ａを含み、インスタンス１５９は、コンテナ１５９Ａを含む。
【００３６】
図１の例においては、図１に描かれているコンテナのサイズは、コンテナの実際のサイズに比例し得る。たとえば、インスタンス１５６上において、コンテナ１５６Ａは、コンテナ１５６Ｂよりも多くの空間を占める。同様にコンテナ１５７Ａ、１５７Ｂ、１５７Ｃ、１５９Ａは、等しくサイズ決めされてよく、コンテナ１５８Ａは、コンテナ１５７Ａ、１５７Ｂ、１５７Ｃ、１５９Ａよりも大きくて（たとえば、より多くのコンピューティングリソースがそれらに割り当てられていて）よい。インスタンス１５９の中に示されている「Ｃ」とラベル付けられたドット付きのボックスは、新規インスタンスを作成するのに使用され得る、インスタンス上の残りの空間を示している。いくつかの実施形態においては、コンテナのサイズは、６４ＭＢ、またはその任意の倍数とし得る。他の実施形態においては、コンテナのサイズは、コンテナが作成されるインスタンスのサイズ以下のいずれか任意のサイズとしてよい。いくつかの実施形態においては、コンテナのサイズは、コンテナが作成されるインスタンスのサイズ以下、またはそれよりも大きいいずれか任意のサイズとし得る。コンテナのサイズが、インスタンスのサイズをどのくらい超え得るかについては、インスタンスによって提供される能力を超えて、それらのコンテナが利用され得る可能性がどのくらいあるかということに基づいて決定され得る。たとえば、１ＧＢのメモリサイズ（合計で５ＧＢ）を有する５つのコンテナは、４ＧＢのメモリサイズを有するインスタンスにおいて作成され得る。コンテナがそれぞれ、１ＧＢの全能力に達しない場合、コンテナは、申込み超過であるにもかかわらず適切に機能し得る。
【００３７】
コンテナ１５６Ｂ、１５７Ａ、１５７Ｂ、１５７Ｃ、１５８Ａ、１５９Ａの内部のコンポーネントは、図１の例においては示されていないが、それらのコンテナはそれぞれ、様々なオペレーティングシステム、言語ランタイム、ライブラリ、及び／またはユーザコードを有し得る。いくつかの実施形態においては、インスタンスは、ユーザコードがその上に（たとえば、インスタンスレベルキャッシュに）ロードされていてよく、それらのインスタンス内のコンテナはまた、ユーザコードがその上にロードされていてもよい。いくつかの実施形態においては、ワーカマネージャ１４０は、アクティブプール１４０Ａにおいてインスタンスのリストを維持してよい。インスタンスのリストは、インスタンスの構成（たとえば、ＯＳ、ランタイム、コンテナなど）をさらに指定してよい。いくつかの実施形態においては、ワーカマネージャ１４０は、ウォーミングプール１３０Ａの中のインスタンスのリスト（たとえば、インスタンスの数及びタイプを含む）にアクセスし得る。他の実施形態においては、ワーカマネージャ１４０は、ウォーミングプール１３０Ａの中の仮想マシンインスタンスの知識を有することなく、ウォーミングプールマネージャ１３０に計算能力を要求する。
【００３８】
要求がフロントエンド１２０によって正常に処理された後、ワーカマネージャ１４０は、仮想計算システム１１０においてユーザコードを実行するための要求をサービスする能力を見つける。たとえば、同じユーザコードをその中にロードしたコンテナ（たとえば、コンテナ１５６Ａの中に示されているコード１５６Ａ−３）を有する特定の仮想マシンインスタンスがアクティブプール１４０Ａに存在する場合、ワーカマネージャ１４０は、コンテナを要求に割り当て、コンテナにおいてユーザコードを実行させ得る。代替としては、ユーザコードが仮想マシンインスタンスのうちの１つのローカルキャッシュにおいて利用可能である（たとえば、インスタンス１５８において記憶されているが、いずれの個々のコンテナにも属していない）場合、ワーカマネージャ１４０は、そのようなインスタンスにおいて新規コンテナを作成し、コンテナを要求に割り当て、コンテナにおいてユーザコードをロードさせ、実行させ得る。
【００３９】
ワーカマネージャ１４０が、要求に関連付けられるユーザコードがアクティブプール１４０Ａの中の（たとえば、コンテナの中か、またはインスタンスのローカルキャッシュの中のいずれかの）インスタンスのいずれにおいても見つからないと決定する場合、ワーカマネージャ１４０は、アクティブプール１４０Ａの中のインスタンスのいずれかが、現在、要求に関連付けられるユーザに割り当てられ、現在の要求を扱う計算能力を有しているかどうかを決定してよい。そのようなインスタンスが存在する場合、ワーカマネージャ１４０は、インスタンスにおいて新規コンテナを作成し、コンテナを要求に割り当ててよい。代替としては、ワーカマネージャ１４０は、ユーザに割り当てられるインスタンスにおいて既存のコンテナをさらに構成し、コンテナを要求に割り当ててよい。たとえば、ワーカマネージャ１４０は、現在のユーザ要求によって求められる特定のライブラリがその上にロードされている場合、既存のコンテナがユーザコードを実行するのに使用され得ることを決定してよい。そのような場合においては、ワーカマネージャ１４０は、コンテナ上に特定のライブラリ及びユーザコードをロードし、そのコンテナを使用してユーザコードを実行することができる。
【００４０】
アクティブプール１４０Ａが、ユーザに現在、割り当てられているいずれのインスタンスも含んでいない場合、ワーカマネージャ１４０は、ウォーミングプール１３０Ａから新規仮想マシンインスタンスをプルし、インスタンスを要求に関連付けられるユーザに割り当て、インスタンスにおいて新規コンテナを作成し、コンテナを要求に割り当て、コンテナにユーザコードをダウンロードさせ実行させる。
【００４１】
いくつかの実施形態においては、仮想計算システム１１０は、ユーザコードの実行を、（たとえば、フロントエンド１２０によって）それが受信されてから間もなく始めるようになされている。時間期間は、（たとえば、ユーザに関連付けられる仮想マシンインスタンス上のコンテナにおける）ユーザコードの実行の開始と、（たとえば、フロントエンドによって受信される）ユーザコードを実行するための要求の受信との間の時間差として決定され得る。仮想計算システム１１０は、所定の持続時間未満である時間期間内で、ユーザコードの実行を始めるようになされている。１つの実施形態においては、所定の持続時間は、５００ｍｓである。別の実施形態においては、所定の持続時間は、３００ｍｓである。別の実施形態においては、所定の持続時間は、１００ｍｓである。別の実施形態においては、所定の持続時間は、５０ｍｓである。別の実施形態においては、所定の持続時間は、１０ｍｓである。別の実施形態においては、所定の持続時間は、１０ｍｓから５００ｍｓまでの範囲から選択される任意の値としてよい。いくつかの実施形態においては、仮想計算システム１１０は、１つまたは複数の条件が満たされる場合、所定の持続時間未満である時間期間内で、ユーザコードの実行を始めるようになされている。たとえば、１つまたは複数の条件は、（１）要求が受信された時点に、ユーザコードがアクティブプール１４０Ａの中のコンテナにおいてロードされること、（２）要求が受信された時点に、ユーザコードがアクティブプール１４０Ａの中のインスタンスのコードキャッシュに記憶されること、（３）要求が受信された時点に、アクティブプール１４０Ａが、要求に関連付けられるユーザに割り当てられるインスタンスを含むこと、または（４）要求が受信された時点に、ウォーミングプール１３０Ａが、要求を扱う能力を有することのうちのいずれか１つを含み得る。
【００４２】
ユーザコードは、図１のストレージサービス１０８などの補助サービス１０６からダウンロードされ得る。図１に示されているデータ１０８Ａは、１人または複数人のユーザによってアップロードされるユーザコード、そのようなユーザコードに関連付けられるメタデータ、あるいは本明細書に説明されている１つまたは複数の技法を行うために仮想計算システム１１０によって利用される任意の他のデータを含み得る。ストレージサービス１０８のみが図１の例には示されているが、仮想環境１００は、ユーザコードがダウンロードされ得る他のレベルのストレージシステムを含み得る。たとえば、各インスタンスは、コンテナが作成されるインスタンスに物理的に（たとえば、インスタンスが動作中の物理コンピューティングシステムに常駐するローカルストレージ）か、または論理的に（たとえば、インスタンスと通信し、仮想計算システム１１０内または外で提供されるネットワークの中のネットワーク接続型ストレージシステム）かのいずれかで関連付けられる１つまたは複数のストレージシステムを有し得る。代替としては、コードは、ストレージサービス１０８によって提供されるウェブベースのデータストアからダウンロードされ得る。
【００４３】
一旦、ワーカマネージャ１４０が、ユーザコード実行要求を出すのに使用され得る仮想マシンインスタンスのうちの１つをウォーミングプール１３０Ａに配置すると、ウォーミングプールマネージャ１３０またはワーカマネージャ１４０は、ウォーミングプール１３０Ａからインスタンスを取り出し、それを要求に関連付けられるユーザに割り当てる。割り当てられた仮想マシンインスタンスは、ウォーミングプール１３０Ａから取り出され、アクティブプール１４０Ａに置かれる。いくつかの実施形態においては、一旦、仮想マシンインスタンスが特定のユーザに割り当てられると、同じ仮想マシンインスタンスは、いずれの他のユーザの要求をサービスするのに使用することができない。これは、ユーザリソースが相互に混ざり合う可能性を防止することによって、ユーザにセキュリティ上の利点を提供する。代替としては、いくつかの実施形態においては、相異なるユーザに属する（または相異なるユーザに関連付けられる要求に割り当てられる）複数のコンテナは、単一の仮想マシンインスタンスにおいて共存し得る。そのような手法は、利用可能な計算能力の利用を改善し得る。いくつかの実施形態においては、仮想計算システム１１０は、仮想マシンインスタンスのローカルキャッシュと、（たとえば、ネットワーク１０４を介してアクセスできる）ウェブベースのネットワークストレージとの間の中間レベルのキャッシングシステムとして機能するために、ユーザコードが記憶されている個別のキャッシュを維持し得る。
【００４４】
ユーザコードが実行された後、ワーカマネージャ１４０は、ユーザコードを実行するのに使用されるコンテナを解体し、それが占有していたリソースを確保してインスタンスの中の他のコンテナに使用されるようにし得る。代替としては、ワーカマネージャ１４０は、コンテナが動作している状態のまま、それを使用して、同じユーザからの追加の要求をサービスしてよい。たとえば、同じユーザコードに関連付けられる別の要求が、既に、コンテナにロードされている場合、要求は、同じコンテナに割り当てられ得、それによって、新規コンテナの作成及びユーザコードのコンテナへのロードに関連付けられる遅延をなくすことができる。いくつかの実施形態においては、ワーカマネージャ１４０は、ユーザコードを実行するのに使用されるコンテナが作成されたインスタンスを解体し得る。代替としては、ワーカマネージャ１４０は、インスタンスが動作している状態のまま、それを使用して、同じユーザからの追加の要求をサービスすることができる。ユーザコードの実行が行われた後、コンテナ及び／またはインスタンスを動作している状態のままにすべきであるかどうかについての決定は、閾値時間、ユーザのタイプ、ユーザの平均要求量、及び／または他の動作条件に基づいてよい。たとえば、閾値時間が、いずれの活動（たとえば、コードの実行）なしに経過した後（たとえば、５分、３０分、１時間、２４時間、３０日など）、コンテナ及び／または仮想マシンインスタンスは、シャットダウン（たとえば、削除、終了など）され、それに割り当てられるリソースは、解放される。いくつかの実施形態においては、コンテナが解体される前に経過した閾値時間は、インスタンスが解体される前に経過した閾値時間よりも短い。
【００４５】
いくつかの実施形態においては、仮想計算システム１１０は、それが着信コード実行要求をサービスするとき、補助サービス１０６のうちの１つまたは複数にデータを提供し得る。たとえば、仮想計算システム１１０は、モニタリング／ロギング／課金サービス１０７と通信し得る。モニタリング／ロギング／課金サービス１０７は、仮想計算システム１１０上のコンテナ及びインスタンスのステータスなど、仮想計算システム１１０から受信されるモニタリング情報を管理するためのモニタリングサービスと、仮想計算システム１１０上のコンテナ及びインスタンスによって行われる活動など、仮想計算システム１１０から受信されるロギング情報を管理するためのロギングサービスと、（たとえば、モニタリングサービス及びロギングサービスによって管理されるモニタリング情報ならびに／またはロギング情報に基づいて）仮想計算システム１１０上のユーザコードの実行に関連付けられる課金情報を生成するための課金サービスと、を含み得る。上に説明した（たとえば、仮想計算システム１１０の代わりに）モニタリング／ロギング／課金サービス１０７によって行われ得るシステムレベル活動に加えて、モニタリング／ロギング／課金サービス１０７は、仮想計算システム１１０において実行されるユーザコードの代わりに、アプリケーションレベルサービスを提供し得る。たとえば、モニタリング／ロギング／課金サービス１０７は、仮想計算システム１１０において実行されるユーザコードの代わりに、様々な入力、出力、または他のデータ及びパラメータをモニタリングし、かつ／またはロギングすることができる。モニタリング、ロギング、及び課金サービス１０７は、単一のブロックとして示されているが、個別のサービスとして提供され得る。モニタリング／ロギング／課金サービス１０７は、セキュリティマネージャ１５０と通信して、セキュリティマネージャ１５０が、仮想計算システム１１０において様々なプログラムコードを実行するのに使用されることになる適切なセキュリティ機構及びポリシを決定することを可能にし得る。
【００４６】
いくつかの実施形態においては、ワーカマネージャ１４０は、ワーカマネージャ１４０によって管理されるインスタンス及びコンテナ（たとえば、アクティブプール１４０Ａの中のもの）におけるヘルスチェックを行い得る。たとえば、ワーカマネージャ１４０によって行われるヘルスチェックは、ワーカマネージャ１４０によって管理されるインスタンス及びコンテナが、（１）不適切に構成されたネットワーキング及び／もしくは立上げ構成、（２）消耗したメモリ、（３）破損したファイルシステム、（４）互換性のないカーネル、のいずれかの問題、ならびに／またはインスタンス及びコンテナのパフォーマンスを損なう可能性があるいずれかの他の課題を有するかどうかの決定を含み得る。１つの実施形態においては、ワーカマネージャ１４０は、ヘルスチェックを定期的に（たとえば、５分ごと、３０分ごと、１時間ごと、２４時間ごとなど）行う。いくつかの実施形態においては、ヘルスチェックの頻度は、ヘルスチェックの結果に基づいて、自動的に調整され得る。他の実施形態においては、ヘルスチェックの頻度は、ユーザ要求に基づいて、調整され得る。いくつかの実施形態においては、ワーカマネージャ１４０は、ウォーミングプール１３０Ａの中のインスタンス及び／またはコンテナに関して同様のヘルスチェックを行いえる。ウォーミングプール１３０Ａの中のインスタンス及び／またはコンテナは、アクティブプール１４０Ａの中のそれらのインスタンス及びコンテナと一緒にか、または別々にかのいずれかで管理され得る。いくつかの実施形態においては、ウォーミングプール１３０Ａの中のインスタンス及び／またはコンテナのヘルスが、アクティブプール１４０Ａとは別個に管理される場合においては、ワーカマネージャ１４０ではなく、ウォーミングプールマネージャ１３０が、ウォーミングプール１３０Ａの中のインスタンス及び／またはコンテナにおいて上述のヘルスチェックを行い得る。
【００４７】
セキュリティマネージャ１５０は、仮想計算システム１１０においてユーザコードを実行するための着信要求について実行されるプログラムコードのセキュリティを管理する。たとえば、セキュリティマネージャ１５０は、フロントエンド１２０、ウォーミングプールマネージャ１３０、ワーカマネージャ１４０、及び／または補助サービス１０６と通信して、仮想計算システム１１０において実行される様々なプログラムコードについて使用されるセキュリティ設定を構成し、モニタリングし、管理し得る。セキュリティマネージャ１５０は仮想計算システム１１０内で別個のコンポーネントとして示されているが、セキュリティマネージャ１５０の機能のうちの一部または全ては、フロントエンド１２０、ウォーミングプールマネージャ１３０、ワーカマネージャ１４０、及び／または補助サービス１０６によって行われ得る。たとえば、セキュリティマネージャ１５０は、仮想計算システム１１０の他のコンポーネントのうちの１つの中に完全に、または仮想計算システム１１０の他のコンポーネントにわたって分散された形で実装され得る。図１の例においては、セキュリティマネージャ１５０は、セキュリティ管理データ１５０Ａを含む。セキュリティ管理データ１５０Ａは、仮想計算システム１１０におけるプログラムコードのセキュリティを管理するための、ユーザによって指定される、またはセキュリティマネージャ１５０によって決定される任意のセキュリティポリシを含んだデータを含んでよく、これらについては、より詳細に後述する。
【００４８】
上に論じられたように、要求自体は、要求に関連付けられるプログラムコードを実行するのに使用されることになるセキュリティ設定及びパラメータを含んだセキュリティポリシを指定し得る。たとえば、仮想計算システム１１０の特定のユーザは、信頼され得、したがって、仮想計算システム１１０は、そのようなユーザに、それらのプログラムコードにおける関数に関連付けられるセキュリティ設定をカスタマイズするための性能を提供して、それほど厳密でないセキュリティ要件の下でプログラムコードを実行することによって提示される柔軟性を可能にし得る。要求はまた、プログラムコードが、仮想計算システム１１０による実行中の補助サービスと通信することを可能にするのに利用できる構成データを指定してよい。たとえば、仮想計算システム１１０の特定のユーザは、ユーザの仮想プライベートクラウドまたは他のネットワークベースのサービスと安全保護された形で通信する能力を依然として有する仮想計算システム１１０における特定のプログラムコードを実行したいと望むことがある。要求はまた、プログラムコード、またはその一部分との関連で使用されることになる１つまたは複数の信頼されている認証情報を指定してよい。たとえば、特定のプログラムコードは、実行中に、信頼されている認証情報（たとえば、ユーザに関連付けられる安全保護されたログイン）の使用を必要とする「信頼されている（ｔｒｕｓｔｅｄ）」部分を含み得、それは、そのような信頼されている部分が危殆化されることがあった場合、増大したセキュリティリスクの可能性を示し得る。プログラムコードはまた、信頼されている認証情報の使用を必要としない場合がある異なる信頼レベルを含む他の部分を含み得る（たとえば、コードは、呼び出されることになる任意の特定の認証情報を必要としない場合がある標準ファイル変換処理を含み得る）。したがって、プログラムコードを第１の信頼レベルを有する第１の部分と、第２の信頼レベルを有する第２の部分とに、それぞれに関連付けられる様々なセキュリティレベルを含む複数のコンテナを使用して分割することが可能であり得る。そのような要求が処理され、仮想マシンインスタンスが要求に関連付けられるユーザに割り当てられた後、セキュリティマネージャ１５０は、セキュリティポリシ、構成データ、及び／または信頼されている認証情報に従って、仮想マシンインスタンスを構成して、安全な、または信頼されている形で、プログラムコードを仮想マシンインスタンスにおいて実行できるようにし得る。いくつかの実施形態においては、信頼されている認証情報は、仮想計算システム１１０またはそのサブシステムのうちの１つによって管理され、及び／または維持され得るが、他の実施形態においては、信頼されている認証情報は、ファーストパーティまたはサードパーティ認証情報管理システムによって管理され、及び／または維持され得、ケースバイケースで、仮想計算システム１１０に提供され得る。
【００４９】
いくつかの実施形態においては、セキュリティマネージャ１５０は、新規コンテナを作成する、及び指定された量のリソースをコンテナに割り当てるのではなく、指定されたセキュリティ設定を有する既存のコンテナを配置し、プログラムコードを既存のコンテナにおいて実行させ得る。
【００５０】
コンテナが作成された、または配置された後、要求に関連付けられるプログラムコードは、コンテナにおいて実行される。コンテナに割り当てられる（たとえば、ユーザによって要求される）リソースの量、及び／またはプログラムコードによって実際に利用されるリソースの量は、さらなる解析に向けて（たとえば、モニタリング／ロギング／課金サービス１０７、及び／またはセキュリティマネージャ１５０によって）ロギングされ得る。たとえば、ロギングされた情報は、コンテナにおけるプログラムコードの１つまたは複数の実行中にプログラムによって実際に使用されるメモリの量、ＣＰＵサイクルの量、ネットワークパケットの量、及びストレージの量を含み得る。加えて、ロギングされた情報は、プログラムコードの実行中に行われる任意のセキュリティ関連の活動（たとえば、行われたインバウンドまたはアウトバウンドのネットワーク接続、連絡を取った補助サービス、利用された信頼されている認証情報など）、リソース利用、エラー率、レイテンシ、及びプログラムコードの実行中に直面する任意のエラーまたは例外を含み得る。いくつかの実施形態においては、疑わしく見える（たとえば、行われた未承認のネットワーク接続、補助サービスとの未承認の相互作用、及び信頼されている認証情報の潜在的な危殆化など）任意のセキュリティデータは、特別なマーキングがタグ付けされ、セキュリティマネージャ１５０によってさらに解析される。
【００５１】
いくつかの実施形態においては、セキュリティマネージャ１５０は、複数のユーザクラスを作成する、または複数のユーザクラスにアクセスしてよく、相異なるユーザクラスに相異なるルールを適用してよい。たとえば、より洗練されたユーザには、より多くの制御権（たとえば、個々のセキュリティパラメータにわたる制御権）が与えられ得、一方、他のユーザには、単一の代表的なパラメータしか制御することが許可され得ず、他のパラメータは、代表的なパラメータに基づいて調整され得る。
【００５２】
いくつかの実施形態においては、セキュリティマネージャ１５０は、モニタリング／ロギング／課金サービス１０７、及び／またはセキュリティマネージャ１５０によってロギングされる情報に基づいて、プログラムコードのセキュリティを向上させるため、または仮想計算システム１１０におけるプログラムコードの実行に関連付けられるリスクを低減させるために、ユーザが行う可能性があることに関して、ユーザに何らかの指針を提供し得る。たとえば、セキュリティマネージャ１５０は、潜在的な、または見かけ上のセキュリティ違反の繰り返される発生に気付いた後、ユーザが、特定のユーザコードを実行するには高すぎるセキュリティパラメータを一貫して設定しているように見えるという指示をユーザに提供することができる。たとえば、セキュリティパラメータは、いくつかの要因に基づいて、より高いセキュリティリスクに寄与し得る。概して、指示は、様々なセキュリティパラメータについての相異なる設定、構成、またはカテゴリ化を示唆し得る。いくつかの実施形態においては、そのような指示は、セキュリティ問題、エラー、例外、または他の明確な条件（たとえば、増加したレイテンシ、未承認のアクセスなど）の閾値数がセキュリティマネージャ１５０によって処理された後、ユーザに提供される。セキュリティマネージャ１５０は、電子メール、シンプル通知サービス（「ＳＮＳ：Ｓｉｍｐｌｅ  Ｎｏｔｉｆｉｃａｔｉｏｎ  Ｓｅｒｖｉｃｅ」）、ショートメッセージサービス（「ＳＭＳ：Ｓｈｏｒｔ  Ｍｅｓｓａｇｅ  Ｓｅｒｖｉｃｅ」）などを含む任意の通知機構を介して指示を提供し得る。
【００５３】
いくつかの実施形態においては、セキュリティマネージャ１５０は、コード特有の特性を利用して、個々のプログラムコードを実行するためのセキュリティパラメータを改善し得る。たとえば、画像処理を扱うプログラムコードには、信頼されている認証情報が必要でない場合があり得るのに対して、データベースを扱うプログラムコードには、データベースにアクセスする、またはデータベースを更新するための許可を付与するために、信頼されている認証情報が必要になり得る。そのようなコード特有の特性は、セキュリティマネージャ１５０によって維持され得、個々のプログラムコードのセキュリティポリシは、それに応じて調整され得る。
【００５４】
本明細書に説明されているセキュリティ機構は、任意の組合せで使用され得る。たとえば、１つの実施形態においては、ユーザは、プログラムコードについての構成データを指定して、補助サービスと通信し得る。そのような通信は、（たとえば、ユーザに関連付けられる補助サービスにおけるアカウントにログインするために）信頼されている認証情報の使用を必要とし得る。したがって、ユーザは、さらには、プログラムコードが、２つ以上のコンテナ（たとえば、信頼されている認証情報を使用して補助サービスとの通信を必要とする任意のプログラムコードを実行する第１の信頼レベルを有する少なくとも１つのコンテナ、及び補助サービスとの通信を必要とせず他のプログラムコードを実行する第２の信頼レベルを有する別のコンテナ）によって実行されることを望む場合がある。別の実施形態においては、ユーザは、やはり補助サービスとの通信を必要とするプログラムコードとの関連でセキュリティポリシを提供してよい。ユーザは、いかにプログラムコードが実行し、補助サービスと相互作用するかについて関連付けられるセキュリティパラメータを指定したいと望む場合がある。別の実施形態においては、ユーザは、やはり多数のコンテナ（たとえば、相異なる信頼レベルを有するコンテナ）を使用してプログラムコードの実行を必要とするプログラムコードとの関連でセキュリティポリシを提供してよい。したがって、ユーザは、複数のコンテナが、実行中に互いに通信でき、セキュリティポリシ及びパラメータを介する方法を指定することを望む場合がある。
【００５５】
図２は、仮想計算システム１１０の中の仮想マシンインスタンスを管理するコンピューティングシステム（セキュリティマネージャ１５０と呼ばれる）の全体的なアーキテクチャを示している。図２に示されているセキュリティマネージャ１５０の全体的なアーキテクチャは、本開示の態様を実装するのに使用され得るコンピュータハードウェア及びソフトウェアのモジュールの構成を含む。セキュリティマネージャ１５０は、図２に示されている要素よりも多くの（または少ない）要素を含んでいてよい。しかしながら、実現可能な開示を提供するために、必ずしもこれらの一般的に従来の要素がすべて示されているとは限らない。例示されているように、セキュリティマネージャ１５０は、処理装置１９０、ネットワークインターフェース１９２、コンピュータ可読媒体ドライブ１９４、入力／出力デバイスインターフェース１９６を含み、それらはすべて、通信バスを経由して互いに通信し得る。ネットワークインターフェース１９２は、１つまたは複数のネットワークもしくはコンピューティングシステムに対する接続性を提供し得る。したがって、処理装置１９０は、ネットワーク１０４を介して、他のコンピューティングシステムもしくはサービスから情報及び命令を受信し得る。処理装置１９０はまた、メモリ１８０との間で通信し、さらには、入力／出力デバイスインターフェース１９６を介して、オプションのディスプレイ（図示せず）に出力情報を提供し得る。入力／出力デバイスインターフェース１９６はまた、オプションの入力デバイス（図示せず）からの入力を受け入れてよい。
【００５６】
メモリ１８０は、本開示の１つまたは複数の態様を実装するために処理装置１９０が実行するコンピュータプログラム命令（いくつかの実施形態においては、モジュールとしてグループ分けされる）を含んでよい。メモリ１８０は、概して、ＲＡＭ、ＲＯＭ、及び／または他の持続的、補助的または非一時的なコンピュータ可読媒体を含む。メモリ１８０は、セキュリティマネージャ１５０の全体的な管理及び動作において処理装置１９０による使用に向けて、コンピュータプログラム命令を提供するオペレーティングシステム１８４を記憶し得る。メモリ１８０は、本開示の態様を実装するためのコンピュータプログラム命令及び他の情報をさらに含み得る。たとえば、１つの実施形態においては、メモリ１８０は、たとえば、コンピューティングデバイスにインストールされるブラウザもしくはアプリケーションなどのナビゲーション及び／またはブラウジングインターフェースを介して、コンピューティングデバイス上に表示するためのユーザインターフェース（及び／またはそのための命令）を生成するユーザインターフェース装置１８２を含む。加えて、メモリ１８０は、たとえば、ユーザプログラムコード及び／もしくはライブラリにアクセスするために、１つまたは複数のデータレポジトリ（図示せず）を含んでよく、ならびに／またはそれらと通信してよい。
【００５７】
ユーザインターフェース装置１８２に加えて、及び／またはそれとの組合せで、メモリ１８０は、処理装置１９０によって実行され得るプログラムコードセキュリティポリシ装置１８６及び補助サービス／インスタンス間インターフェース装置１８８を含み得る。１つの実施形態においては、ユーザインターフェース装置１８２、プログラムコードセキュリティポリシ装置１８６、及び補助サービス／インスタンス間インターフェース装置１８８は、個々に、または集合的に、本開示の様々な態様、たとえば、さらに後述される仮想計算システム１１０におけるプログラムコードの実行をモニタリングし、ロギングすること、特定のインスタンス、コンテナ、及び／または要求についてのセキュリティ設定を調整する必要性を決定することなどを実装する。
【００５８】
プログラムコードセキュリティポリシ装置１８６は、仮想計算システム１１０におけるユーザコードの実行をモニタリングし、ユーザコードを実行するためのセキュリティポリシ及びセキュリティ機構に従ってコンテナを提供する。本明細書に説明されているように、セキュリティポリシは、要求が仮想計算システム１１０によって受信された時点において、またはユーザが仮想計算システム１１０による実行に向けてプログラムコードを登録するときなど、プログラムコードの実行より前の時点において、ユーザ指定され、提供され得る。セキュリティポリシ情報は、たとえば、特定のセキュリティポリシを適用する必要がある要求のより高速なアクセス及び処理を容易にするために、セキュリティ管理データ１５０Ａにおいて記憶され得る。セキュリティポリシ情報はまた、ストレージサービス１０８など、プログラムコードとともに記憶され得、プログラムコードがアクセスされて、コンテナ上にロードされる時点においてアクセスされ得る。
【００５９】
補助サービス／インスタンス間インターフェース装置１８８は、コンテナが、１つまたは複数の補助サービスと（たとえば、仮想プライベートクラウド（「ＶＰＣ：ｖｉｒｔｕａｌ  ｐｒｉｖａｔｅ  ｃｌｏｕｄ」）トンネリングもしくは同様のネットワーク通信を介して）、または互いに（たとえば、プロセス間通信（「ＩＰＣ：ｉｎｔｅｒ−ｐｒｏｃｅｓｓ  ｃｏｍｍｕｎｉｃａｔｉｏｎ」）トンネリングもしくは類似のネットワーク通信を介して）、相互作用することを安全に可能にすることに関する性能を提供し管理する。そのような通信は、セキュリティ違反を示し得る疑わしいネットワーク活動を識別するために、密にモニタリングされ、活動ロギングされることが必要な場合がある。コンテナについての疑わしい活動が識別された場合、補助サービス／インスタンス間インターフェース装置１８８は、メッセージをワーカマネージャ１４０に送信して、いずれのさらなるセキュリティ違反活動を最小限に抑えるようにコンテナをシャットダウンしてよい。補助サービス／インスタンス間インターフェース装置１８８はまた、特定のプログラムコードが、疑わしい活動に関与していた可能性があるという通知をユーザに送信し、さらなるセキュリティ違反を回避するために、ユーザは、プログラムコードに関連付けられるセキュリティポリシ、構成データ、及び／または信頼されている認証情報を変更する必要があり得ることを示唆し得る。いくつかの例においては、補助サービス／インスタンス間インターフェース装置１８８は、（実際のまたは疑われる）セキュリティ違反が繰り返された後、ユーザが問題に対処するまでは、プログラムコードが、コンテナにおいてロードされないように、または実行されないようにしてよい。
【００６０】
プログラムコードセキュリティポリシ装置１８６、及び補助サービス／インスタンス間インターフェース装置１８８は、セキュリティマネージャ１５０の一部として、図２には示されているが、他の実施形態においては、プログラムコードセキュリティポリシ装置１８６、及び補助サービス／インスタンス間インターフェース装置１８８のすべて、または一部分は、仮想計算システム１１０及び／または別のコンピューティングデバイスの他のコンポーネントによって実装され得る。たとえば、本開示の特定の実施形態においては、仮想計算システム１１０と通信する別のコンピューティングデバイスは、セキュリティマネージャ１５０の一部として示されているモジュール及びコンポーネントと同様に動作するいくつかのモジュールまたはコンポーネントを含み得る。
【００６１】
次に、図３を参照して、仮想計算システム１１０の１つまたは複数コンポーネント（たとえば、セキュリティマネージャ１５０）によって実装されるルーチン３００について説明する。ルーチン３００は、セキュリティマネージャ１５０による実装に関して説明されているが、当業者は、代替のコンポーネントが、ルーチン３００を実装することができ、またはブロックのうちの１つまたは複数が、異なるコンポーネントによって、もしくは分散される形で実装され得ることを認識するであろう。
【００６２】
例示的なルーチン３００のブロック３０２においては、セキュリティマネージャ１５０は、プログラムコードを実行するための要求を受信する。代替としては、セキュリティマネージャ１５０は、フロントエンド１２０によって受信され、処理される着信要求に関連付けられるプログラムコードを実行するための適切なセキュリティ設定を決定するための要求を図１のワーカマネージャ１４０から受信する。たとえば、フロントエンド１２０は、ユーザコンピューティングデバイス１０２または補助サービス１０６から受信される要求を処理し、ユーザを認証し、ユーザが指定されたユーザコードへのアクセスを承認されることを決定した後、ワーカマネージャ１４０に要求を転送し得る。次いで、ワーカマネージャ１４０は、要求をセキュリティマネージャ１５０に転送し得る。上に論じられたように、要求は、実行されることになるプログラムコードを示すデータもしくはメタデータ、プログラムコードが記述される言語、要求に関連付けられるユーザ、及び／またはプログラムコードを実行するために確保されることになるコンピューティングリソース（たとえば、メモリなど）を含み得る。要求はまた、ユーザ指定のセキュリティポリシを示すデータまたはメタデータを含み得る。ユーザ指定のセキュリティポリシは、１つまたは複数のセキュリティパラメータを示してよく、それによって、プログラムコードは、実行されることになる。たとえば、セキュリティパラメータは、処理持続時間限度、ＣＰＵ利用限度、ディスク空間もしくは他のメモリ限度、伝送制御プロトコル（「ＴＣＰ：ｔｒａｎｓｍｉｓｓｉｏｎ  ｃｏｎｔｒｏｌ  ｐｒｏｔｏｃｏｌ」）ソケット接続を可能にするパラメータ、コンテナへのインバウンドもしくはアウトバウンドのネットワーク接続を可能にするパラメータ、コンテナが（仮想プライベートクラウドなどの）補助サービスと通信できるようにするパラメータ、コンテナが選択された仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、コンテナが第２の仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、及びコンテナがプログラムコードとの関連で実行することを許可されるアクセス制限機能のリスト、のうちの１つまたは複数を含み得る。
【００６３】
次に、ブロック３０４においては、セキュリティマネージャ１５０は、プログラムコードを実行するための要求に基づいて、ユーザ指定のセキュリティポリシを決定する。たとえば、セキュリティマネージャ１５０は、上に説明された要求とともにセキュリティポリシを受信し得る。別のシナリオにおいては、セキュリティマネージャ１５０は、たとえば、セキュリティ管理データ１５０Ａからの、またはストレージサービス１０８からロードされるセキュリティポリシにアクセスしてよい。セキュリティポリシは、プログラムコードの実行と併せて、セキュリティマネージャ１５０によって課せられる１つまたは複数の制限を緩和する、または修正し得る。たとえば、セキュリティポリシは、コンテナにロードされ、かつコンテナによって実行されるプログラムコードが、インバウンドもしくはアウトバウンドのネットワーク接続を確立して、コンテナを含んでいる仮想マシンインスタンスにおける別のコンテナ上のプログラムコード、異なる仮想マシンインスタンスにおける別のコンテナ上のプログラムコード、または補助サービス上のプログラムコードなど、他のプログラムコードの実行を容易にするように許可され得ることを指定してよい。セキュリティポリシは、ネイティブコードライブラリ及び他のコードの使用がプログラムコードの実行と併せて許可されるかどうかをさらに指定してよい。
【００６４】
ブロック３０６においては、ワーカマネージャ１４０は、ユーザ指定のセキュリティポリシに少なくとも一部基づいて、要求に示されている情報に基づいた計算能力を取得する。たとえば、セキュリティポリシは、プログラムコードの実行のためのユーザ選好の持続時間を指定してよく、計算能力は、その持続時間の間、取得され得る。別の例においては、セキュリティポリシは、プログラムコードが、アウトバウンドＴＣＰソケット接続を行うように許可され、計算能力が、アウトバウンドＴＣＰソケット接続を可能にするために取得され得ることを指定してよい。いくつかの実施形態においては、計算能力は、コード実行要求をサービスするように構成されているコンテナを含む。本明細書に論じられているように、コンテナは、アクティブプール１４０Ａまたはウォーミングプール１３０Ａから取得され得る。計算能力が取得され得る１つのやり方は、上記にその全体が参照されることによって既に組み込まれた、２０１４年９月３０日に出願された「ＬＯＷ  ＬＡＴＥＮＣＹ  ＣＯＭＰＵＴＡＴＩＯＮＡＬ  ＣＡＰＡＣＩＴＹ  ＰＲＯＶＩＳＩＯＮＩＮＧ」と題された米国特許出願第１４／５０２，８１０号明細書の図４に関してより詳細に説明される。コンテナは、セキュリティポリシに基づいて取得され得、それにより、ワーカマネージャ１４０は、アクティブプール１４０Ａまたはウォーミングプール１３０Ａの中のコンテナが利用可能であるかどうか、及び要求について実行されることになるプログラムコードに関連付けられる同じセキュリティポリシにより構成されているかどうか決定することができる。同様に構成されたコンテナが利用可能である、または少なくとも１つがセキュリティポリシに照応するやり方で構成されている場合、そのコンテナは、要求をサービスするために取得され得る。
【００６５】
ブロック３０８においては、セキュリティマネージャ１５０またはワーカマネージャ１４０により、ユーザコードは、計算能力を使用して、及びユーザ指定のセキュリティポリシに従って、実行されることになる。たとえば、ワーカマネージャ１４０は、フロントエンド１２０に、要求に割り当てられるコンテナのアドレスを送信することができ、それにより、フロントエンド１２０は、そのアドレスにコード実行要求をプロキシすることができる。いくつかの実施形態においては、アドレスは、ワーカマネージャ１４０によって一時的に確保され得、アドレス及び／またはコンテナは、指定された時間期間が経過した後、自動的に解放され得る。いくつかの実施形態においては、アドレス及び／またはコンテナは、ユーザコードが、コンテナにおける実行を終了した後、自動的に解放され得る。
【００６６】
図３のルーチン３００は、ブロック３０２〜ブロック３０８を参照して、上に説明されているが、本明細書に説明されている実施形態は、そのように限定されず、１つまたは複数のブロックが、本開示の趣旨から逸脱することなく、削除されても、修正されても、または交換されてもよい。
【００６７】
次に、図４を参照して、仮想計算システム１１０の１つまたは複数コンポーネント（たとえば、セキュリティマネージャ１５０）によって実装されるルーチン４００について説明する。ルーチン４００は、セキュリティマネージャ１５０による実装に関して説明されているが、当業者は、代替のコンポーネントが、ルーチン４００を実装することができ、またはブロックのうちの１つまたは複数が、異なるコンポーネントによって、もしくは分散される形で実装され得ることを認識するであろう。
【００６８】
例示的なルーチン４００のブロック４０２においては、仮想計算システム１１０は、補助サービスとインターフェースするためのプログラムコード及び構成データを受信する。たとえば、プログラムコードの開発者などのユーザは、いかにプログラムコードが接続を開始し、またはそうでなければ、プログラムコードの実行中に補助サービスと通信し得るかを指定する関連の構成データを提供し得る。構成データは、たとえば、補助サービス上のアカウントに関連付けられるネットワークアドレス及びログイン認証情報を含んでよく、ここで、アカウントは、プログラムコードを仮想計算システムに登録するユーザに関連付けられる。したがって、プログラムコードが仮想計算システムによって実行されるとき、ネットワークアドレス及びログイン認証情報は、補助サービスに接続する、または「トンネルする（ｔｕｎｎｅｌ）」のに使用され得る。一例として、ユーザは、通知、ログデータ、及びステータスレポートなどのデータを提供するために、仮想プライベートクラウドなどの補助サービスにトンネルするようにプログラムコードを構成したいと望み得る。別の実施形態においては、構成データは、認証情報、及びファイルシステムマウントポイントを含んでよい。ファイルシステムマウントポイントは、たとえば、仮想計算システム１１０によってアクセスされる複数のプログラムコードを記憶するファイルシステムにいかにアクセスするかを示す、または指定してよい。
【００６９】
次に、ブロック４０４においては、ワーカマネージャ１４０は、ブロック４０２において説明されたように、仮想計算システム１１０によって、先に受信されたプログラムコードなどのプログラムコードを実行するための要求を受信する。たとえば、ブロック４０４は、図３のブロック３０２と同様であってよい。要求は、プログラムコードが補助サービスとインターフェースできるようにするための構成データを含む、または指定してよく、あるいはワーカマネージャ１４０及び／またはセキュリティマネージャ１５０は、（たとえば、セキュリティマネージャデータ１５０Ａもしくはデータ１０８Ａにアクセスして、プログラムコードに関連付けられる何らかの構成データが存在するかどうかを決定することによって）プログラムコードが構成データに関連付けられていることを決定してよい。
【００７０】
ブロック４０６においては、ワーカマネージャ１５０は、アクティブプール１３０Ａの中に、要求に関連付けられるユーザに、現在、割り当てられているインスタンス、及び補助サービスとのインターフェースを可能にし、サポートし、または許可するように構成されているインスタンスが存在するかどうかを決定する。たとえば、インスタンスのうちの１つは、その上に作成されるコンテナの中のプログラムコードを先に実行していてよく、コンテナは終了していてよいが、プログラムコードは、依然として、インスタンス上に（たとえば、インスタンスコードキャッシュの中に）残っていてよい。ワーカマネージャ１４０が、そのようなインスタンスがあることを決定した場合、ルーチン４００は、後述されるブロック４１２に進む。一方、ワーカマネージャ１４０が、そのようなインスタンスがないことを決定した場合、ルーチン４００は、ブロック４０８に進む。
【００７１】
ブロック４０８においては、ワーカマネージャ１４０は、ウォーミングプール１３０Ａから、またはウォーミングプールマネージャ１３０から、新規インスタンスを得る。ブロック４１０においては、ワーカマネージャ１４０は、補助サービスとインターフェースするように、得られたインスタンスを構成する。
【００７２】
一旦、得られたインスタンスが、ブロック４１０において構成されている、またはブロック４０６においてアクティブプール１４０Ａから取得されると、ルーチン４００は、ブロック４１２に進み、ここでは、ワーカマネージャ１４０により、要求は、新規コンテナか、または事前構成されたコンテナかのいずれかを使用して処理されることになる。新規コンテナが作成される前に、ワーカマネージャ１４０は、インスタンスが、要求を扱うのに十分なリソースを有するかどうかを決定してよい。
【００７３】
図４のルーチン４００は、ブロック４０２〜ブロック４１２を参照して、上に説明されているが、本明細書に説明されている実施形態は、そのように限定されず、１つまたは複数のブロックが、本開示の趣旨から逸脱することなく、削除されても、修正されても、または交換されてもよい。
【００７４】
次に、図５を参照して、仮想計算システム１１０の１つまたは複数コンポーネント（たとえば、セキュリティマネージャ１５０）によって実装されるルーチン５００について説明する。ルーチン５００は、セキュリティマネージャ１５０による実装に関して説明されているが、当業者は、代替のコンポーネントが、ルーチン５００を実装することができ、またはブロックのうちの１つまたは複数が、異なるコンポーネントによって、もしくは分散される形で実装され得ることを認識するであろう。
【００７５】
例示的なルーチン５００のブロック５０２においては、ワーカマネージャ１４０は、プログラムコードを実行するための要求を受信する。たとえば、ブロック５０２は、図３のブロック３０２と同様であってよい。要求は、実行中にプログラムコードのうちの少なくとも一部によって使用されることになる信頼されている認証情報を含む、または示し得る。１つの実施形態においては、信頼されている認証情報は、ユーザによってプログラムコードに先に登録され、たとえば、セキュリティ管理データ１５０Ａまたはデータ１０８からアクセスされて、プログラムコードを実行するための要求が、信頼されている認証情報の使用を必要とするかどうかを決定してよい。プログラムコードに関連付けられる構成データはまた、セキュリティマネージャ１５０によってアクセスされ、使用されて、プログラムコードのどの部分が、信頼されている認証情報を使用して実行すべきであるかを決定してよい。
【００７６】
ブロック５０４においては、ワーカマネージャ１４０は、アクティブプール１３０Ａの中に、要求に関連付けられるユーザに、現在、割り当てられ、プログラムコードがロードされているインスタンスが存在するかどうかを決定する。たとえば、インスタンスのうちの１つは、その上に作成されるコンテナの中のプログラムコードを先に実行していてよく、コンテナは終了していてよいが、プログラムコードは、依然として、インスタンス上に（たとえば、インスタンスコードキャッシュの中に）残っていてよい。ワーカマネージャ１４０が、そのようなインスタンスがあることを決定した場合、ルーチン５００は、後述されるブロック５０８に進む。一方、ワーカマネージャ１４０が、そのようなインスタンスがないことを決定した場合、ルーチン５００は、ブロック５０６に進む。
【００７７】
ブロック５０６においては、ワーカマネージャ１４０は、ウォーミングプール１３０Ａから、またはウォーミングプールマネージャ１３０から、新規インスタンスを得る。
【００７８】
ブロック５０８においては、ワーカマネージャ１４０、またはセキュリティマネージャ１５０は、得られたインスタンスにおいて第１のコンテナを作成する。第１のコンテナは、プログラムコードを実行するための要求に関連付けられる信頼されている認証情報を使用して、プログラムコードの第１の部分を実行するように作成され、構成され得る。
【００７９】
ブロック５１０においては、ワーカマネージャ１４０、またはセキュリティマネージャ１５０は、得られたインスタンスにおいて第２のコンテナを作成する。第２のコンテナは、プログラムコードを実行するための要求に関連付けられる信頼されている認証情報を使用せず、または必要とせず、プログラムコードの第２の部分を実行するように作成され、構成され得る。第２のコンテナは、たとえば、プロセス間通信（「ＩＰＣ：ｉｎｔｅｒ−ｐｒｏｃｅｓｓ  ｃｏｍｍｕｎｉｃａｔｉｏｎ」）プロトコルを介して、第１のコンテナと通信するように構成され得る。ＩＰＣプロトコルは、たとえば、ソケットペア、パイプ、名前付きパイプ、仮想マシンインスタンス上の共有メモリ、またはメッセージキューのうちの１つを含み得る。たとえば、第１のコンテナは、プロセス間通信を第２のコンテナに送信して、オンデマンドで、プログラムコードの第２の部分の処理を要求するように構成され得る。ルーチン５００を参照して説明されている例は、プログラムコードの２つの部分を必要とするが、任意の数の部分が決定され得、対応する数のそれぞれのコンテナは、相異なる信頼レベルを有するそれぞれの認証情報を使用して、それぞれの部分を実行するように作成され得る。いくつかの場合においては、第１及び第２のコンテナは、マスター／スレーブ関係で構成され得、それにより、ほとんど信頼されていないプログラムコードの第２の部分を含んでいる第２のコンテナが、第１のコンテナから受信された要求に応答してのみ実行され得る。いくつかの場合においては、第１及び第２のコンテナは、きょうだい関係で構成され得、それぞれは、ほとんど信頼されていないコードを必要とするプロセスから、信頼されている認証情報を必要とするプロセスを分離するようにする以外は、他とは無関係にそのそれぞれのプログラムコードを実行する。
【００８０】
ブロック５１２においては、ワーカマネージャ１４０により、要求は、第１及び第２のコンテナを使用して処理されることになる。いくつかの場合においては、プログラムコードの第１及び第２の部分は、同時に、かつ並行して実行され得る。いくつかの場合においては、プログラムコードの第２の部分は、第１のコンテナからの、第２のコンテナによって受信される要求に応答してのみ実行され得る。
【００８１】
図５のルーチン５００は、ブロック５０２〜ブロック５１２を参照して、上に説明されているが、本明細書に説明されている実施形態は、そのように限定されず、１つまたは複数のブロックが、本開示の趣旨から逸脱することなく、削除されても、修正されても、または交換されてもよい。
【００８２】
図６を参照すると、図１の実施形態などの例示的な実施形態に従って、補助サービスとインターフェースする仮想マシンインスタンスを含むセキュリティ機構が示されている。図６の例においては、インスタンス１５７は、特定のプログラムコードに関連付けられる着信コード実行要求を処理するように構成されている。インスタンス１５７は、ネットワーク１０４を介して、１つまたは複数の補助サービス１０６、及びインスタンスプロビジョニングサービス１０９と通信するように示されている。たとえば、インスタンス１５７は、プロビジョニング及び構成状態中に、インスタンスプロビジョニングサービス１０９と最初に通信し、その後、補助サービス１０６と直接、通信してよい。セキュリティマネージャ１５０は、不正なサードパーティからの干渉を防止するために、この接続を管理し、安全保護するように構成され得る。
【００８３】
図７を参照すると、図１の実施形態など、例示的な実施形態に従って、相異なる信頼レベルに関連する部分でプログラムコード実行することを含むセキュリティ機構が示されている。図７においては、インスタンス１５６は、特定のプログラムコードに関連付けられる着信コード実行要求を処理するように構成されている。インスタンス１５６は、第１の信頼レベルを有するプログラムコードの第１の部分がロードされたコンテナ１５６Ａと、第２の信頼レベルを有するプログラムコードの第２の部分がロードされたコンテナ１５６Ｂとを含む。コンテナ１５６Ａは、コンテナ１５６Ｂと、直接、通信しているように示されている。たとえば、コンテナ１５６Ａは、コンテナ１５６Ｂに、何らかの信頼されている、または安全な認証情報を渡す必要なしに、コードの第２の部分を実行するための要求をコンテナ１５６Ｂに送信することができる。コンテナ１５６Ｂは、コンテナ１５６Ａから受信された要求を処理し、任意選択で、その完了時に、応答を提供することができる。
【００８４】
本開示に説明されている機能のすべてが、開示されたコンポーネント及びモバイル通信デバイスの１つまたは複数の物理プロセッサによって実行されるソフトウェアにおいて具現化され得ることは、当業者によって認識されるであろう。ソフトウェアは、任意のタイプの不揮発性ストレージに持続的に記憶され得る。
【００８５】
別段、具体的に記述されない限り、または別の形で、使用される文脈の中で理解されない限り、とりわけ、「ｃａｎ」、「ｃｏｕｌｄ」、「ｍｉｇｈｔ」、または「ｍａｙ」などの条件付き言語は、概して、特定の実施形態は、特定の特徴、要素、及び／またはステップを含むが、他の実施形態は、含まないことを伝えるように意図されている。したがって、そのような条件付き言語は、概して、特徴、要素、及び／またはステップが、１つまたは複数の実施形態に何らかの形で必要であること、あるいは１つまたは複数の実施形態が、ユーザ入力もしくはプロンプト指示あり、またはなしで、これらの特徴、要素、及び／またはステップが、任意の特定の実施形態において含まれている、または行われるべきであるかどうかを決めるための論理機構を必ず含んでいると意味することを意図するものではない。
【００８６】
本明細書に説明されている、及び／または添付の図面に示されているフロー図における任意のプロセス記述、要素、またはブロックは、プロセスの中の特有の論理関数またはステップを実装するための１つまたは複数の実行可能な命令を含むモジュール、セグメント、またはコードの部分を潜在的に表していると理解すべきである。代替の実施態様は、本明細書に説明されている実施形態の範囲内に含まれ、ここでは、当業者によって理解されるように、要素または関数が、必要な機能に応じて、実質的に同時にまたは逆の順序であることを含んで、削除され、示されまたは論じられているものとは順序が違って実行され得る。上の説明したデータ及び／またはコンポーネントが、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、またはネットワークインターフェースなどのコンピュータ実行可能コンポーネントを記憶するコンピュータ可読ストレージ媒体に関連付けられるドライブ機構を使用して、コンピュータ可読媒体において記憶され、コンピューティングデバイスのメモリにロードされ得ることがさらに認識されるであろう。さらには、コンポーネント及び／またはデータは、単一のデバイスに含められても、または何らかの形で分散されてもよい。したがって、汎用のコンピューティングデバイスは、上に説明した様々なデータ及び／またはコンポーネントの処理及び／または実行により、本開示のプロセス、アルゴリズム、方法論を実装するように構成され得る。
【００８７】
多くの変形及び修正が、上述の実施形態に対して行われ得、それらの要素は、他の許容可能な例の中にあると理解すべきであることを強調すべきである。すべてのそのような修正形態及び変形形態は、本開示の範囲内で本明細書に含まれ、以下の請求項によって保護されるように意図されている。
【００８８】
本開示の実施形態は、以下の条項を考慮して説明され得る。
１．  仮想計算フリートから低レイテンシの計算的能力を提供するためのシステムであって、
ユーザの少なくとも１つのプログラムコードを記憶するように構成された電子データストアと、
特有のコンピュータ実行可能命令を実行する１つまたは複数のハードウェアコンピューティングデバイスを含む仮想計算システムとを備え、前記仮想計算システムは、前記電子データストアと通信し、少なくとも、
１つまたは複数の物理コンピューティングデバイスにおいて複数の仮想マシンインスタンスを維持することであって、前記複数の仮想マシンインスタンスは、１つまたは複数のソフトウェアコンポーネントがロードされ、かつユーザに割り当てられるのを待機している、仮想マシンインスタンスを含むウォーミングプール、及び１人または複数人のユーザに、現在、割り当てられている仮想マシンインスタンスを含むアクティブプールを備える、前記維持することと、
前記仮想計算システムにおいて特定のユーザに関連付けられるプログラムコードを実行するための要求を受信することであって、前記要求が、前記プログラムコード及び前記プログラムコードに関連付けられる前記特定のユーザを示す情報を含む、前記受信することと、
前記受信された要求に基づいて、前記プログラムコードを実行させることになる１つまたは複数のセキュリティパラメータを指定するユーザ指定のセキュリティポリシを決定することと、
前記ウォーミングプールまたは前記アクティブプールから、前記プログラムコードを実行するのに使用されることになる仮想マシンインスタンスを選択することと、
前記ユーザ指定のセキュリティポリシに基づいて、前記選択された仮想マシンインスタンスにコンテナを作成することと、
前記特定のユーザに関連付けられる前記プログラムコードを、前記コンテナ上に前記電子データストアからロードさせ、前記セキュリティポリシに従って前記コンテナにおいて実行させることと、
を行うように構成される、
前記システム。
【００８９】
２．  前記１つまたは複数のセキュリティパラメータが、処理持続時間限度、メモリ限度、伝送制御プロトコル（「ＴＣＰ」）ソケット接続を可能にするパラメータ、前記コンテナへのインバウンドもしくはアウトバウンドのネットワーク接続を可能にするパラメータ、前記コンテナが仮想プライベートクラウドと通信できるようにするパラメータ、前記コンテナが前記選択された仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、前記コンテナが第２の仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、及び前記コンテナが前記プログラムコードとの関連で実行することを許可されるアクセス制限機能のリスト、のうちの１つまたは複数を含む、条項１に記載のシステム。
【００９０】
３．  前記ユーザ指定のセキュリティポリシが、前記特定のユーザに関連付けられるセキュリティポリシに一部、基づいている、条項１に記載のシステム。
【００９１】
４．  特有のコンピュータ実行可能命令を実行する１つまたは複数のハードウェアコンピューティングデバイスを含む仮想計算システム、
を備えるシステムであって、前記仮想計算システムが、少なくとも、
前記仮想計算システムにおいてプログラムコードを実行するための要求に基づいて、前記プログラムコードを実行させることになる１つまたは複数のセキュリティパラメータを指定するユーザ指定のセキュリティポリシを決定することであって、前記プログラムコードが、特定のユーザに関連付けられる、前記決定することと、
１つまたは複数の物理コンピューティングデバイスにおいて維持される複数の仮想マシンインスタンスから、前記プログラムコードを実行するのに使用されることになる仮想マシンインスタンスを選択することと、
前記１つまたは複数のセキュリティパラメータに基づいて、前記選択された仮想マシンインスタンスにコンテナを取得することと、
前記特定のユーザに関連付けられる前記プログラムコードを、前記ユーザ指定のセキュリティポリシに少なくとも一部基づいて、前記コンテナにおいて実行させることと、
を行うように構成される、
前記システム。
【００９２】
５．  前記１つまたは複数のセキュリティパラメータが、処理持続時間限度、メモリ限度、伝送制御プロトコル（「ＴＣＰ」）ソケット接続を可能にするパラメータ、前記コンテナへのインバウンドもしくはアウトバウンドのネットワーク接続を可能にするパラメータ、前記コンテナが補助サービスと通信できるようにするパラメータ、前記コンテナが前記選択された仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、前記コンテナが第２の仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、及び前記コンテナが前記プログラムコードとの関連で実行することを許可されるアクセス制限機能のリスト、のうちの１つまたは複数を含む、条項４に記載のシステム。
【００９３】
６．  前記セキュリティポリシが、前記仮想計算システムにおいて前記プログラムコードを実行するのに割り当てられることになるコンピューティングリソースの量をさらに指定し、前記仮想マシンインスタンスにおいて前記コンテナを作成することが、少なくとも、前記仮想マシンインスタンスにおいて利用可能なコンピューティングリソースから、コンピューティングリソースの示された量を割り当てることを含む、条項４に記載のシステム。
【００９４】
７．  前記セキュリティポリシが、少なくとも、信頼されている認証情報を使用して実行されることになる前記プログラムコードの第１の部分、及び前記信頼されている認証情報を使用せずに実行されることになる前記プログラムコードの第２の部分を示す構成データをさらに含む、条項４に記載のシステム。
【００９５】
８．  前記ユーザ指定のセキュリティポリシが、前記特定のユーザに関連付けられるセキュリティポリシに一部基づいている、条項４に記載のシステム。
【００９６】
９．  前記仮想計算システムが、
１人または複数人のユーザに、現在、割り当てられている仮想マシンインスタンスのアクティブプールを維持することであって、前記アクティブプールの中の各仮想マシンインスタンスは、１つまたは複数のソフトウェアコンポーネントがロードされている、前記維持することと、
前記アクティブプールから前記仮想マシンインスタンスを選択することであって、前記仮想マシンインスタンスが、前記ユーザ指定のセキュリティポリシに従って構成される、前記選択することと、
を行うようにさらに構成されている、条項４に記載のシステム。
【００９７】
１０．  前記１つまたは複数のセキュリティパラメータに従って、前記選択された仮想マシンインスタンスにコンテナを取得するために、前記仮想計算システムは、
前記プログラムコードがロードされ、かつ前記１つまたは複数のセキュリティパラメータに従って構成されている、構成されたコンテナを、前記仮想マシンインスタンスが含んでいることを決定することと、
前記プログラムコードを実行するための使用に向けて、前記構成されたコンテナを選択することと、
を行うようにさらに構成される、条項４に記載のシステム。
【００９８】
１１．  前記１つまたは複数のセキュリティパラメータに従って、前記選択された仮想マシンインスタンスにコンテナを取得するために、前記仮想計算システムは、
前記プログラムコードがロードされ、かつ前記１つまたは複数のセキュリティパラメータに従って構成されている、構成されたコンテナを、前記仮想マシンインスタンスが含んでいないことを決定することと、
前記１つまたは複数のセキュリティパラメータに従って前記コンテナを作成し、前記特定のユーザに関連付けられる前記プログラムコードを、前記コンテナ上に電子データストアからロードさせることと、
を行うようにさらに構成されている、条項４に記載のシステム。
【００９９】
１２．  コンピュータ実装方法であって、
特有の実行可能命令により構成された１つまたは複数のコンピューティングデバイスによって実装されるとき、
仮想計算システムにおいてプログラムコードを実行するための要求に基づいて、前記プログラムコードを実行させることになる１つまたは複数のセキュリティパラメータを指定するユーザ指定のセキュリティポリシを決定することであって、前記プログラムコードが、特定のユーザに関連付けられる、前記決定することと、
１つまたは複数の物理コンピューティングデバイスにおいて維持される複数の仮想マシンインスタンスから、前記プログラムコードを実行するのに使用されることになる仮想マシンインスタンスを選択することと、
前記１つまたは複数のセキュリティパラメータに従って、前記選択された仮想マシンインスタンスにコンテナを作成することと、
前記特定のユーザに関連付けられる前記プログラムコードを、前記ユーザ指定のセキュリティポリシに少なくとも一部基づいて、前記コンテナにおいて実行させることと、
を含む、前記コンピュータ実装方法。
【０１００】
１３．  前記１つまたは複数のセキュリティパラメータが、処理持続時間限度、メモリ限度、伝送制御プロトコル（「ＴＣＰ」）ソケット接続を可能にするパラメータ、前記コンテナへのインバウンドもしくはアウトバウンドのネットワーク接続を可能にするパラメータ、前記コンテナが補助サービスと通信できるようにするパラメータ、前記コンテナが前記選択された仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、前記コンテナが第２の仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、及び前記コンテナが前記プログラムコードとの関連で実行することを許可されるアクセス制限機能のリスト、のうちの１つまたは複数を含む、条項１２に記載のコンピュータ実装方法。
【０１０１】
１４．  前記セキュリティポリシが、前記仮想計算システムにおいて前記プログラムコードを実行するのに割り当てられることになるコンピューティングリソースの量をさらに指定し、前記仮想マシンインスタンスにおいて前記コンテナを作成することが、少なくとも、前記仮想マシンインスタンスにおいて利用可能なコンピューティングリソースから、コンピューティングリソースの示された量を割り当てることを含む、条項１２に記載のコンピュータ実装方法。
【０１０２】
１５．  前記セキュリティポリシが、少なくとも、信頼される認証情報を使用して実行されることになる前記プログラムコードの第１の部分、及び前記信頼される認証情報を使用せずに実行されることになる前記プログラムコードの第２の部分を示す構成データをさらに含む、条項１２に記載のコンピュータ実装方法。
【０１０３】
１６．  前記１つまたは複数のセキュリティパラメータに従って、前記選択された仮想マシンインスタンスにコンテナを取得することは、
前記プログラムコードがロードされ、かつ前記１つまたは複数のセキュリティパラメータに従って構成されているコンテナを、前記仮想マシンインスタンスが含んでいることを決定することと、
前記プログラムコードを実行するための使用に向けて、前記コンテナを選択するステップと、
をさらに含む、条項１２に記載のコンピュータ実装方法。
【０１０４】
１７．  前記１つまたは複数のセキュリティパラメータに従って、前記選択された仮想マシンインスタンスにコンテナを取得することは、
前記プログラムコードがロードされ、かつ前記１つまたは複数のセキュリティパラメータに従って構成されているコンテナを、前記仮想マシンインスタンスが含んでいないことを決定することと、
前記１つまたは複数のセキュリティパラメータに従ってコンテナを作成し、前記特定のユーザに関連付けられる前記プログラムコードを、前記コンテナ上に電子データストアからロードさせることと、
をさらに含む、条項１２に記載のコンピュータ実装方法。
【０１０５】
１８．  コンピュータ実行可能命令を記憶したコンピュータ可読、非一時的ストレージ媒体であって、前記コンピュータ実行可能命令は、１つまたは複数のコンピューティングデバイスによって実行されるとき、
仮想計算システムにおいてプログラムコードを実行するための要求に基づいて、前記プログラムコードを実行させることになる１つまたは複数のセキュリティパラメータを指定するユーザ指定のセキュリティポリシを決定することであって、前記プログラムコードが、特定のユーザに関連付けられる、前記決定することと、
１つまたは複数の物理コンピューティングデバイスにおいて維持される複数の仮想マシンインスタンスから、前記プログラムコードを実行するのに使用されることになる仮想マシンインスタンスを選択することと、
前記１つまたは複数のセキュリティパラメータに従って、前記選択された仮想マシンインスタンスにコンテナを作成することと、
前記特定のユーザに関連付けられる前記プログラムコードを、前記コンテナ上に電子データストアからロードさせ、前記ユーザ指定のセキュリティポリシに少なくとも一部基づいて、前記コンテナにおいて実行させることと、
を含む動作を実行するように前記１つまたは複数のコンピューティングデバイスを構成する、
前記コンピュータ可読、非一時的ストレージ媒体。
【０１０６】
１９．  前記１つまたは複数のセキュリティパラメータが、処理持続時間限度、メモリ限度、伝送制御プロトコル（「ＴＣＰ」）ソケット接続を可能にするパラメータ、前記コンテナへのインバウンドもしくはアウトバウンドのネットワーク接続を可能にするパラメータ、前記コンテナが補助サービスと通信できるようにするパラメータ、前記コンテナが前記選択された仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、前記コンテナが第２の仮想マシンインスタンスにおいて含まれている第２のコンテナと通信できるようにするパラメータ、及び前記コンテナが前記プログラムコードとの関連で実行することを許可されるアクセス制限機能のリスト、のうちの１つまたは複数を含む、条項１８に記載のコンピュータ可読、非一時的ストレージ媒体。
【０１０７】
２０．  前記セキュリティポリシが、少なくとも、信頼される認証情報を使用して実行されることになる前記プログラムコードの第１の部分、及び前記信頼される認証情報を使用せずに実行されることになる前記プログラムコードの第２の部分を示す構成データをさらに含む、条項１８に記載のコンピュータ可読、非一時的ストレージ媒体。
【０１０８】
２１．  前記セキュリティポリシが、少なくとも、信頼される認証情報を使用して実行されることになる前記プログラムコードの第１の部分、及び前記信頼される認証情報を使用せずに実行されることになる前記プログラムコードの第２の部分を示す構成データをさらに含む、条項１８に記載のコンピュータ可読、非一時的ストレージ媒体。
【０１０９】
２２．  前記動作が、
１人または複数人のユーザに、現在、割り当てられている仮想マシンインスタンスのアクティブプールを維持することであって、前記アクティブプールの中の各仮想マシンインスタンスは、１つまたは複数のソフトウェアコンポーネントがロードされている、前記維持することと、
前記アクティブプールから前記仮想マシンインスタンスを選択することであって、前記仮想マシンインスタンスが、前記ユーザ指定のセキュリティポリシに従って構成されている、前記選択することと、
をさらに含む、条項２１に記載のコンピュータ可読、非一時的ストレージ媒体。
【図１】
0006463494.tif 000002
【図２】
0006463494.tif 000003
【図３】
0006463494.tif 000004
【図４】
0006463494.tif 000005
【図５】
0006463494.tif 000006
【図６】
0006463494.tif 000007
【図７】
0006463494.tif 000008