(57)【特許請求の範囲】
【請求項１】
仮想計算システム上でプログラム・コードを実行する要求のためのイベント・メッセージを提供するシステムであって、
少なくともユーザのプログラム・コードに関する情報を取り扱うプログラム的イベントを記憶するように構成された電子データ記憶と、
特定のコンピュータ実行可能命令を実行する１つ以上のハードウェア・コンピューティング・デバイスを含むイベント・トリガリング・コンピューティング・システムと、を含み、
前記イベント・トリガリング・コンピューティング・システムが少なくとも、
前記イベント・トリガリング・コンピューティング・システム上でイベントを第１の時点に検出し、
前記電子データ記憶の前記ユーザのプログラム・コードに関する情報を取り扱うプログラム的イベントに基づいて、前記プログラム的イベントが仮想計算システム上の前記ユーザのプログラム・コードの実行をトリガするように指示されているかを判定し、
前記イベントが前記ユーザの前記プログラム・コードの実行をトリガするように指定されていると判定することに応答して、前記データ記憶からアクセスされる前記ユーザのプログラム・コードに関する情報を取り扱う前記プログラム的イベントに基づいて、イベント・メッセージを生成し、
前記イベント・メッセージは、前記仮想計算システム上のインスタンス上のコンテナ上の前記ユーザの代わりに前記プログラム・コードを実行するために使用可能なスキーマにおいて編成された、ユーザ・アカウント識別子並びにプログラム的情報を少なくとも含み、前記プログラム的情報は、少なくとも（１）前記検出されたイベントに応答して前記実行されるプログラム・コードの関数、及び（２）前記プログラム・コードの実行のために使用される１つ以上のパラメータの少なくとも一方を含み、
前記仮想計算システムは、前記第１の時点との間の差が所定の継続時間よりも短い第２の時点に前記プログラム・コードの実行を開始する、システム。
【請求項２】
前記イベント・トリガリング・コンピューティング・システムがリモート・ストレージ・システムであり、前記イベント・メッセージが前記リモート・ストレージ・システムにアップロードされるデータ・ファイルに応答して生成される、請求項１に記載の前記システム。
【請求項３】
前記イベント・トリガリング・コンピューティング・システムがデータベース・システムであり、前記イベント・メッセージが前記データベース・システムにおいてアップデートされるデータベース・テーブルに応答して生成される、請求項１に記載の前記システム。
【請求項４】
前記所定の継続時間が１００ｍｓである、請求項１から請求項３のいずれか一項に記載の前記システム。
【請求項５】
特定のコンピュータ実行可能命令を実行する１つ以上のハードウェア・コンピューティング・デバイスを含む補助コンピューティング・システムであって、少なくとも、
仮想計算システム上のユーザのプログラム・コードの実行をトリガするように指定されたイベントを補助コンピューティング・システムによって第１の時点に検出し、
前記イベントの検出に応答して、電子データ記憶からアクセスされる前記ユーザの前記プログラム・コードに関する情報を取り扱うプログラム的イベントに基づいて、イベント・メッセージを生成し、
前記イベント・メッセージは、（１）ユーザに関連するユーザ・アカウント識別子、（２）前記実行されるプログラム・コードの関数及び（３）前記関数に対して入力される１つ以上の入力パラメータの少なくとも１つを含み、
前記仮想計算システムは、前記第１の時点と第２の時点との間の差が所定の継続時間より短い前記第２の時点に前記プログラム・コードを開始する、システム。
【請求項６】
前記補助コンピューティング・システムがリモート・ストレージ・システムであり、前記検出されたイベントが前記リモート・ストレージ・システムにアップロードされるデータ・ファイルである、請求項５に記載の前記システム。
【請求項７】
前記補助コンピューティング・システムがデータベース・システムであり、前記検出されたイベントが前記データベース内のデータベース・テーブル更新操作である、請求項５に記載の前記システム。
【請求項８】
前記補助コンピューティング・システムが前記仮想計算システムから分離して個別のサード・パーティ・コンピューティング・システムである、請求項５に記載の前記システム。
【請求項９】
前記イベント・メッセージが、前記補助コンピューティング・システム及び前記仮想計算システムの両方によって使用される共有スキーマに従ってフォーマットされる、請求項５に記載の前記システム。
【請求項１０】
前記共有スキーマがリモート・プロシージャ・コールの形式である、請求項９に記載の前記システム。
【請求項１１】
前記イベント・メッセージが、少なくとも（１）オペレーティング・システムであって、前記プログラム・コードがその上で実行されるべき前記オペレーティング・システム、及び（２）前記プログラム・コードが書かれているプログラム言語、のインジケータを含む、請求項５から請求項１０のいずれか一項に記載の前記システム。
【請求項１２】
イベント・トリガリング・サービス上の仮想計算システム上のユーザのプログラム・コードの実行をトリガするように指示する、第１の時点に生じるイベントを検出し、
前記イベントの検出に応答して、電子データ記憶からアクセスされる前記ユーザの前記プログラム・コードに関する情報を取り扱うプログラム的イベントにに基づいて、（１）ユーザに関連するユーザ・アカウント識別子及び（２）前記仮想計算システム上のプログラム・コードの実行のために使用する１つ以上のパラメータの少なくとも１つを含む、イベント・メッセージを生成し、
前記イベント・メッセージを前記仮想計算システムに提供する、ことを含み、
前記仮想計算システムが、前記第１の時点との間の差が所定の継続時間よりも短い第２の時点に前記プログラム・コードの実行を開始する
コンピュータによる実施方法。
【請求項１３】
前記イベント・トリガリング・サービスが、前記仮想計算システムから分離した個別のサード・パーティ・コンピューティング・システムによって提供される、請求項１２に記載の前記コンピュータによる実施方法。
【請求項１４】
前記イベント・メッセージが、前記仮想計算システムからの要求に応答して前記仮想計算システムに直接提供される、請求項１２に記載の前記コンピュータによる実施方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願の出願人は、２０１４年９月３０日に、以下の米国特許出願を同時に提出している。
代理人整理番号            名称
ＳＥＡＺＮ，９８２Ａ      ＭＥＳＳＡＧＥ−ＢＡＳＥＤ
ＣＯＭＰＵＴＡＴＩＯＮ  ＲＥＱＵＥＳＴ
ＳＣＨＥＤＵＬＩＮＧ
ＳＥＡＺＮ．９８３Ａ      ＬＯＷ  ＬＡＴＥＮＣＹ
ＣＯＭＰＵＴＡＴＩＯＮＡＬ
ＣＡＰＡＣＩＴＹ  ＰＲＯＶＩＳＩＯＮＩＮＧ
ＳＥＡＺＮ．９８４Ａ      ＡＵＴＯＭＡＴＩＣ  ＭＡＮＡＧＥＭＥＮＴ
ＯＦ  ＬＯＷ  ＬＡＴＥＮＣＹ
ＣＯＭＰＵＴＡＴＩＯＮＡＬ
ＣＡＰＡＣＩＴＹ
ＳＥＡＺＮ．９８９Ａ      ＴＨＲＥＡＤＩＮＧ  ＡＳ  Ａ  ＳＥＲＶＩＣＥ
ＳＥＡＺＮ，９９１Ａ      ＰＲＯＣＥＳＳＩＮＧ  ＥＶＥＮＴ
ＭＥＳＳＡＧＥＳ  ＦＯＲ  ＵＳＥＲ
ＲＥＱＵＥＳＴＳ  ＴＯ  ＥＸＥＣＵＴＥ
ＰＲＯＧＲＡＭ  ＣＯＤＥ
ＳＥＡＺＮ．９９７Ａ      ＤＹＮＡＭＩＣ  ＣＯＤＥ
ＤＥＰＬＯＹＭＥＮＴ  ＡＮＤ
ＶＥＲＳＩＯＮＩＮＧ
【０００２】
上記に参照された出願の開示は、参照によりその全体が本明細書に組み込まれる。
【背景技術】
【０００３】
一般的に述べれば、コンピューティング・デバイスは、データを交換するために、通信ネットワーク、または一連の通信ネットワークを利用する。企業や組織は、サード・パーティに対して運用をサポートしたりサービスを提供するために、数多くのコンピューティング・デバイスを相互接続するコンピュータ・ネットワークを運営している。コンピューティング・システムは、単一の地理的位置に配置することができ、または複数の分離した地理的位置に配置することができる（例えば、私設または公衆通信ネットワークを介して相互接続する）。具体的には、本明細書では一般に「データセンター」と呼ばれるデータセンターまたはデータ処理センターは、データセンターのユーザにコンピューティング・リソースを提供するための多数の相互接続されたコンピューティング・システムを含むことができる。データセンターは、組織のために運営される私設のデータセンター、または一般の人々のため、もしくはその利益のために運営される公的データセンターであってもよい。
【０００４】
データセンター・リソースの利用の増加を促進するために、仮想化技術は、単一の物理コンピューティング・デバイスが、データセンターのユーザに対して独立したコンピューティング・デバイスとして見え、そして動作する、仮想マシンの１つ以上のインスタンスをホストすることを可能にし得る。仮想化により、単一の物理コンピューティング・デバイスは、仮想マシンを動的に作成、維持、削除、または管理することができる。同様にユーザは、単一のコンピューティング・デバイスやネットワーク化されたコンピューティング・デバイスの構成などを含めて、データセンターからのコンピュータ・リソースを要求し、数を変えながら仮想マシン・リソースの提供を受けることができる。
【発明の概要】
【課題を解決するための手段】
【０００５】
いくつかのシナリオでは、仮想マシン・インスタンスは、特定の機能性を提供するために多くの仮想マシン・インスタンス・タイプに従って構成することができる。例えば、様々なコンピューティング・デバイスは、コンピューティング・デバイスが異なる所望の機能性を提供することを可能にするため、またはより効率的に同様の機能性を提供するために、オペレーティング・システムまたはオペレーティング・システム構成、仮想化ハードウェア・リソース及びソフトウェア・アプリケーションの異なる組み合わせに関連付けられ得る。これらの仮想マシン・インスタンス・タイプ構成は、しばしば、仮想マシンが一度起動されると実行されるソフトウェア（例えば、構成及びデータ・ファイルを共に備えるＯＳ及びアプリケーションなど）を含む静的データを含むデバイス・イメージ内に含まれる。デバイス・イメージは、通常、インスタンスを作成または初期化するために使用されるディスクに記憶される。従って、コンピューティング・デバイスは、所望のソフトウェア構成を実装するためにデバイス・イメージを処理することができる。
【０００６】
本開示の前述の態様及び付随する多くの利点は、添付の図面と併せて以下の詳細な説明を参照することにより、より良く理解されるようになるに従って、より容易に理解されるであろう。
【図面の簡単な説明】
【０００７】
【図１】仮想計算システムにおいてプログラム・コードを実行するためのユーザ要求に対するイベント・メッセージを処理するための例示的な環境を示すブロック図である。
【図２】プログラム・コードを実行するためのユーザ要求に対するイベント・メッセージを処理する、仮想計算システムのフロントエンドを提供するコンピューティング・デバイスの一般的なアーキテクチャを示す図である。
【図３】例示的な一態様による、仮想計算システムのフロントエンドと通信する補助システムによって実施される、イベント通知及びメッセージ生成ルーチンを説明する流れ図である。
【図４】別の例示的な態様による、仮想計算システムのフロントエンドによって実施されるイベント・メッセージ処理ルーチンを説明する流れ図である。
【発明を実施するための形態】
【０００８】
企業や組織は、コンピューティング操作（例えば、スレッド、プログラム、ソフトウェア、ルーチン、サブルーチン、プロセスなどを含むコードの実行）を行うために、もはや独自のデータセンターを取得し管理する必要はない。クラウド・コンピューティングの出現により、従来はハードウェア・コンピューティング・デバイスが提供していたストレージ・スペースとコンピューティング・パワーを、今やインターネット上で数分で取得及び設定できる。従って、開発者は、物理マシンの取得の心配をすることなく、所望の量のコンピューティング・リソースを迅速に購入できる。そのようなコンピューティング・リソースは、通常、仮想コンピューティング・リソースまたは仮想マシン・インスタンスの形態で購入される。これらの仮想マシンのインスタンスは、それぞれのオペレーティング・システムや他のソフトウェア・コンポーネントを使用して物理コンピューティング・デバイス上でホストされるものであり、物理コンピュータと同じ方法で使用できる。
【０００９】
しかし、仮想コンピューティング・リソースを購入しても、開発者は相変わらず、購入する仮想マシン・インスタンスの数とタイプ、及びそれらを保持する期間を決定する必要がある。例えば、仮想マシン・インスタンスを使用するコストは、タイプ及び賃貸時間数によって異なる場合がある。それに加えて、仮想マシンをレンタルできる最小時間は、通常、数時間のオーダーである。さらに、開発者は、仮想マシンにインストールするハードウェア及びソフトウェア・リソース（例えば、オペレーティング・システムのタイプ及び言語ランタイムなど）を指定しなければならない。開発者が持っているその他の懸念として含まれるのが、過度の利用率（例えば、コンピューティング・リソースの獲得が少なすぎて性能問題で苦労）、低い利用率（例えば、コードの実行に必要以上に多くのコンピューティング・リソースを獲得し、そのために過払い）、トラフィックの変化の予測（例えば、スケール・アップまたはダウン時期を知るため）及び、ユーザが望むのは秒あるいはミリ秒のオーダーのコンピューティング能力でさえあり得るのに、３〜１０分またはそれ以上かかる可能性のある、インスタンスと言語ランタイム立ち上げの遅延である。従って、サービス・プロバイダによって提供される仮想マシン・インスタンスをユーザが利用できるようにする改良された方法が望まれる。
【００１０】
本開示の態様によれば、ユーザ要求が受信されると直ちに使用準備が整えられている予め初期化された仮想マシン・インスタンスのプールを維持することによって、ユーザ・コードを実行することに関連する（例えば、インスタンス及び言語ランタイムの起動時間といった）遅延（レイテンシと呼ばれることもある）を大幅に短縮することができる。
【００１１】
一般的に説明すると、本開示の態様は、仮想マシン・インスタンス及びそこに作成されるコンテナの管理に関する。具体的には、仮想計算システムにおける仮想マシン・インスタンスの管理を容易にするシステム及び方法が開示される。仮想計算システムは、１つ以上のソフトウェア・コンポーネント（例えば、オペレーティング・システム、言語ランタイム、ライブラリなど）がロードされた仮想マシン・インスタンスのプールを維持する。プール内の仮想マシン・インスタンスは、プログラム・コードを実行するためのユーザの要求に対応するように指定することができる。プログラム・コードは、仮想マシン・インスタンス上に作成された分離したコンテナで実行できる。プール内の仮想マシン・インスタンスは、要求が受信される時までに既に起動され、特定のオペレーティング・システム及び言語ランタイムがロードされているため、要求を処理できる計算能力を（例えば、仮想マシン・インスタンス上で作成された１つ以上のコンテナにおいてユーザ・コードを実行することによって）見つけることに関連する遅延が、大幅に削減される。
【００１２】
特定の実施形態では、メッセージ・キュー、メッセージ・バス、または任意の他のメッセージ中間サービスが提供されて、第１のプログラム的環境（例えば、補助サービス）で生成されたイベント・メッセージを、本明細書に記載の仮想環境によって提供されるプログラム的環境システムへ伝送または通信するのを容易にする。第１のプログラム的環境から仮想計算システムへのトリガされたイベントの伝播及び伝送をさらに容易にするために、トリガされたイベント、トリガされたイベントに応答してユーザ・コードを実行する要求に関連するユーザ、及び、仮想計算システムが、イベント・メッセージを、仮想計算システムによるさらなる処理のためのユーザ要求に変換することを可能にするプログラム的情報を記述する情報、を含むようにイベント・メッセージを生成することができる。イベント・メッセージ及び／またはそこに含まれるプログラム的情報は、補助サービスにおけるイベント・メッセージの作成／生成、及び仮想計算システムにおけるイベント・メッセージの変換／処理の両方を容易にするための、スキーマ、コード・モデル、またはアプリケーション・プログラミング・インタフェース（「ＡＰＩ」）に従って構築することができる。
【００１３】
別の態様では、仮想計算システムは、１つ以上の物理コンピューティング・デバイス上に仮想マシン・インスタンスのプールを維持することができ、そこでは各仮想マシン・インスタンスには１つ以上のソフトウェア・コンポーネントがロードされる。仮想計算システムが、ユーザのプログラム・コードを実行するための１つ以上のコンピューティング制約を指定するユーザのプログラム・コードを実行する要求を受信すると、仮想計算システムは、その要求によって指定された１つ以上のコンピューティング制約に基づいてユーザのプログラム・コードを実行させるための仮想マシン・インスタンスを選択し、ユーザのプログラム・コードが、選択された仮想マシン・インスタンス上で実行されるようにすることができる。
【００１４】
本明細書に記載されるシステム及び方法によって提供される１つの利点は、補助サービスでトリガされるイベントと、それに対応する、様々な仮想マシン・インスタンス上のユーザ・コードの実行との間の、暗黙的で自動的なレート・マッチング及びスケーリングである。そのため、仮想計算システムは、イベントがまれに（例えば、１日に１回）トリガされるか、またはより大きい規模（例えば、毎秒数百回または数千回）であっても、オン・デマンドでイベントに応答することができる。
【００１５】
次に、本開示の特定の実施形態及び例示的な用途を、図面を参照して説明する。これらの実施形態及び応用例は、本開示を例示するものであり、本開示を限定するものではない。
【００１６】
図１を参照して、仮想環境１００の一実施形態を説明するブロック図を説明する。図１に示す実施例は、ユーザ・コンピューティング・デバイス１０２のユーザ（例えば、開発者など）が、仮想計算システム１１０によって提供される仮想コンピューティング・リソースを使用して様々なプログラム・コードを実行することができる、仮想環境１００を含む。
【００１７】
説明として、デスクトップ・コンピュータ、ラップトップ、及び携帯電話を含む、仮想計算システム１１０と通信する様々な例示的ユーザ・コンピューティング・デバイス１０２が示される。一般に、ユーザ・コンピューティング・デバイス１０２は、デスクトップ、ラップトップ、携帯電話（またはスマートフォン）、タブレット、キオスク、無線デバイス、及び他の電子デバイスなどの任意のコンピューティング・デバイスとすることができる。さらに、ユーザ・コンピューティング・デバイス１０２は、例えば異なるウェブ・サービスが互いにプログラム的に通信して本明細書に記載された１つ以上の技術を実行する、同じまたは異なるデータセンター上で動作するウェブ・サービスを含むことができる。さらに、ユーザ・コンピューティング・デバイス１０２は、インターネット・アプライアンス及び接続デバイスなどのモノのインターネット（ＩｏＴ）デバイスを含むことができる。仮想計算システム１１０は、ユーザ・コンピューティング・デバイス１０２に、ユーザ・コードを生成及びアップロードし、ユーザを呼び出し（例えば、仮想計算システム１１０上でユーザ・コードを実行する要求を提出し）、イベント・ベースのジョブまたは定期的ジョブをスケジューリングし、ユーザ・コードを追跡し、及び／またはそれらの要求及び／またはユーザ・コードに関する他のロギングまたは監視情報を見るための、１つ以上のユーザ・インタフェース、コマンド・ライン・インタフェース（ＣＬＩ）、アプリケーション・プログラミング・インタフェース（ＡＰＩ）及び／または他のプログラム的インタフェースを提供することができる。１つ以上の実施形態は、本明細書ではユーザ・インタフェースを使用するものとして説明することができるが、そのような実施形態は、追加的または代替的に、任意のＣＬＩ、ＡＰＩ、または他のプログラム的インタフェースを使用できることが理解されるべきである。
【００１８】
ユーザ・コンピューティング・デバイス１０２は、ネットワーク１０４を介して仮想計算システム１１０にアクセスする。ネットワーク１０４は、任意の有線ネットワーク、無線ネットワーク、またはそれらの組み合わせであってもよい。さらに、ネットワーク１０４は、パーソナル・エリア・ネットワーク、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、（例えば、ラジオまたはテレビ用の）無線放送ネットワーク、ケーブル・ネットワーク、衛星ネットワーク、携帯電話ネットワーク、またはそれらの組み合わせであってもよい。例えば、ネットワーク１０４は、おそらくはインターネットなどの様々な別個の当事者によって運営される、公衆アクセス可能なリンクされたネットワークのネットワークであってもよい。いくつかの実施形態では、ネットワーク１０４は、企業イントラネットまたは大学イントラネットなどのプライベートまたはセミ・プライベート・ネットワークであってもよい。ネットワーク１０４は、Ｇｌｏｂａｌ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｍｏｂｉｌｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ（ＧＳＭ）ネットワーク、符号分割多元接続（ＣＤＭＡ）ネットワーク、Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ（ＬＴＥ）ネットワーク、または任意の他のタイプの無線ネットワークなどの１つ以上の無線ネットワークを含むことができる。ネットワーク１０４は、インターネットまたは他の前述のタイプのネットワークのいずれかを介して通信するためのプロトコル及びコンポーネントを使用することができる。例えば、ネットワーク１０４によって使用されるプロトコルは、Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ（ＨＴＴＰ）、ＨＴＴＰ  Ｓｅｃｕｒｅ（ＨＴＴＰＳ）、Ｍｅｓｓａｇｅ  Ｑｕｅｕｅ  Ｔｅｌｅｍｅｔｒｙ  Ｔｒａｎｓｐｏｒｔ（ＭＱＴＴ）、Ｃｏｎｓｔｒａｉｎｅｄ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｔｏｃｏｌ（ＣｏＡＰ）及び同様のものを含むことができる。インターネットまたは他の前述のタイプの通信ネットワークのいずれかを介して通信するためのプロトコル及びコンポーネントは、当業者には周知であり、従って、本明細書では詳細には説明しない。
【００１９】
仮想計算システム１１０は、１つ以上のコンピュータ・ネットワークを使用して相互接続された複数のコンピュータ・システムを含む分散コンピューティング環境で動作するものとして図１に示す。仮想計算システム１１０はまた、図１に説明されているよりも少ないまたはより多い数のデバイスを有するコンピューティング環境内で動作することもできる。従って、図１の仮想計算システム１１０の描写は、例示的であり、本開示を限定するものではないと考えるべきである。例えば、仮想計算システム１１０またはその様々なコンポーネントは、本明細書で説明するプロセスの少なくとも一部を実施するために、様々なウェブ・サービス・コンポーネント、ホスト型または「クラウド」コンピューティング環境、及び／またはピア・ツー・ピア・ネットワーク構成を実装することができる。
【００２０】
さらに、仮想計算システム１１０は、ハードウェア及び／またはソフトウェアで実施されてもよく、例えば、本明細書で説明される様々な機能を実行するためのコンピュータ実行可能命令を実行するように構成された物理コンピュータ・ハードウェア上に実装された１つ以上の物理または仮想サーバを含んでも良い。１つ以上のサーバは、例えば、１つ以上のデータセンター内に、地理的に分散されていても地理的に同じ場所に配置されていてもよい。
【００２１】
図１に説明する環境では、仮想環境１００は、フロントエンド１２０、ウォーミング・プール・マネージャ１３０、及びワーカ・マネージャ１４０を含む仮想計算システム１１０を含む。図示の例では、仮想マシン・インスタンス（「インスタンス」）１５２、１５４がウォーミング・プール・マネージャ１３０によって管理されるウォーミング・プール１３０Ａ内に示され、またインスタンス１５６、１５８は、ワーカ・マネージャ１４０によって管理されるアクティブ・プール１４０Ａ内に示される。仮想計算システム１１０内の様々なコンポーネントの説明は本質的に論理的であり、１つ以上のコンポーネントが、単一のコンピューティング・デバイスまたは複数のコンピューティング・デバイスによって実施され得る。例えば、インスタンス１５２、１５４、１５６、１５８は、異なる様々な地理的領域内の１つ以上の物理コンピューティング・デバイス上に実装することができる。同様に、フロントエンド１２０、ウォーミング・プール・マネージャ１３０、及びワーカ・マネージャ１４０の各々は、複数の物理コンピューティング・デバイスにまたがって実装することができる。あるいは、フロントエンド１２０、ウォーミング・プール・マネージャ１３０、及びワーカ・マネージャ１４０のうちの１つ以上は、単一の物理コンピューティング・デバイス上に実装することができる。いくつかの実施形態では、仮想計算システム１１０は、複数のフロントエンド、複数のウォーミング・プール・マネージャ、及び／または複数のワーカ・マネージャを含むことができる。図１の例では、４つの仮想マシン・インスタンスが示されているが、本明細書に記載される実施形態はそのように限定されるものではなく、当業者は、仮想計算システム１１０が、任意の数の物理コンピューティング・デバイスを使用して実装された任意の数の仮想マシン・インスタンスを含むことができることを理解するであろう。同様に、単一のウォーミング・プール及び単一のアクティブ・プールが図１の例に示されているが、本明細書に記載された実施形態はそのように限定されるものではなく、当業者は、仮想計算システム１１０が任意の数のウォーミング・プール及びアクティブ・プールを備えることができることを理解するであろう。
【００２２】
図１の実施例では、仮想計算システム１１０はネットワーク１０４に接続されているように説明される。いくつかの実施形態では、仮想計算システム１１０内の任意のコンポーネントは、ネットワーク１０４を介して、仮想環境１００の他のコンポーネント（例えば、監視／ロギング／課金サービス１０７、ストレージ・サービス１０８、インスタンス・プロビジョニング・サービス１０９、メッセージ・キュー・サービス１０５、及び／または仮想計算システム１１０と通信することができる他のサービスを含み得る、ユーザ・コンピューティング・デバイス１０２及び補助サービス１０６）と通信することができる。他の実施形態では、仮想計算システム１１０のすべてのコンポーネントが仮想環境１００の他のコンポーネントと通信することができるわけではない。実施例では、フロントエンド１２０のみがネットワーク１０４に接続され、仮想計算システム１１０の他のコンポーネントは、フロントエンド１２０を介して仮想環境１００Ａの他のコンポーネントと通信することができる。いくつかの実施形態では、任意の補助サービス１０６は、本明細書でより詳細に説明するように、補助サービスのユーザによって指定されたイベントを注意深く見守り、仮想計算システム１１０による処理のためのイベント・メッセージの生成をトリガするために、イベント・トリガリング・サービス１０６Ａとして動作するように構成することができる。従って、例えば、ストレージ・サービス１０８は、ストレージ・サービス１０８上で発生するイベントに応答して仮想計算システム１１０上でユーザ・コードを実行する能力を提供するために、イベント・トリガリング・サービス１０６Ａとして動作するように構成することができる。
【００２３】
一実施形態では、１つ以上の補助サービス１０６は、仮想計算システム１１０上のユーザ・コードの実行をトリガするためにイベントに対してポーリングまたはクエリされるように登録または構成することができる。そのような登録または構成は、ユーザ・コンピューティング・デバイス１０２に提供される１つ以上のユーザ・インタフェースを介して提供したり有効にすることができる。例えば、ユーザ・インタフェースは、イベント・トリガリング・サービス１０６Ａ上のイベントがイベント・メッセージの生成をトリガするように、またはイベント・トリガリング・サービス１０６Ａが、中間ポーリング・システムなどによるイベントに対して定期的にポーリングされるか、またはクエリされるように、ユーザが補助サービス１０６をイベント・トリガリング・サービス１０６Ａとして選択または指定するオプションを提供することができる。
【００２４】
一実施形態では、イベント・トリガリング・サービス１０６Ａは、イベントまたはイベント・タイプを、仮想計算システム１１０上で実行される特定のプログラム・コードに関連付けるように構成されてもよい（すなわち、イベント・トリガリング・サービス１０６Ａは、そのイベントを特定のプログラム・コードに関連付けるデータを記憶するか、またはそのデータにアクセスしてもよい）。別の実施形態では、イベント・トリガリング・サービス１０６Ａは、必ずしもイベントまたはイベント・タイプを仮想計算システム１１０上で実行される特定のプログラム・コードと関連付ける必要はないが、むしろイベント・トリガリング・サービス１０６Ａは、仮想計算システム１１０が、仮想計算システム１１０上で実行されるプログラム・コードに関連付けられていると解釈するように構成されているイベント・メッセージを生成してもよい（すなわち、仮想計算システム１１０は、イベントを特定のプログラム・コードに関連付けるデータを記憶するか、またはそのデータにアクセスしてもよい）。別の実施形態では、中間システムまたはサービスは、プログラム・コードを実行するためのイベント・メッセージの解釈及びルーティングを処理するように構成され、イベント・トリガリング・サービス１０６Ａ及び仮想計算システム１１０のいずれも、イベントとプログラム・コードの関連付けデータを記憶するかまたはそのデータにアクセスすることが出来ないようにしてもよい。例えば、イベント・トリガリング・サービス１０６Ａは、実行されるべき任意の特定のプログラム・コードに対して不可知論的なイベント・メッセージを生成することができ、イベント・メッセージは、イベント・メッセージ及び関連するメタデータを評価して、どのプログラム・コードを応答して実行するかを決定し、プログラム・コードを実行する対応する要求を開始する仮想計算システム１１０（または中間システム）に経路指定することができる。
【００２５】
上述したように、任意の補助サービス１０６は、イベント・トリガリング・サービス１０６Ａとして動作するように構成することができる。これらには、限定するものではないが、リモート・ストレージ・システム、データベース・システム、メッセージ・キュー・システム（例えば、仮想計算システム１１０によって提供されるメッセージ・キュー・サービス、仮想計算システム１１０とは分離したユーザまたはクライアントによって所有及び／または運用されるメッセージ・キュー・システムなど）、ウェブ・サービス、監査サービス、（例えば、仮想計算システムの健全性状態を監視するための）健全性監視サービス、ロギング・サービス、課金サービス、（例えば、仮想コンピューティング環境のライフサイクル及び／または所有権などを管理するための）リソース管理システム、などが含まれる。
【００２６】
ユーザは、仮想計算システム１１０を使用して、そこにあるユーザ・コードを実行することができる。例えば、ユーザは、ユーザが開発したウェブまたはモバイル・アプリケーションに関連するコードを実行することを望む場合がある。そのコードを実行する１つの方法は、インフラストラクチャをサービスとして提供し、ユーザのニーズに合わせて仮想マシン・インスタンスを構成し、構成された仮想マシン・インスタンスを使用してコードを実行するサービス・プロバイダから、仮想マシン・インスタンスを取得することである。あるいは、ユーザは、仮想計算システム１１０にコード実行要求を送信することができる。仮想計算システム１１０は、計算能力（例えば、以下にさらに詳細に記述するコンテナ、インスタンスなど）の取得及び構成を、コード実行要求に基づいて処理し、計算能力を使用してコードを実行することができる。仮想コンピューティング・システム１１０は、ボリュームに基づいて自動的にスケール・アップ及びスケール・ダウンすることができるので、ユーザは過度の使用（例えば、コンピューティング・リソースの獲得が少なすぎて性能問題となること）または使用不足（例えば、コードを実行するために必要以上に多くのコンピューティング・リソースを獲得し、従って過払いとなること）の心配をしなければならない、という負担から解放される。
【００２７】
フロントエンド１２０は、仮想計算システム１１０上でユーザ・コードを実行するために（時にはイベント・メッセージの形式である）すべての要求を受信して処理する。一実施形態では、フロントエンド１２０は、仮想計算システム１１０によって提供される他のすべてのサービスへのフロント・ドアの役割を果たす。フロントエンド１２０は要求を処理し、要求が適切に許可されていることを確認する。例えば、フロントエンド１２０は、要求に関連付けられたユーザが、要求で指定されたユーザ・コードにアクセスすることを許可されているかどうかを判定することができる。
【００２８】
本明細書で使用されるユーザ・コードは、特定のプログラム言語で書かれた任意のプログラム・コード（例えば、プログラム、ルーチン、サブルーチン、スレッドなど）を指していてもよい。本開示では、用語「コード」、「ユーザ・コード」及び「プログラム・コード」は、互換的なものとして使用される場合がある。そのようなユーザ・コードは、例えば、ユーザによって開発された特定のウェブ・アプリケーションまたはモバイル・アプリケーションに関連して、特定のタスクを達成するために実行されてもよい。例えば、ユーザ・コードはＪａｖａＳｃｒｉｐｔ（登録商標）（ｎｏｄｅ．ｊｓ）、Ｊａｖａ（登録商標）、Ｐｙｔｈｏｎ、及び／またはＲｕｂｙで記述することができる。要求は、ユーザ・コード（またはその位置）と、ユーザ・コードを実行するために使用される１つ以上の引数を含むことができる。例えば、ユーザは、ユーザ・コードを、そのユーザ・コードを実行する要求と共に提供することができる。別の例では、要求は、その名前またはその一意的なＩＤによって、以前にアップロードされたプログラム・コードを（例えば、コードをアップロードするためのＡＰＩを使用して）識別することができる。さらに別の例では、コードは要求に含まれるとともに、要求が仮想計算システム１１０によって受信される前に、別の場所（例えば、ストレージ・サービス１０８、または仮想計算システム１１０の内部のストレージ・システム）にアップロードされてもよい。仮想計算システム１１０は、要求が処理される時点でコードが利用可能である場所に基づいて、そのコード実行戦略を変更することができる。
【００２９】
フロントエンド１２０は、ユーザからのハイパーテキスト転送プロトコル・セキュア（ＨＴＴＰＳ）要求に応答して、そのようなユーザ・コードを実行する要求を受信することができる。また、ＨＴＴＰＳ要求に含まれる任意の情報（例えば、ヘッダ及びパラメータ）は、ユーザ・コードを実行するときに処理され、利用されてもよい。上述したように、コード実行要求を含むメッセージをフロントエンド１２０に転送するために、例えばＨＴＴＰ、ＭＱＴＴ、及びＣｏＡＰを含む他のプロトコルを使用することができる。フロントエンド１２０は、ユーザが自動要求生成をトリガするために登録したイベントのようなイベントが検出されたとき、そのようなユーザ・コードを実行する要求を受信することもできる。例えば、ユーザは、ユーザ・コードを補助サービス１０６に登録して、特定のイベントが発生する（例えば、新しいファイルがアップロードされる）ときにいつでも、ユーザ・コードを実行するための要求がフロントエンド１２０に送られる、ということを指定することによって、補助サービス１０６をイベント・トリガリング・サービス１０６Ａとして動作するように補助サービス１０６を構成することができる。あるいは、ユーザは、定期的ジョブ（例えば、２４時間毎にユーザ・コードを実行する）を登録していてもよい。そのような例では、定期的ジョブのためのスケジュールされた時間に到達すると、ユーザ・コードの実行要求がフロントエンド１２０に送信され得る。定期的またはスケジュールされたジョブは、この開示の技術を使用して、例えば、タイマ・サービスによって生成されたイベントとしてジョブをモデル化するために、実施することができる。例えば、タイマ・サービスは、ユーザ・コードを実行する時間であることを示すイベント・メッセージを生成することができ、仮想計算システム１１０は、タイマ・サービスを利用して仮想計算システム１１０にユーザ・コードを実行することを思い出させることによって、特定の時間にコードを実行する処理を実施することができる。さらに別の例では、フロントエンド１２０は着信コード実行要求のキューを含むか、またはそれにアクセスすることができ、ユーザのバッチ・ジョブが仮想計算システムの作業キューから除去されると、フロントエンド１２０はユーザ要求を処理することができる。さらに別の例では、要求は、仮想計算システム１１０内の別のコンポーネントまたは図１に図示されていない他のサーバまたはサービスから発生してもよい。
【００３０】
さらに別の例では、要求は、仮想計算システム１１０内の別のコンポーネントまたは図１に説明されていない他のサーバまたはサービスから発生してもよい。いくつかの実施形態では、ユーザ・コードを実行／起動する要求は、ユーザ・コンピューティング・デバイス１０２または補助サービス１０６に関連付けられたイベントに応答して生成されてもよい。例えば、エンドユーザが、ユーザ・コンピューティング・デバイスから、イベント・トリガリング・サービス１０６Ａとして動作するように構成された補助サービス（ストレージ・サービス１０８など）に新しいイメージをアップロードすることに応答して、イベント・トリガリング・サービス１０６Ａは、イメージのサムネイルを生成するためのコードを実行／起動する要求をトリガすることができる。コードは、アクティブ・プール１２０でホストされるか、またはストレージ・サービス１０８から仮想計算システム１１０にダウンロードされる。
【００３１】
上述した例のいずれにおいても、そして本開示全体を通じて、ユーザ・コードを実行する要求を表すイベント・メッセージは、メッセージ・キュー・サービス１０５によって最初に受信され、メッセージ・キューに提供されるか、または置かれる。メッセージ・キュー・サービス１０５は、補助サービス１０６のコンポーネントとして、または異なるコンポーネントとして実装することができる。特定の実施形態では、フロントエンド１２０は、定期的にメッセージ・キュー・サービス１０５をポーリングして、処理のためにイベント・メッセージを識別し、検索することができる。メッセージ・イベントは、ユーザ・コードを実行する要求の自動生成をトリガするためにユーザが登録したイベントが検出されたときに応答した形でなど、例えばメッセージ・キュー・サービス１０５によってメッセージ・キューに入れられる。場合によっては、そのようなイベントを検出し、イベント・メッセージの生成をトリガし、イベント・メッセージをメッセージ・キュー・サービス１０５に提供することが望ましく、またはより実用的であり得る。例えば、実施形態に応じて、メッセージ・キュー・サービス１０５は、特定のメッセージ・イベントがより高い優先度を受けるように、メッセージ・イベントの順序付けを可能にするように構成されてもよい。別の例では、メッセージ・キュー・サービス１０５は、データベース操作、バッチ処理に適した特定のタイプのデータなどの特定のタイプのプログラム的イベントの伝送を容易にするように、具体的にまたは特別に構成され得る。一実施形態では、メッセージ・キュー・サービス１０５は、メッセージのストリーミング及び／または順序付けられた伝送（例えば、断片化データのセットとして）を提供するように構成され得る。次に、フロントエンド１２０は、メッセージ・キュー・サービス１０５をポーリングし、仮想計算システム１１０によるさらなる処理のためにイベント・メッセージを検索することができる。
【００３２】
別の実施形態では、メッセージ・キュー・サービス１０５の代わりに、またはそれと組み合わせて、フロントエンド１２０は、イベント・トリガリング・サービス１０６Ａに直接クエリして、イベント・トリガリング・サービス１０６Ａによって提供されるＡＰＩの呼び出しなどのさらなる処理のためにイベント・メッセージを要求することができる。別の実施形態では、イベント・トリガリング・サービス１０６Ａは、１つ以上のＡＰＩ及び関数コールを介してフロントエンド１２０と直接的にインタフェースすることができる。例えば、イベントが検出され、イベント・メッセージが生成されると、イベント・トリガリング・サービス１０６Ａは、イベント・メッセージをフロントエンド１２０に直接提供するために、フロントエンド１２０によって提供されるＡＰＩを、必ずしもイベント・メッセージをメッセージ・キュー・サービス１０５に提供せずに呼び出すことができる。
【００３３】
ユーザ要求は、ユーザ・コードと共に使用される１つ以上のサード・パーティ・ライブラリ（ネイティブ・ライブラリを含む）を指定することができる。一実施形態では、ユーザ要求は、ユーザ・コード及び任意のライブラリ（及び／またはその記憶場所の識別）を含むパッケージ・ファイル（例えば、圧縮ファイル、ＺＩＰファイル、ＲＡＲファイルなど）を含む。いくつかの実施形態では、ユーザ要求は、実行されるプログラム・コード、プログラム・コードが書かれている言語、要求に関連付けられたユーザ、及び／またはプログラム・コードを実行するために予約されるコンピュータ・リソース（例えば、メモリなど）を示すメタデータを含む。例えば、プログラム・コードは、要求とともに提供されてもよく、ユーザによって前もってアップロードされてもよく、仮想計算システム１１０によって提供されてもよく（例えば、標準ルーチン）、及び／またはサード・パーティによって提供されてもよい。いくつかの実施形態では、そのようなリソース・レベルの制約（例えば、特定のユーザ・コードを実行するためにどれだけのメモリが割り当てられるか）は、特定のユーザ・コードに対して指定され、各ユーザ・コードの実行中には変化してはいけない。このような場合、仮想計算システム１１０は、それぞれの個々の要求が受信される前にそのようなリソース・レベルの制約にアクセスすることができ、個々の要求はそのようなリソース・レベルの制約を指定することはできない。いくつかの実施形態では、ユーザ要求は、要求がユーザ・コードを実行しなければならないどのような種類の許可であるかを示す許可データなどの、他の制約を指定してもよい。そのような許可データは、（例えば、私設ネットワーク上の）私的資源にアクセスするために仮想計算システム１１０によって使用されてもよい。
【００３４】
いくつかの実施形態では、ユーザ要求は、ユーザ要求を処理するために採用すべき動作を指定することができる。そのような実施形態では、ユーザ要求は、ユーザ要求に関連するユーザ・コードが実行される１つ以上の実行モードを可能にするためのインジケータを含むことができる。例えば、要求は、ユーザ・コードの実行に関連して生成され得るデバッグ及び／またはロギング出力がユーザに（例えば、コンソール・ユーザ・インタフェースを介して）戻して提供される、デバッグモードでユーザ・コードを実行すべきかどうかを示す、フラグまたはヘッダを含むことができる。このような例では、仮想計算システム１１０は、要求を検査してフラグまたはヘッダを探すことができ、もしそれが存在するなら、仮想計算システム１１０は、ユーザ・コードが実行されるコンテナの動作（例えば、ファシリティのロギングをすること）を修正し、出力データがユーザに返されるようにすることができる。いくつかの実施形態では、動作／モード・インジケータは、仮想計算システム１１０によってユーザに提供されるユーザ・インタフェースによって要求に追加される。ソース・コード・プロファイリング、リモート・デバッギングなどの他の機能も、要求に示された指示に基づいて有効または無効にされる。
【００３５】
いくつかの実施形態では、仮想計算システム１１０は、複数のフロントエンド１２０を含むことができる。そのような実施形態では、例えば、ラウンド・ロビン方式で、複数のフロントエンド１２０に着信要求及び／またはイベント・メッセージを配信するために、ロード・バランサが提供されてもよい。
【００３６】
ウォーミング・プール・マネージャ１３０は、仮想計算システム１１０が仮想計算システム１１０上でユーザ・コードを実行する要求を受信したときに、その仮想マシン・インスタンスがワーカ・マネージャ１４０によって使用される準備ができていることを保証する。図１に説明する例では、ウォーミング・プール・マネージャ１３０は、着信ユーザ・コード実行要求を処理するために使用され得る事前に初期化され、事前構成された仮想マシン・インスタンスのグループ（プールと呼ばれることもある）である、ウォーミング・プール１３０Ａを管理する。いくつかの実施形態では、ウォーミング・プール・マネージャ１３０は、仮想計算機システムを仮想計算システム１１０内の１つ以上の物理コンピューティング・マシン上で起動させ、仮想マシン・インスタンス上で実行されるコード実行要求を受信する前にウォーミング・プール１３０Ａに追加されるようにする。他の実施形態では、ウォーミング・プール・マネージャ１３０は、補助仮想マシン・インスタンス・サービス（例えば、インスタンス・プロビジョニング・サービス１０９）と通信して、新しいインスタンスを作成してウォーミング・プール１３０Ａに追加する。例えば、ウォーミング・プール・マネージャ１３０は、ウォーミング・プール１３０Ａ内の利用可能な容量に基づいて、追加のインスタンスをウォーミング・プール１３０Ａに追加させて、着信要求を処理することができる。いくつかの実施形態では、ウォーミング・プール・マネージャ１３０は、フロントエンド１２０によって受信されたコード実行要求にサービスを提供するために使用され得る計算能力を取得及び維持するために、仮想計算システム１１０内の物理コンピューティング・デバイス及び１つ以上の仮想マシン・インスタンス・サービスの両方を利用し得る。いくつかの実施形態では、仮想計算システム１１０は、ウォーミング・プール１３０Ａ内の利用可能な能力を制御（例えば、増加または減少）するための１つ以上の論理ノブまたはスイッチを備えることができる。例えば、システム管理者は、そのようなノブまたはスイッチを使用して、ピーク時にウォーミング・プール１３０Ａ内の利用可能な能力（例えば、プレ・ブートされたインスタンスの数）を増加させることができる。いくつかの実施形態では、ウォーミング・プール１３０Ａ内の仮想マシン・インスタンスは、ユーザのコードを実行する特定のユーザ要求から独立した所定のセットの構成に基づいて構成することができる。所定のセットの構成は、ユーザ・コードを実行するための様々なタイプの仮想マシン・インスタンスに対応することができる。ウォーミング・プール・マネージャ１３０は、現在または以前のユーザ・コード実行に関する１つ以上のメトリックに基づいて、ウォーミング・プール１３０Ａ内の仮想マシン・インスタンスのタイプ及び数を最適化することができる。
【００３７】
図１に示すように、インスタンスは、オペレーティング・システム（ＯＳ）及び／またはその上にロードされた言語ランタイムを有することができる。例えば、ウォーミング・プール・マネージャ１３０によって管理されるウォーミング・プール１３０Ａは、インスタンス１５２、１５４を含む。インスタンス１５２は、ＯＳ１５２Ａ及びランタイム１５２Ｂを含む。インスタンス１５４は、ＯＳ１５４Ａを含む。いくつかの実施形態では、ウォーミング・プール１３０Ａ内のインスタンスは、以下でより詳細に説明するコンテナ（オペレーティング・システムのコピー、ランタイム、ユーザ・コードなどをさらに含むことができる）も含むことができる。インスタンス１５２が１つのランタイムを含むように図１に示されているが、他の実施形態では、図１に示されるインスタンスは、２つ以上のランタイムを含むことができ、その各々は、異なるユーザ・コードを実行するために使用され得る。いくつかの実施形態では、ウォーミング・プール・マネージャ１３０は、ウォーミング・プール１３０Ａ内のインスタンスのリストを維持することができる。インスタンスのリストは、インスタンスの構成（例えば、ＯＳ、ランタイム、コンテナなど）をさらに指定することができる。
【００３８】
いくつかの実施形態では、任意のユーザの要求を処理するために、ウォーミング・プール１３０Ａ内の仮想マシン・インスタンスを使用することができる。一実施形態では、ウォーミング・プール１３０Ａ内のすべての仮想マシン・インスタンスは、同一または実質的に同様の方法で構成されている。別の実施形態では、ウォーミング・プール１３０Ａ内の仮想マシン・インスタンスは、異なるユーザのニーズに合わせて異なるように構成され得る。例えば、仮想マシン・インスタンスは、異なるオペレーティング・システム、異なる言語ランタイム、及び／または異なるライブラリがそこにロードされてもよい。さらに別の実施形態では、ウォーミング・プール１３０Ａ内の仮想マシン・インスタンスは、同一または実質的に同様の方法（例えば、同じＯＳ、言語ランタイム、及び／またはライブラリ）で構成されて得るが、それらのインスタンスのいくつかは、異なるコンテナ構成を有してもよい。例えば、２つのインスタンスにＰｙｔｈｏｎとＲｕｂｙの両方のランタイムがある場合があるが、１つのインスタンスにはＰｙｔｈｏｎコードを実行するようにコンテナを構成し、もう１つのインスタンスにはＲｕｂｙコードを実行するようにコンテナを構成できる。いくつかの実施形態では、それぞれが同一構成の仮想マシン・インスタンスを有する複数のウォーミング・プール１３０Ａが提供される。
【００３９】
ウォーミング・プール・マネージャ１３０は、各仮想マシン・インスタンスが、仮想計算システム１１０上で実行されるプログラム・コードを実行するためのユーザ要求によって要求または指定され得る動作条件のうちの少なくとも１つを満たすように、ウォーミング・プール１３０Ａ内の仮想マシン・インスタンスを事前設定することができる。一実施形態では、動作条件は、実行可能性があるユーザ・コードを書き込むことができるプログラム言語を含むことができる。例えば、そのような言語は、Ｊａｖａ（登録商標）、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｐｙｔｈｏｎ（登録商標）、Ｒｕｂｙ（登録商標）及び同様なものを含むことができる。いくつかの実施形態では、ユーザ・コードを実行する要求を満たすことができる仮想マシン・インスタンスの事前初期化を容易にするために、ユーザ・コードを書き込むことができる言語のセットは、（いくつかの実施形態では４つ以上の言語のセットが提供されるが、例えば、４つの言語のセットなどの）所定のセットに限定されてもよい。例えば、ユーザが仮想計算システム１１０によって提供されるユーザ・インタフェースを介して要求を構成している場合、ユーザ・インタフェースは、ユーザ・コードを実行するための所定の動作条件の１つを指定するようにユーザに促すことができる。別の例では、仮想計算システム１１０によって提供されるサービスを利用するためのサービスレベル合意（ＳＬＡ）は、ユーザ要求が満足すべき一セットの条件（例えば、プログラミング言語、コンピューティング・リソースなど）を指定することができ、仮想計算システム１１０は、要求が、要求を処理する際の条件のセットを満たす、と仮定してもよい。別の例では、要求において指定された動作条件は、要求を処理するために使用される計算能力の量、要求のタイプ（例えば、ＨＴＴＰかトリガされたイベントか）、要求に対するタイムアウト（例えば、以降は要求が終了され得る閾値時間）、セキュリティ・ポリシー（例えば、ウォーミング・プール１３０Ａ内のどのインスタンスがどのユーザによって使用可能であるかを制御することができる）、などを含むことができる。
【００４０】
ワーカ・マネージャ１４０は、着信コード実行要求を処理するために使用されるインスタンスを管理する。図１に説明する例では、ワーカ・マネージャ１４０は、１人以上のユーザに現在割り当てられている仮想マシン・インスタンスのグループ（プールと呼ばれることもある）であるアクティブ・プール１４０Ａを管理する。仮想マシン・インスタンスは、本明細書では特定のユーザに割り当てられているものとして説明されているが、いくつかの実施形態では、インスタンスはユーザのグループに割り当てられ、それによりインスタンスは、ユーザのグループに結び付けられ、そのグループのあらゆるメンバがインスタンス上のリソースを利用することができる。例えば、同じグループ内のユーザは、同じセキュリティ・グループに属してもよく（例えば、セキュリティ証明書に基づいて）、その結果、別のメンバのコードが同じインスタンス上の別のコンテナ内で実行された後に、その特定のインスタンス上のメンバのコードを実行することが、セキュリティ上のリスクをもたらすことはない。同様に、ワーカ・マネージャ１４０は、どのコンテナでどの要求を実行できるか、及びどのインスタンスをどのユーザに割り当てることができるか、を指示する１つ以上のポリシーに従ってインスタンス及びコンテナを割り当てることができる。例示的なポリシーは、インスタンスが同じアカウントを共有するユーザの集合（例えば、仮想計算システム１１０によって提供されるサービスにアクセスするためのアカウント）に割り当てられることを指定することができる。いくつかの実施形態では、同じユーザ・グループに関連する要求は、（例えば、それに関連付けられたユーザ・コードが同一である場合）同じコンテナを共有することができる。いくつかの実施形態では、要求はグループの異なるユーザの間の区別せず、単純に、要求に関連するユーザが属するグループを示す。
【００４１】
図１に示すように、インスタンスはオペレーティング・システム（ＯＳ）、言語ランタイム、及びコンテナを有することができる。コンテナは、ＯＳの個々のコピー、ならびにその上にロードされたランタイムとユーザ・コードを有することができる。図１の例では、ワーカ・マネージャ１４０によって管理されるアクティブ・プール１４０Ａは、インスタンス１５６、１５８を含む。インスタンス１５６は、ＯＳ１５６Ａ、ランタイム１５６Ｂ、１５６Ｃ、及びコンテナ１５６Ｄ、１５６Ｅを有する。コンテナ１５６Ｄは、ＯＳ１５６Ａのコピー、ランタイム１５６Ｂのコピー、及びコード１５６Ｄ−１のコピーを含む。コンテナ１５６Ｅは、ＯＳ１５６Ａのコピー、ランタイム１５６Ｃのコピー、及びコード１５６Ｅ−１のコピーを含む。インスタンス１５８は、ＯＳ１５８Ａ、ランタイム１５８Ｂ、１５８Ｃ、１５８Ｅ、１５８Ｆ、コンテナ１５８Ｄ、及びコード１５８Ｇ、１５８Ｈを有する。コンテナ１５８Ｄは、ＯＳ１５８Ａのコピー、ランタイム１５８Ｂのコピー、及びコード１５８Ｄ−１のコピーを有する。図１に説明するように、インスタンスにはユーザ・コードがロードされ、それらのインスタンス内のコンテナにはユーザ・コードがロードされる。いくつかの実施形態では、ワーカ・マネージャ１４０は、アクティブ・プール１４０Ａ内のインスタンスのリストを維持することができる。インスタンスのリストは、インスタンスの構成（例えば、ＯＳ、ランタイム、コンテナなど）をさらに指定することができる。いくつかの実施形態では、ワーカ・マネージャ１４０は、ウォーミング・プール１３０Ａ内の（例えば、インスタンスの数及びタイプを含む）インスタンスのリストにアクセスすることができる。他の実施形態では、ワーカ・マネージャ１４０は、ウォーミング・プール１３０Ａ内の仮想マシン・インスタンスの知識は持たず、ウォーミング・プール・マネージャ１３０から計算能力を要求する。
【００４２】
図１に説明する例では、ユーザ・コードは、コンテナ（例えば、コンテナ１５６Ｄ、１５６Ｅ、１５８Ｄ）と呼ばれる分離された計算システムで実行される。コンテナは、仮想マシン・インスタンス内で、そのインスタンス上で使用可能なリソースを使用して作成された、論理的ユニットである。例えば、ワーカ・マネージャ１４０は、ユーザ・コードを実行する要求で指定された情報に基づいて、アクティブ・プール１４０Ａ内のインスタンスの１つに、新しいプールを作成するか、既存のコンテナを配置し、要求に関連するユーザ・コードの実行を処理するために、そのコンテナを要求に割り当てる。一実施形態では、そのようなコンテナはＬｉｎｕｘコンテナとして実装される。アクティブ・プール１４０Ａ内の仮想マシン・インスタンスは、その上に作成された１つ以上のコンテナを有することができ、（例えば、コンテナの１つまたはインスタンスのローカル・キャッシュのいずれかに）ロードされたユーザに関連する１つ以上のプログラム・コードを有する。各コンテナは、その中で利用可能にされているクレデンシャル情報を有することができ、そのため、コンテナで実行されるユーザ・コードは、対応するクレデンシャル情報がアクセスすることができるものすべてにアクセスすることができる。
【００４３】
要求がいったんフロントエンド１２０によって首尾よく処理されると、ワーカ・マネージャ１４０は、仮想計算システム１１０上のユーザ・コードを実行する要求を処理する能力を見出す。例えば、アクティブ・プール１４０Ａ内に、同じユーザ・コードがロードされたコンテナ（例えば、コンテナ１５６Ｄに示されたコード１５６Ｄ−１）を有する特定の仮想マシン・インスタンスが存在する場合、ワーカ・マネージャ１４０は、そのコンテナを要求に割り当て、ユーザ・コードをコンテナ内で実行させる。あるいは、ユーザ・コードが仮想マシン・インスタンスの１つ（例えば、インスタンス１５８に記憶されているがいずれの個々のコンテナにも属さないコード１５８Ｇ、１５８Ｈ）のローカルキャッシュ内で利用可能である場合、ワーカ・マネージャ１４０は、そのようなインスタンス上に新しいコンテナを作成し、そのコンテナを要求に割り当て、ユーザ・コードをコンテナにロードして実行させる。
【００４４】
ワーカー・マネージャ１４０が、要求に関連するユーザ・コードがアクティブ・プール１４０Ａ内のいずれかのインスタンス（例えば、インスタンスのコンテナまたはローカル・キャッシュのいずれか）上に見つからないと判定した場合、ワーカー・マネージャ１４０は、アクティブ・プール１４０Ａ内のいずれかのインスタンスが、現在、要求に関連付けられたユーザに割り当てられて、現在の要求を処理するための計算能力を有しているか、を判定する。そのようなインスタンスが存在する場合、ワーカ・マネージャ１４０は、そのインスタンス上に新しいコンテナを作成し、コンテナをその要求に割り当てることができる。あるいは、ワーカ・マネージャ１４０は、ユーザに割り当てられたインスタンス上に既存のコンテナをさらに構成し、コンテナをその要求に割り当てることができる。例えば、ワーカ・マネージャ１４０は、現在のユーザ要求によって求められる特定のライブラリがそこにロードされている場合、既存のコンテナを使用してユーザ・コードを実行することが可能だと判定することができる。そのような場合、ワーカ・マネージャ１４０は、特定のライブラリ及びユーザ・コードをコンテナにロードし、そのコンテナを使用してユーザ・コードを実行することができる。
【００４５】
アクティブ・プール１４０Ａが現在そのユーザに割り当てられているインスタンスをまったく含まない場合、ワーカ・マネージャ１４０はウォーミング・プール１３０Ａから新しい仮想マシン・インスタンスを引き出し、そのインスタンスを要求に関連付けられたユーザに割り当て、インスタンス上に新たなコンテナを作成し、コンテナを要求に割り当て、ユーザ・コードがダウンロードされてコンテナ上で実行されるようにする。
【００４６】
ユーザ・コードは、図１のストレージ・サービス１０８などの補助サービス１０６からダウンロードすることができる。図１に説明するデータ１０８Ａは、１つ以上のユーザによってアップロードされたユーザ・コード、そのようなユーザ・コードに関連付けられたメタデータ、または本明細書で説明される１つ以上の技術を実行するために仮想計算システム１１０によって利用される他の任意のデータを含むことができる。図１に説明する例ではストレージ・サービス１０８のみが示されているが、仮想環境１００は、ユーザ・コードをダウンロードすることができる他のレベルのストレージ・システムを含んでもよい。例えば、各インスタンスは、コンテナが作成されたインスタンスに物理的（例えば、インスタンスが実行されている物理的コンピューティング・システム上にあるローカル・ストレージ）、または論理的（例えば、インスタンスとネットワーク通信し、仮想計算システム１１０の内部または外部に提供されるネットワーク接続ストレージ・システム）に関連付けられた１つ以上のストレージ・システムを有することができる。あるいは、コードは、ストレージ・サービス１０８によって提供されるウェブ・ベースのデータ・ストアからダウンロードされてもよい。
【００４７】
ワーカ・マネージャ１４０が、ユーザ・コード実行要求に対応するために使用することができるウォーミング・プール１３０Ａ内の仮想マシン・インスタンスの１つを見つけると、ウォーミング・プール・マネージャ１３０またはワーカ・マネージャ１４０は、インスタンスをウォーミング・プール１３０Ａから取り出し、それを要求に関連付けられたユーザに割り当てる。割り当てられた仮想マシン・インスタンスは、ウォーミング・プール１３０Ａから取り出され、アクティブ・プール１４０Ａに配置される。いくつかの実施形態では、仮想マシン・インスタンスが特定のユーザにいったん割り当てられると、同じ仮想マシン・インスタンスを使用して他のどのようなユーザの要求も処理することはできない。それにより、ユーザ・リソースの混在を防ぐことで、ユーザにセキュリティ上のメリットがもたらされる。あるいは、いくつかの実施形態では、異なるユーザに属する（または異なるユーザに関連する要求に割り当てられた）複数のコンテナが、単一の仮想マシン・インスタンス上に共存することができる。そのようなアプローチは、利用可能な計算能力の活用を改善することができる。
【００４８】
いくつかの実施形態では、仮想計算システム１１０は、仮想マシン・インスタンスのローカル・キャッシュと（例えば、ネットワーク１０４を介してアクセス可能な）ウェブ・ベースのネットワーク・ストレージとの間のキャッシング・システムの中間レベルとして機能するようにユーザ・コードが記憶される、分離したキャッシュを維持することができる。ワーカ・マネージャ１４０が要求を処理する際に遭遇する様々なシナリオは、図４を参照して以下により詳細に説明される。
【００４９】
ユーザ・コードが実行された後、ワーカ・マネージャ１４０は、ユーザ・コードを実行するために使用されたコンテナを破棄して、占有したリソースをインスタンス内の他のコンテナが使用するために解放することができる。あるいは、ワーカ・マネージャ１４０は、コンテナを稼働させたままにして、そのコンテナを使用して、同じユーザからの追加の要求を処理することができる。例えば、同じユーザ・コードに関連付けられた別の要求がコンテナに既にロードされているなら、その要求は同じコンテナに割り当てることが可能であり、それによって新しいコンテナの作成及びユーザ・コードのコンテナへのロードに関連する遅延がなくなる。いくつかの実施形態では、ワーカ・マネージャ１４０は、ユーザ・コードを実行するために使用されたコンテナが作成されたインスタンスを破棄することができる。あるいは、ワーカー・マネージャ１４０は、同じユーザからの追加の要求を処理するために、それを使用するようにインスタンスを稼動状態に保ってもよい。ユーザ・コードが実行完了した後にコンテナ及び／またはインスタンスを稼働状態に維持するかどうかの決定は、閾値時間、ユーザのタイプ、ユーザの平均要求ボリューム、及び／または他の動作条件に基づくことができる。例えば、アクティビティ（例えば、コードの実行）なしに閾値時間（例えば、５分、３０分、１時間、２４時間、３０日など）が経過した後、コンテナ及び／または仮想マシン・インスタンスがシャットダウン（例えば、削除、終了など）され、それに割り当てられたリソースが解放される。いくつかの実施形態では、コンテナが破棄される前に経過した閾値時間は、インスタンスが破棄される前に経過した閾値時間よりも短い。
【００５０】
いくつかの実施形態では、仮想計算システム１１０は、着信コード実行要求を処理するときに、１つ以上の補助サービス１０６にデータを提供することができる。例えば、仮想計算システム１１０は、監視／ロギング／課金サービス１０７と通信することができる。監視／ロギング／課金サービス１０７は、仮想計算システム１１０上のコンテナ及びインスタンスの状態などの、仮想計算システム１１０から受信した監視情報を管理するための監視サービスと、仮想計算システム１１０上でコンテナ及びインスタンスによって実行される動作などの、仮想計算システム１１０から受信したロギング情報を管理するためのロギング・サービスと、（例えば、監視サービス及びロギング・サービスによって管理される監視情報及び／又はロギング情報に基づいて）仮想計算システム１１０上でユーザ・コードを実行することに関連する課金情報を生成するための課金サービスとを含むことができる。上述したような（例えば、仮想計算システム１１０に代わって）監視／ロギング／課金サービス１０７によって実行され得るシステム・レベルの動作に加えて、監視／ロギング／課金サービス１０７は、仮想計算システム１１０上で実行されるユーザ・コードに代わって、アプリケーション・レベルのサービスを実行する。例えば、監視／ロギング／課金サービス１０７は、仮想計算システム１１０上で実行されるユーザ・コードに代わって、様々な入力、出力、または他のデータ及びパラメータを監視及び／またはロギングすることができる。単一のブロックとして示されているが、監視、ロギング及び課金サービス１０７は、分離したサービスとして提供されてもよい。
【００５１】
いくつかの実施形態では、ワーカ・マネージャ１４０は、ワーカ・マネージャ１４０によって管理されるインスタンス及びコンテナ（例えば、アクティブ・プール１４０Ａ内のインスタンス及びコンテナ）のヘルス・チェックを実行することができる。例えば、ワーカ・マネージャ１４０によって実行されるヘルス・チェックは、ワーカ・マネージャ１４０によって管理されるインスタンス及びコンテナが、（１）ネットワーク及び／またはスタートアップ構成の設定ミス、（２）使い尽くされたメモリ、（３）ファイル・システムの破損、（４）互換性のないカーネル、及び／またはインスタンスとコンテナのパフォーマンスを損なう可能性のあるその他の問題、という課題を抱えているかを判定することを含んでいてもよい。一実施形態では、ワーカ・マネージャ１４０は定期的に（例えば、５分毎、３０分毎、１時間毎、２４時間毎など）ヘルス・チェックを実施する。いくつかの実施形態では、ヘルス・チェックの頻度は、ヘルス・チェックの結果に基づいて自動的に調整することができる。他の実施形態では、ヘルス・チェックの頻度は、ユーザ要求に基づいて調整することができる。いくつかの実施形態では、ワーカ・マネージャ１４０は、ウォーミング・プール１３０Ａ内のインスタンス及び／またはコンテナについて同様のヘルス・チェックを実行することができる。ウォーミング・プール１３０Ａ内のインスタンス及び／またはコンテナは、アクティブ・プール１４０Ａ内のインスタンス及びコンテナと一緒に、または別々に管理されてもよい。いくつかの実施形態では、ウォーミング・プール１３０Ａ内のインスタンス及び／またはコンテナの健全性がアクティブ・プール１４０Ａとは別に管理される場合、ウォーミング・プール・マネージャ１３０は、ワーカ・マネージャ１４０の代わりに、ウォーミング・プール１３０Ａ内のインスタンス及び／またはコンテナ上で上述したヘルス・チェックを実行してもよい。
【００５２】
いくつかの実施形態では、仮想計算システム１１０は、ユーザ・コードの実行を、（例えば、フロントエンド１２０によって）それが受信された直後に開始するように適合される。時間幅は、（例えば、ユーザに関連する仮想マシン・インスタンス上のコンテナ内の）ユーザ・コードの実行の開始と、（例えば、フロントエンドによって受信される）ユーザ・コードを実行する要求の受信との間の時間差として決定することができる。別の時間幅は、（１）イベント・トリガリング・サービス上のイベントの検出と、（２ａ）（例えばフロントエンドによって受信された）ユーザ・コードを実行する要求の受信、及び／または（２ｂ）（例えば、ユーザに関連する仮想マシン・インスタンス上のコンテナ内の）ユーザ・コードの実行の開始、との間の時間差として決定することができる。別の時間幅は、（１）イベント・メッセージの（例えば、イベント・トリガリング・サービス上からの直接的または間接的）検索、アクセス、または受信と、（２）ユーザ・コードを実行する要求の処理の（例えば、ユーザに関連付けられた仮想マシン・インスタンス上のコンテナ内での）開始、との間の時間差として決定することができる。仮想計算システム１１０は、所定の継続時間より短い時間幅内にユーザ・コードの実行を開始するように適合されている。一実施形態では、所定の継続時間は５００ミリ秒である。別の実施形態では、所定の継続時間は３００ミリ秒である。別の実施形態では、所定の継続時間は１００ミリ秒である。別の実施形態では、所定の継続時間は５０ミリ秒である。別の実施形態では、所定の継続時間は１０ミリ秒である。別の実施形態では、所定の継続時間は、１０ミリ秒〜５００ミリ秒の範囲から選択される任意の値であってもよい。いくつかの実施形態では、仮想計算システム１１０は、１つ以上の条件が満たされる場合、所定の継続時間よりも短い時間幅内にユーザ・コードの実行を開始するように適合される。例えば、１つ以上の条件は、（１）ユーザ・コードは、要求が受信された時点で、アクティブ・プール１４０Ａ内のコンテナにロードされているか、（２）ユーザ・コードは、要求が受信された時点で、アクティブ・プール１４０Ａのインスタンスのコード・キャッシュに記憶されているか、（３）アクティブ・プール１４０Ａは、要求が受信された時点で、要求に関連付けられたユーザに割り当てられたインスタンスを含んでいるか、（４）ウォーミング・プール１３０Ａは、要求が受信された時点で、要求を処理する能力を有するか、のうちのいずれか１つを含み得る。
【００５３】
ワーカ・マネージャ１４０は、着信コード実行要求を処理する計算能力（例えば、コンテナ）を見つけるためのインスタンス割当てユニットと、それらのコンテナ上のユーザ・コードの実行を容易にするユーザ・コード実行モジュールとを含むことができる。フロントエンド１２０の例示的な構成は、図２を参照して以下により詳細に説明される。
【００５４】
図２は、仮想計算システム１１０内のプログラム・コードを実行するためのユーザ要求に対するイベント・メッセージを処理する、（フロントエンド１２０として参照される）コンピューティング・システムの一般的なアーキテクチャを示す。図２に示すフロントエンド１２０の一般的なアーキテクチャは、本開示の態様を実装するために使用され得るコンピュータ・ハードウェア及びソフトウェア・モジュールの構成を含む。ハードウェア・モジュールは、以下に詳細に説明するように、物理的な電子デバイスで実装することができる。フロントエンド１２０は、図２に示すものよりも多くの（またはより少ない）要素を含むことができる。しかしながら、実現可能な開示を提供するために、これらの一般的な従来の要素のすべてを示す必要はない。さらに、図２に説明する一般的なアーキテクチャは、図１に説明する他のコンポーネントのうちの１つ以上を実施するために使用されてもよい。説明されているように、フロントエンド１２０は、処理ユニット１９０、ネットワーク・インタフェース１９２、コンピュータ可読媒体ドライブ１９４、入出力デバイス・インタフェース１９６を含み、それらのすべてが通信バスを介して互いに通信することができる。ネットワーク・インタフェース１９２は、１つ以上のネットワークまたはコンピューティング・システムへの接続を提供することができる。従って、処理ユニット１９０は、ネットワーク１０４を介して他のコンピューティング・システムまたはサービスから情報及び指示を受信することができる。処理ユニット１９０は、メモリ１８０との間で通信することもでき、入出力デバイス・インタフェース１９６を介してオプションのディスプレイ（図示せず）の出力情報をさらに提供することができる。入出力デバイス・インタフェース１９６は、オプションの入力デバイス（図示せず）からの入力を受け入れることもできる。
【００５５】
メモリ１８０は、本開示の１つ以上の態様を実施するために処理ユニット１９０が実行するコンピュータ・プログラム命令（いくつかの実施形態では、モジュールとしてグループ化される）を含むことができる。メモリ１８０は、一般に、ＲＡＭ、ＲＯＭ、及び／または他の持続的、補助的、または非一時的なコンピュータ可読媒体を含む。メモリ１８０は、ワーカ・マネージャ１４０の一般的な管理及び動作において処理ユニット１９０によって使用されるコンピュータ・プログラム命令を提供するオペレーティング・システム１８４を記憶することができる。メモリ１８０は、本開示の態様を実施するための、コンピュータ・プログラム命令及びその他の情報をさらに含むことができる。例えば、一実施形態では、メモリ１８０は、例えばコンピューティング・デバイスにインストールされるブラウザまたはアプリケーションなどのナビゲーション及び／またはブラウジング・インタフェースを介して、コンピューティング・デバイス上に表示するためのユーザ・インタフェース（及び／またはそのための命令）を生成するユーザ・インタフェース・ユニット１８２を含む。さらに、メモリ１８０は、例えばユーザ・プログラム・コード及び／またはライブラリにアクセスするために、１つ以上のデータ・レポジトリ（図示せず）を含み及び／またはそれらと通信することができる。
【００５６】
メモリ１８０は、ユーザ・インタフェース・ユニット１８２に加えて、及び／またはそれと組み合わせて、イベント／要求処理ユニット１８８を含むことができ、イベント／要求処理ユニット１８８は、処理ユニット１９０によって実行され得る、イベント・メッセージ・ポーリング・ユニット１８６Ａ及びイベント・メッセージ変換ユニット１８６Ｂを含むことができる。一実施形態では、ユーザ・インタフェース・ユニット１８２、イベント・メッセージ・ポーリング・ユニット１８６Ａ、及びイベント・メッセージ変換ユニット１８６Ｂは、個別にまたは集合的に、例えば、実行されるユーザ・コードへの要求のためのイベント・メッセージの処理などの、本開示に説明するような様々な態様を実装する。別の実施形態では、例えば、イベント・ソースまたはメッセージ・キューをポーリングし、少なくともフロントエンド１２０及び／または仮想コンピューティング・システム１００の別のコンポーネントによるさらなる処理のためのイベント・メッセージを準備するために、初期メッセージ変換または処理を実行するように構成されたポーリング・フリートを介して、分離したポーリング・サービスを実施することができる。
【００５７】
イベント・メッセージ・ポーリング・ユニット１８６Ａは、ユーザ・コードを実行する要求に向けて処理されるべきイベント・メッセージを定期的にポーリングする。例えば、イベント・メッセージ・ポーリング・ユニット１８６Ａは、メッセージ・キュー・サービス１０５またはその他のメッセージ・キュー・サービスまたはメッセージ・バスなどのメッセージ・キューに定期的にアクセスして、イベント・メッセージが仮想計算システム１１０による処理のためにメッセージ・キューに配置されているか、を判定または検出することができる。イベント・メッセージは、例えば、図３を参照して本明細書で説明するルーチンに従ってメッセージ・キューに置かれてもよい。メッセージ・キュー内のイベント・メッセージを判定または検出することに応答して、メッセージ・ポーリング・ユニット１８６Ａは、メッセージ・キューからメッセージ・イベントを検索し、本明細書でさらに説明するイベント・メッセージのさらなる処理を開始することができる。別の実施形態では、イベント・メッセージ・ポーリング・ユニット１８６Ａは、メッセージ・キューからではなく、イベント・トリガリング・サービス１０６Ａを直接ポーリングすることができる。例えば、特定のタイプのデータベースなどのイベント・トリガリング・サービスの中には、必ずしも中間メッセージ・キューに依存する必要がない、イベント・メッセージの直接ポーリングをサポートするものもある。
【００５８】
イベント・メッセージ変換ユニット１８６Ｂは、（例えば、メッセージ・キュー１０５などのメッセージ・キューからアクセスされた、または検索された）イベント・メッセージの、ユーザ・コード（例えば、上記で前に参照によりその全体が本明細書に組み込まれている、２０１４年９月３０日に出願された「ＴＨＲＥＡＤＩＮＧ  ＡＳ  Ａ  ＳＥＲＶＩＣＥ」と題する米国特許出願第＿＿／＿＿＿，＿＿＿号（代理人整理番号ＳＥＡＺＮ．９８９Ａ）に記載されているプロセスに従ってさらなる処理の準備がなされている）を実行する要求への変換を管理する。イベント・メッセージの変換については、本明細書の図４を参照してより詳細に説明する。一実施形態では、イベント・メッセージが処理されるときに、仮想計算システム１１０による迅速な変換及び／または即時関数呼び出しを容易にするために、リモート・プロシージャ・コールを表す形式でイベント・メッセージが生成される。このような実施態様は、イベント・トリガに応答する補助システムと、イベント・トリガに応答して補助システムによって生成されるイベント・メッセージを処理する仮想計算システム１１０との間の、高度な関数的透明性と待ち時間の低減を可能にする。
【００５９】
イベント・メッセージ・ポーリング・ユニット１８６Ａ及びイベント・メッセージ変換ユニット１８６Ｂは、フロントエンド１２０の一部として図２に示されているが、他の実施形態では、イベント・メッセージ・ポーリング・ユニット１８６Ａ及びイベント・メッセージ変換ユニット１８６Ｂのすべてまたは一部は、仮想計算システム１１０の他のコンポーネント及び／または別のコンピューティング・デバイスによって実装されてもよい。例えば、本開示の特定の実施形態では、仮想計算システム１１０と通信する別のコンピューティング・デバイスが、フロントエンド１２０の一部として説明されるモジュール及びコンポーネントと同様に動作するいくつかのモジュールまたはコンポーネントを含むことができる。いくつかの実施形態では、フロントエンド１２０は図２に説明する以外のコンポーネントをさらに含んでもよい。
【００６０】
次に図３を参照して、イベント・トリガリング・サービス１０６Ａとして動作するように構成されたストレージ・サービス１０８などの、補助サービス１０６の１つ以上のコンポーネントによって実施されるルーチン３００が説明される。ルーチン３００は、イベント・トリガリング・サービス１０６Ａによる実施に関して説明されているが、当業者であれば、ユーザ・デバイス１０２または仮想計算システム１１０などの代替コンポーネントがルーチン３００を実施してもよく、あるいは、１つ以上のブロックが、異なるコンポーネントによって、または分散されて実施されてもよいことを理解するであろう。
【００６１】
例示的なルーチン３００のブロック３０２において、イベント・トリガリング・サービス１０６Ａは、仮想計算システム１１０上のユーザ・コードの実行をトリガまたは起動するように指定されたイベントまたは動作を検出する。例えば、いくつかの実施形態では、イベント・トリガリング・サービス１０６Ａは、１つ以上のイベントのイベント通知を有効化またはアクティブ化するように構成できる。一実施形態では、イベント・トリガ及び通知構成設定は、ユーザによって提供または指定されてもよい。例えば、ユーザが仮想計算システム１１０及び／またはストレージ・サービス１０８にユーザ・コードを提供またはアップロードするとき、ユーザは、その時点で、イベント・トリガリング・サービス１０６Ａが注意深く見守るべき、及び１つ以上のイベントの検出に応答して、対応するユーザ・コードの関数またはルーチンが実行されるべき、１つ以上のイベントを指定してもよい。１つの説明的な例として、ユーザは、サムネイル画像を生成するためのユーザ・コードをアップロードし（または事前にアップロードするか、または他の方法で仮想計算システム１１０に提供しておき）、さらに、サムネイル画像を生成するコードが、新しい画像を補助システム（画像共有システムなど）にアップロードしているエンド・ユーザに応答して実行されるべきであることを指定することができる。この例では、画像共有システムは次に画像アップロード・イベントを監視または検出する。いくつかの実施形態では、イベント・トリガ及び通知構成設定は、例えばユーザ・コードと共に提供され得る構成ファイルまたは他のデータ・フォーマットによって提供または指定され得る。様々な実施形態では、ユーザ・コードをアップロードしているユーザと、イベント・トリガリング・サービス（新しい画像のアップロードなど）として構成された補助サービスに関して何らかの他の動作を実行するエンド・ユーザは、分離した別個のユーザまたはエンティティであってもよい。
【００６２】
次に、ブロック３０４において、イベント・トリガリング・サービス１０６Ａは、検出された動作／イベントに関連してイベント・メッセージを生成する。例えば、イベント・トリガリング・サービス１０６Ａは、ユーザによって以前に提供されたイベント・トリガ及び通知構成設定に従ってイベント・メッセージを生成することができる。構成設定は、例えば、トリガされたイベントに応答して仮想計算システムによって実行されるユーザ・コードに関連するスキーマ、コード・モデル、またはＡＰＩを指定することができる。例えば、イベント・メッセージは、とりわけ、ユーザに関連するユーザ・アカウント識別子、仮想計算システム上で呼び出される関数を識別する関数識別子、及び関数呼び出しと共に提供されるべき任意の入力パラメータ（必須及び／またはオプション）を含む１つ以上のイベント・メッセージ・パラメータを含むように生成することができる。
【００６３】
いくつかの実施形態では、イベント・メッセージは、実行されるプログラム・コード、プログラム・コードが書き込まれる言語、要求に関連付けられたユーザ、及び／またはプログラム・コードを実行するために予約されるコンピュータ・リソース（例えば、メモリなど）を示すデータまたはメタデータを含むことができる。例えば、イベント・メッセージは、「言語ランタイムＸ」を使用して「オペレーティング・システムＡ」上でユーザ・コードが実行されるべきであることを指定することができる。イベント・メッセージが仮想計算システム１１０によって処理されると（例えば図４参照）、仮想計算システム１１０またはそのコンポーネントのうちの１つは、「オペレーティング・システムＡ」及び「言語ランタイムＸ」で事前設定され、ユーザに割り当てられた仮想マシン・インスタンスを見つけることができる。次に、仮想計算システム１１０は、コンテナを、その中のユーザ・コードを実行するために仮想マシン・インスタンス上に作成することができる。コードを有するコンテナが仮想マシン・インスタンス上に既に存在する場合、仮想計算システム１１０は、コンテナが利用可能になると、コンテナ上での実行に対する現在の要求をバッファすることができる。
【００６４】
一実施形態では、イベント・メッセージ（または、少なくとも、イベント・メッセージの一部）のフォーマットは、イベント・トリガリング・サービス１０６Ａが、イベント・メッセージにおいて、仮想計算システム上で関数を起動するために必要とされ得る関連する情報を提供するために、最小限の処理を実行するだけでよいように、標準的なリモート・プロシージャ・コールを表すことができる。例えば、このような標準的なリモート・プロシージャ・コール・フォーマットは、仮想計算システム１１０とは異なるオペレーティング・システムまたは言語ランタイムを実行する補助システム１０６が、そのような標準フォーマットで生成されたイベント・メッセージを介して仮想計算システム１１０とシームレスに通信することを可能にする。一実施形態では、リモート・プロシージャ・コールのフォーマットは、ユーザによって提供され、実行されるユーザ・コードと一致するか、対応するように設計される。例えば、画像アップロード・イベントが検出された場合、イベント・メッセージのフォーマットは、「ｉｎｖｏｋｅ（ｇｅｎｅｒａｔｅＴｈｕｍｂｎａｉｌ、ｕｓｅｒＩＤ、ｉｍａｇｅＮａｍｅ、ｉｍａｇｅＰａｔｈ）」、または「ｇｅｎｅｒａｔｅＴｈｕｍｂｎａｉｌ（ｕｓｅｒＩＤ、ｉｍａｇｅＮａｍｅ、ｉｍａｇｅＰａｔｈ）」、または類似のものなどの、仮想計算システム上で応答して実行される関数へのリモート・プロシージャ・コールを表すことができる。
【００６５】
いくつかの実施形態では、イベント・トリガリング・サービス１０６Ａと仮想計算システム１１０との間に信頼できる関係または安全な関係が確立されるインスタンスのように、イベント・メッセージは、仮想計算システム１１０によって実行されるユーザ・コードをさらに含むことができる。例えば、ユーザは、仮想計算システム１１０にユーザ・コードを提供する代わりに、または提供することに加えて、ユーザ・コードをイベント・トリガリング・サービス１０６Ａに提供することができ、さらに、ユーザ・コードが実行時に実行するために仮想計算システム１１０へのイベント・メッセージを提供される、ということを指示する。別の実施形態では、イベント・メッセージは、仮想計算システム１１０によって実行されるユーザ・コードの位置（ＵＲＩなど）を含むことができ、それにより仮想計算システム１１０がＵＲＩを介して遠隔からユーザ・コードを呼び出すことができる。
【００６６】
ブロック３０６において、イベント・トリガリング・サービス１０６Ａは、仮想計算システムによるさらなる処理のためにイベント・メッセージを提供する。例えば、一実施形態では、イベント・メッセージは、メッセージ・キュー１０５などのメッセージ・キューに提供される。メッセージ・キュー・サービス１０５は、（例えば、図１に示すように）補助システム１０６のコンポーネントであってもよく、または補助システム１０６及び／または仮想計算システム１１０とネットワーク１６０上で通信する、分離したシステムまたはサービスであってもよい。イベント・メッセージの特定のフォーマットは、イベント・メッセージを伝送するために使用されるメッセージ・キューに関連する仕様に少なくとも部分的に基づいてもよい。さらに、使用されている特定のメッセージ・キューは、生成され、仮想計算システムに提供されるイベント・メッセージのタイプに基づいてもよい。例えば、特定のメッセージ・キューは、データベース操作に関するメッセージを伝送するのに適しており、従って、データベース・イベント・トリガに応答して生成されたイベント・メッセージが、特定のメッセージ・キューを使用して提供されてもよい。仮想計算システムがどのようにしてイベント・メッセージにアクセスし処理するかについては、図４を参照して以下でより詳細に説明する。別の実施形態では、イベント・メッセージは、中間メッセージ・キューを必要とせずに、仮想計算システム１１０によるアクセスのために提供されるか、または利用可能にされてもよい。例えば、イベント・トリガリング・サービス１０６Ａは、イベント・トリガリング・サービス１０６Ａから１つ以上の利用可能なイベント・メッセージを要求するために、仮想計算システム１１０が呼び出すことができるＡＰＩを提供または使用可能にすることができる。次に、仮想計算システム１００は、処理のためにイベント・メッセージをアクセス及び／または検索するために、メッセージ・キューをポーリングする代わりに、またはそれと組み合わせて、例えば定期的にＡＰＩを呼び出すことができる。
【００６７】
図３のルーチン３００はブロック３０２〜３０６を参照して上記に説明されたが、本明細書に記載された実施形態はそのように限定はされず、本開示の趣旨から逸脱することなく、１つ以上のブロックを省略、変更または交換することができる。
【００６８】
次に図４を参照して、仮想計算システム１１０（例えば、フロントエンド１２０）の１つ以上のコンポーネントによって実施されるルーチン４００を説明する。ルーチン４００は、フロントエンド１２０による実施に関して説明されているが、当業者であれば、代替コンポーネントがルーチン４００を実施してもよく、または１つ以上のブロックが異なるコンポーネントによって、または分散されて実施されてもよいことを理解するであろう。
【００６９】
例示的なルーチン４００のブロック４０２において、フロントエンド１２０は、オプションで、ユーザ・コードを実行する要求を表すことができるイベント・メッセージについてメッセージ・キュー（例えば、メッセージ・キュー１０５）を定期的にポーリングすることができる。例えば、ブロック４０２は、イベント・トリガリング・サービス１０６Ａがメッセージ・キューを介してイベント・メッセージを提供するシナリオでは、図３のブロック３０６からのイベント・メッセージング・プロセスを継続することができる。
【００７０】
次に、ブロック４０４において、フロントエンド１２０は、仮想計算システム１１０による処理のためにイベント・メッセージにアクセスするか、またはそれを検索する。一実施形態では、イベント・メッセージは、メッセージ・キューからアクセスされるか、または検索される。イベント・メッセージの検索により、イベントに関連するさらなる処理の重複を防止するために、メッセージ・キューからイベント・メッセージが除去される。別の実施形態では、イベント・メッセージは、仮想計算システム１１０による処理の準備が整ったイベント・メッセージをフロントエンド１２０が要求及び受信することができるイベント・トリガリング・サービスによって提供される、ＡＰＩの呼び出しなどによって、イベント・トリガリング・サービスから直接アクセスまたは検索されてもよい。イベント・メッセージは、図３を参照して上述した情報及びメタデータの任意のものを含むことまたは備えることができ、例えばその中に含まれるのは、ユーザに関連するユーザアカウント識別子、仮想計算システム上で呼び出される関数を識別する関数識別子、及び関数の呼び出しと共に提供される任意の入力パラメータ（必須及び／またはオプション）を含む１つ以上のイベント・メッセージ・パラメータである。
【００７１】
ブロック４０６において、フロントエンド１２０は、ユーザ・コードを実行する要求が、仮想計算システム１１０によってさらに処理され得るように、イベント・メッセージをユーザ・コードを実行する要求に変換する（例えば、上記で前に参照によりその全体が本明細書に組み込まれている、２０１４年９月３０日に出願された「ＴＨＲＥＡＤＩＮＧ  ＡＳ  Ａ  ＳＥＲＶＩＣＥ」と題する米国特許出願第＿＿／＿＿＿，＿＿＿号（代理人整理番号ＳＥＡＺＮ．９８９Ａ）に記載されていることを含む）。イベント・メッセージの変換は、イベント・メッセージを構文解析して、関数識別子、任意の入力パラメータ、及びイベント・トリガに応答して実行されるべきユーザによって指定されたユーザ・コードを実行する要求を生成するために必要とされ得る他のメタデータを、識別及び／または抽出することを含むことができる。例えば、イベント・メッセージは、既知または定義されたスキーマまたは他のフォーマットに準拠してもよいイベント・ペイロード（例えば、イベント・データ）に関する情報、例えばイベント・メッセージ・バスまたはイベント・トリガリング・サービス（例えば、メッセージ・キュー・サービスによって提供されるイベント・メッセージの暗黙のリースの一部であり得る）によって提供されるイベント・ラッパーまたは「エンベロープ」、及び／または、イベント・メッセージが署名された識別情報、イベント・プロデューサまたはイベント・トリガのソースの識別情報（例えば、どのイベント・トリガリング・サービスがイベントをトリガしたかなど）、イベント・メッセージが伝送されたメッセージ・キューの名称または所有者を含むイベントに関連するイベント・メタデータ、などのうち少なくとも１つ以上を含むかまたは備えることができる。
【００７２】
図３を参照して説明したように、一実施形態では、イベント・メッセージのフォーマットは、メッセージ・キューから一旦検索されると、フロントエンド１２０が、ユーザ・コードを実行するための対応する要求を生成するために最小限の処理しか必要としないように、標準リモート・プロシージャ・コールを表す。例えば、画像アップロード・イベントが検出された場合、イベント・メッセージのフォーマットは、「ｉｎｖｏｋｅ（ｇｅｎｅｒａｔｅＴｈｕｍｂｎａｉｌ、ｕｓｅｒＩＤ、ｉｍａｇｅＮａｍｅ、ｉｍａｇｅＰａｔｈ）」、または「ｇｅｎｅｒａｔｅＴｈｕｍｂｎａｉｌ（ｕｓｅｒＩＤ、ｉｍａｇｅＮａｍｅ、ｉｍａｇｅＰａｔｈ）」、または類似のものなどの、仮想計算システム上で応答して実行される関数へのリモート・プロシージャ・コールを表すことができる。従って、一実施形態では、フロントエンド１２０は、このリモート・プロシージャ・コールを抽出し、指定された関数を直ちに起動して要求を開始することができる。さらに、図３を参照して上記に論じたように、ユーザ・コードの実行要求は、ユーザ・コードを実行する要求の追加入力として含まれる「言語ランタイムＸ」を使用して、ユーザ・コードが「オペレーティング・システムＡ」上で実行されるべきであることをさらに指定することができる。
【００７３】
ブロック４０８において、フロントエンド１２０は、オプションで、セキュリティアクセスを検証し、及び／またはイベント・メッセージと共に提供されるユーザ・アカウント識別子に関連するユーザを認証し、ユーザが指定されたユーザ・コードにアクセスする権限を有すると判定する。いくつかの実施形態では、セキュリティ及び／または認証は、分離したプロセスで、またはユーザ・コードを実行するための要求の処理の一部として、省略または実行されてもよい。いくつかの実施形態では、セキュリティ及び／または認証は、ブロック４０６で実行される変換の前など、ルーチン４００の早期に実行されてもよい。
【００７４】
ブロック４１０において、フロントエンド１２０は、ユーザ・コードを実行する要求を仮想計算システム１１０に提供する。特定の実施形態では、フロントエンド１２０自体は、例えば、上記で前に参照によりその全体が本明細書に組み込まれている、２０１４年９月３０日に出願された「ＴＨＲＥＡＤＩＮＧ  ＡＳ  Ａ  ＳＥＲＶＩＣＥ」と題する米国特許出願第＿＿／＿＿＿，＿＿＿号（代理人整理番号ＳＥＡＺＮ．９８９Ａ）に記載されているように、さらに要求の処理を実行する。要求は、プログラミング言語で構成されたプログラム・コードを含むことができる。Ｊａｖａ（登録商標）、ＰＨＰ、Ｃ  ＋＋、Ｐｙｔｈｏｎ（登録商標）などの様々なプログラム言語を使用してユーザ・コードを作成できる。要求は、コード実行要件に関する構成情報を含むことができる。例えば、要求には、プログラム・コードが書かれたプログラム言語に関する情報、言語ランタイムに関する情報、及び／またはユーザ・コードを実行するための言語ライブラリに関する情報を含めることができる。構成情報は、ユーザ・コードをホストできる仮想マシン・インスタンスに関する特定の情報を含む必要はない。
【００７５】
図４のルーチン４００はブロック４０２〜４１０を参照して上記に説明されたが、本明細書に記載された実施形態はそのように限定はされず、本開示の趣旨から逸脱することなく、１つ以上のブロックを省略、変更または交換することができる。例えば、ブロック４０２は、フロントエンド１２０がユーザ・デバイス１０２からイベント・メッセージを受信するように変更することができる。
【００７６】
図４のルーチン４００は、異なる順序で実行され得る異なるプロセスまたはルーチンを含み得る。１つの代替例が以下のように提供されるが、他の変形も可能である。まず、イベント・メッセージを（利用可能な場合にはスキーマを使用して）解析するフロントエンド１２０によって、イベント・メッセージを受信またはアクセスすることができる。フロントエンド１２０は、解析されたイベント・メッセージを、イベントに関する情報、イベントのソース所有者、及び仮想計算システム１１０に提供され得る他の情報を決定または確立するために、追加のイベントメタデータ（例えば、イベント・ラッパー、メッセージ・キュー識別情報またはイベント・トリガのソースに関する情報）と組み合わせることができる。次に、フロントエンド１２０は、必要に応じて少なくとも初期認証及び／またはセキュリティ・チェックを実行して、安全なアクセス及びユーザ・コードの関連する実行を検証することができる。次に、フロントエンド１２０は、イベントに応答して呼び出される適切なプログラムまたはユーザ・コードにメッセージをルーティングするために、解析されたイベント・メッセージ及び追加のイベントメタデータを評価することができる。次に、フロントエンド１２０は、例えば、メッセージ及び／またはイベントメタデータの内容を、引数、変数、及びイベント・メッセージを処理するために選択されたユーザ・コードのプログラミング言語内の他の入力に変換することによって、ユーザ・コードを実行する要求にイベント・メッセージをマッピングすることができる。例えば、イベント・メッセージの署名者またはプロバイダに関連付けられた識別情報を含むユーザ・コードを実行する要求に、追加情報を加えることができる。次に、フロントエンド１２０は、プログラミング言語の関数、方法、または他のエントリポイントを（オプションとして、イベント・メッセージ及び／またはイベント・メタデータの態様に基づく条件で）呼び出して、要求の処理を開始することができる。
【００７７】
ユーザ・コードを実行する要求の処理中に、フロントエンド１２０は、イベント・メッセージまたはペイロードの処理を容易にするために追加の処理を実行し続けることができる。例えば、元のイベント・メッセージまたはペイロードが１つ以上のサブ・イベントの集合体を含む場合、各サブ・イベントは、一度に１つずつユーザ・コードを介して実行するために仮想計算システム１１０に中継されてもよい。フロントエンド１２０は、元の集合イベント・メッセージ・ペイロードを、複数の単一イベントに分割することを管理するように構成されてもよい。フロントエンド１２０は、例えば、元のイベント・メッセージの処理の一部として必要とされる中間または集合チェックポイント・サービスを容易にするように構成することもできる。例えば、複数のイベントを含む集合イベント・メッセージは、第１のイベントのいくつかが、後の第２、または第３のイベントの前に最初に処理及び完了されることを必要とする場合があり、この場合、フロントエンド１２０は、第１イベントの処理を容易にし、仮想計算システムによる処理／実行のために、後の第２または第３のイベントをルーティングする前に、第１イベントの完了ステータスをチェックするようにさらに構成することができる。
【００７８】
イベント・メッセージに対するユーザ・コードの処理／実行の後、フロントエンド１２０は、追加の後処理を提供するようにさらに構成されてもよい。例えば、フロントエンド１２０は、特定のクリーンアップ操作（例えば、関連するイベント・メッセージ／ラッパーに関するリースの解放）を実行し、結果計算を実行し、戻り値を（必要な場合）提供じ、チェックポイント操作（例えば上述のように、集合イベント・メッセージに関するサブ・イベントの処理の最中または処理の間に発生する可能性がある）を実行することができる。いくつかの実施形態では、フロントエンド１２０は、ユーザプログラムに代わって、イベントの完了（成功または不成功）に関連するロギング、監視、アラーム／通知、及び／または他のレポートを実行することができる。場合によっては、そのようなロギング、監視などは、ユーザ・コード自体の実行中に行われるロギング、監視、及び関連プロセスに加えて実行することができる。例えば、フロントエンド１２０は、イベントの結果（及びイベントに応答したユーザ・コードの関連する実行）について、例えばイベント・トリガリング・サービス１０６Ａまたはユーザに戻して報告するように構成することができる。
【００７９】
当業者であれば、本開示に記載された機能の全てが、開示されたコンポーネント及び移動通信デバイスの１つ以上の物理プロセッサによって実行されるソフトウェアで具体化されてもよいことが理解されるであろう。ソフトウェアは、任意のタイプの不揮発性ストレージに持続的に記憶されてもよい。
【００８０】
特に言及しない限り、または使用されている文脈の中で他の意味で理解されない限り、とりわけ「ｃａｎ」、「ｃｏｕｌｄ」、「ｍｉｇｈｔ」または「ｍａｙ」などの条件付き言語は、一般に、特定の機能、構成要素及び／またはステップを、特定の実施形態が含むが、他の実施形態は含まない、ということを伝えることを意図するものである。従って、そのような条件付き言語は、機能、構成要素及び／またはステップが１つ以上の実施形態に何らかの形で必要であるということ、もしくは、１つ以上の実施形態が、これらの機能、構成要素及び／またはステップは任意の特定の実施形態に含まれるか、または実施されることになるかを、ユーザ入力またはプロンプティング有無にかかわらず検出するための論理を含む必要があるということを、暗示することを一般に意図してはいない。
【００８１】
本明細書に記載され、及び／または添付の図に示された流れ図における任意のプロセス記述、構成要素、またはブロックは、プロセス内の特定の論理関数またはステップを実施するための１つ以上の実行可能命令を含むモジュール、セグメント、またはコード部分を潜在的に表すものとして理解されるべきである。関連する機能に応じて、要素または機能が削除され、実質的に同時にまたは逆の順序を含めて、示されているかまたは議論された順序とは順不同に実行される代替実施形態は、本明細書に記載された実施形態の範囲内に含まれるということが、当業者には理解されるであろう。上述のデータ及び／またはコンポーネントは、ＣＤ■ＲＯＭ、ＤＶＤ■ＲＯＭまたはネットワーク・インタフェースなどのコンピュータ実行可能コンポーネントを格納することが可能なコンピュータに関連付けられたドライブ機構を使用して、コンピュータ可読記憶媒体に記憶され、コンピューティング・デバイスのメモリにロードされる、ということが、さらに理解されるであろう。さらに、コンポーネント及び／またはデータは、単一のデバイスに含めることができ、または任意の方法で分散させることができる。従って、汎用コンピューティング・デバイスは、上述した様々なデータ及び／またはコンポーネントの処理及び／または実行を伴う本開示のプロセス、アルゴリズム、及び方法を実施するように構成されてもよい。
【００８２】
上記の実施形態には多くの変形及び修正がなされてもよく、その構成要素は他の許容可能な例の中にあると理解されるべきであることを強調すべきである。そのような変更及び変形のすべては、本明細書で本開示の範囲内に含まれ、以下の請求項によって保護されることが意図される。
【００８３】
本開示の実施形態は、以下の条項を考慮して説明することができる。
１．仮想計算システム上でプログラム・コードを実行する要求のためのイベント・メッセージを提供するシステムであって、
少なくともユーザのプログラム・コードに関する情報を取り扱うプログラム的イベントを記憶するように構成された電子データ記憶と、
特定のコンピュータ実行可能命令を実行する１つ以上のハードウェア・コンピューティング・デバイスを含むイベント・トリガリング・コンピューティング・システムであって、前記イベント・トリガリング・コンピューティング・システムがメッセージ・キュー・システムと通信する前記イベント・トリガリング・コンピューティング・システムを含み、前記イベント・トリガリング・コンピューティング・システムが少なくとも、
前記イベント・トリガリング・コンピューティング・システム上でイベントを検出し、前記イベントは第１の時点に検出され、
前記ユーザの前記プログラム・コードに関する情報を取り扱う前記プログラム的イベントに基づいて、前記イベントが仮想計算システム上の前記ユーザのプログラム・コード実行をトリガするように指示されているかを判定することであって、前記プログラム的イベントが前記電子データ記憶からアクセスされる情報を取り扱い、前記仮想計算システムが前記プログラム・コードを第２の時点に実行開始するように構成され、前記第１の時点と前記第２の時点との間の差として決定される時間幅が所定の継続時間よりも短いものであり、前記判定し、
前記イベントが前記ユーザの前記プログラム・コードの実行をトリガするように指定されていると判定することに応答して、前記データ記憶からアクセスされる前記ユーザのプログラム・コードに関する情報を取り扱う前記プログラム的イベントに、少なくとも部分的に基づいてイベント・メッセージを生成することであって、
前記イベント・メッセージは、前記仮想計算システム上のインスタンス上のコンテナ上の前記ユーザの代わりに前記プログラム・コードを実行するために使用可能なスキーマにおいて編成された、ユーザ・アカウント識別子及びプログラム的情報を少なくとも含み、前記プログラム的情報は、少なくとも（１）前記検出されたイベントに応答して前記実行するプログラム・コードの関数、及び（２）前記プログラム・コードの実行のための１つ以上のイベント・メッセージ・パラメータを指示し、前記生成し、
前記イベント・メッセージを中間メッセージ・キュー・システムに提供することであって、前記中間メッセージ・キュー・システムはさらに前記仮想計算システムと通信する、前記提供する、
ように構成された、
前記システム。
【００８４】
２．前記イベント・トリガリング・システムがリモート・ストレージ・システムであり、前記イベント・メッセージが前記リモート・ストレージ・システムにアップロードされるデータ・ファイルに応答して生成される、条項１に記載の前記システム。
【００８５】
３．前記イベント・トリガリング・システムがデータベース・システムであり、前記イベント・メッセージが前記データベース・システムにおいてアップデートされるデータベース・テーブルに応答して生成される、条項１に記載の前記システム。
【００８６】
４．前記所定の継続時間が１００ｍｓである、条項１に記載の前記システム。
【００８７】
５．特定のコンピュータ実行可能命令を実行する１つ以上のハードウェア・コンピューティング・デバイスを含む補助コンピューティング・システムであって、少なくとも、
仮想計算システム上でユーザのプログラム・コードの実行をトリガするように指定されたイベントを検出し、前記イベントは第１の時点に検出され、
前記イベントの検出に応答して、電子データ記憶からアクセスされる前記ユーザの前記プログラム・コードに関する情報を取り扱うプログラム的イベントに少なくとも部分的に基づいて、イベント・メッセージを生成するように構成される、前記補助コンピューティング・システムを含み、
前記イベント・メッセージは、前記仮想計算システム上のプログラム・コードの実行のためのユーザ・アカウント識別子及びメタデータを少なくとも含み、前記イベント・メタデータは前記実行するプログラム・コードの関数及び前記関数に対する１つ以上の入力パラメータを識別し、前記仮想計算システムは、第２の時点に前記プログラム・コードを開始するように構成され、前記第１の時点と前記第２の時点との間の差として決定される時間幅は所定の継続時間より短いものであり、
前記イベント・メッセージを中間メッセージ・キュー・システムに提供し、前記中間メッセージ・キュー・システムはさらに前記仮想計算システムと通信する、
前記システム。
【００８８】
６．前記補助コンピューティング・システムがリモート・ストレージ・システムであり、前記検出されたイベントが前記リモート・ストレージ・システムにアップロードされるデータ・ファイルである、条項５に記載の前記システム。
【００８９】
７．前記補助コンピューティング・システムがデータベース・システムであり、前記検出されたイベントが前記データベース内のデータベース・テーブル更新操作である、条項５に記載の前記システム。
【００９０】
８．前記補助コンピューティング・システムが前記仮想計算システムから分離して個別のサード・パーティ・コンピューティング・システムである、条項５に記載の前記システム。
【００９１】
９．前記イベント・メタデータが、実行する前記プログラムの前記関数に関するイベント・メッセージを処理するために、前記補助コンピューティング・システム及び前記仮想計算システムの両方によって使用される共有スキーマに従ってフォーマットされる、条項５に記載の前記システム。
【００９２】
１０．前記共有スキーマがリモート・プロシージャ・コールの形式である、条項９に記載の前記システム。
【００９３】
１１．前記イベント・メタデータが、少なくとも（１）オペレーティング・システムであって、前記プログラム・コードがその上で実行されるべき前記オペレーティング・システム、及び（２）前記プログラム・コードが書かれているプログラム言語、のインジケータを含む、条項５に記載の前記システム。
【００９４】
１２．特定の実行可能命令と共に構成された１つ以上のコンピューティング・デバイスによって実施されるように、
イベント・トリガリング・サービス上のイベントを検出し、前記イベントは仮想計算システム上のユーザのプログラム・コードの実行をトリガするように指示され、前記検出は第１の時点に生じ、
前記イベントの検出に応答して、電子データ記憶からアクセスされる前記ユーザの前記プログラム・コードに関する情報を取り扱うプログラム的イベントに少なくとも部分的に基づいて、イベント・メッセージを生成し、
前記イベント・メッセージは、ユーザ・アカウント識別子及び前記仮想計算システム上のプログラム・コードの実行のために使用可能なイベント・メタデータを少なくとも含み、
前記イベント・メッセージを前記仮想計算システムに提供する
ことを含む、コンピュータによる実施方法。
【００９５】
１３．前記イベント・トリガリング・サービスが、前記仮想計算システムから分離した個別のサード・パーティ・コンピューティング・システムによって提供される、条項１２に記載の前記コンピュータによる実施方法。
【００９６】
１４．前記仮想計算システムが、第２の時点に前記プログラム・コードの実行を開始するように構成され、前記第１の時点と前記第２の時点との間の差として決定される時間幅は所定の継続時間より短い、条項１２に記載の前記コンピュータによる実施方法。
【００９７】
１５．前記イベント・メッセージが、前記仮想計算システムからの要求に応答して前記仮想計算システムに直接提供される、条項１４に記載の前記コンピュータによる実施方法。
【００９８】
１６．前記イベント・メッセージが、中間メッセージ・キューによって前記仮想計算システムに間接的に提供される、条項１２に記載の前記コンピュータによる実施方法。
【００９９】
１７．１つ以上のコンピューティング・デバイスによって実行されると、
第１の時点で補助サービス上のイベントを検出し、前記イベントは仮想計算システム上のユーザのプログラム・コードの実行をトリガするように指示され、
前記イベントの検出に応答して、前記ユーザの前記プログラム・コードに関する情報を取り扱うイベントに少なくとも部分的に基づいて、イベント・メッセージを生成し、
前記イベントは電子データ記憶からアクセスされた情報を取り扱い、前記イベント・メッセージは、少なくともアカウント識別子及び前記仮想計算システム上のプログラム・コードの実行のためのイベント・メタデータを含み、前記イベント・メタデータは、前記実行するプログラム・コードの関数及び前記関数に対する１つ以上の入力パラメータを決定するために、前記仮想計算システムによって使用可能なデータを含み、
前記仮想計算システム上の前記プログラム・コードの実行のために前記イベント・メッセージを提供し、前記仮想計算システムは、第２の時点に前記プログラム・コードの実行を開始するように構成され、前記第１の時点と前記第２の時点との間の差として決定される時間幅は所定の継続時間より短いものである
ことを含む操作を実行するように、前記１つ以上のコンピューティング・デバイスを構成する、コンピュータ実行可能命令を記憶する、コンピュータ可読の非一時的記憶媒体。
【０１００】
１８．前記補助サービスが、前記仮想計算システムから分離した個別のサード・パーティ・コンピューティング・システムによって提供される、条項１７に記載の前記コンピュータ可読の非一時的記憶媒体。
【０１０１】
１９．前記補助サービスがリモート・ストレージ・サービスであり、前記イベントが前記リモート・ストレージ・システム上のデータ・ファイル・アップロード・イベントであり、前記実行するプログラム・コードの前記関数が、前記リモート・ストレージ・システム上の前記データ・ファイル・アップロード・イベントの検出に応答して実行されるように指示された、ファイル・アップロード・イベント・ハンドラである、条項１７に記載の前記コンピュータ可読の非一時的記憶媒体。
【０１０２】
２０．前記イベント・メタデータが、実行する前記プログラムの前記関数に関するイベント・メッセージを処理するために、前記補助サービス及び前記仮想計算システムの両方によって使用される共有スキーマに従ってフォーマットされる、条項１７に記載の前記コンピュータ可読の非一時的記憶媒体。
【図１】
0006352535.tif 000002
【図２】
0006352535.tif 000003
【図３】
0006352535.tif 000004
【図４】
0006352535.tif 000005