(57)【要約】  コードの効率的な実行を可能にする方法でオンデマンドコード実行システムに補助機能を提供するためのシステムおよび方法が説明される。ユーザは、コードを送信することにより、システム上でタスクを生成することができる。システムは、送信されたコードがシステム上で実行されるときに必要となる可能性のある補助機能を決定し、送信されたコードを実行する仮想マシンインスタンスと連携して動作するサイドカー仮想マシンインスタンスをプロビジョニングすることによって、これらの補助機能を提供することができる。サイドカーは、タスクごと、ユーザごと、または要求ごとに補助機能を提供することができ、サイドカーのライフサイクルは、送信されたコードを実行する仮想マシンインスタンスのライフサイクルに基づいて決定することができる。したがって、補助機能は、必要な場合にのみ提供することができ、ユーザが他のユーザのサイドカーにアクセスするのを防ぐことによって安全に提供することができる。
2021529386.tif 000002
【特許請求の範囲】
【請求項１】
構成情報を格納する物理データストアと、
実行可能命令で構成されるコンピューティングデバイスと、
を含むシステムであって、
前記コンピューティングデバイスは、
オンデマンドコード実行システム上でユーザ送信コードを実行する要求を受信し、
前記要求に少なくとも部分的に基づいて、複数の仮想マシンインスタンスを決定し、前記複数の仮想マシンインスタンスは、前記ユーザ送信コードを実行するための第１の仮想マシンインスタンスと、補助機能を実行するための第２の仮想マシンインスタンスと、を含み、
前記構成に従って、前記第１の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、
前記構成に従って、前記第２の仮想マシンインスタンスに前記補助機能を実行させ、
前記第１の仮想マシンインスタンス上で前記ユーザ送信コードの実行を監視し、前記第１の仮想マシンインスタンスの実行状態の保留中の変更を検出し、
前記第１の仮想マシンインスタンスの実行状態の前記保留中の変更に少なくとも部分的に基づいて、前記第２の仮想マシンインスタンスの実行状態の変更を決定し、
前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスの実行状態の変更の順序を決定し、
前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスの前記実行状態を前記決定された順序で変更する、
システム。
【請求項２】
前記第１の仮想マシンインスタンスの実行状態の前記保留中の変更は、前記第１の仮想マシンインスタンスのプロビジョニング、前記ユーザ送信コードの実行の開始、前記第１の仮想マシンインスタンスの停止、前記ユーザ送信コードの実行の停止、前記第１の仮想マシンインスタンスの再開、前記ユーザ送信コードの実行の再開、前記ユーザ送信コードの実行の終了、または、前記第１の仮想マシンインスタンスのプロビジョニング解除のうちの１つまたは複数を含む、
請求項１に記載のシステム。
【請求項３】
前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスの前記実行状態を変更する前記順序は、前記第２の仮想マシンインスタンスによって実行される前記補助機能に少なくとも部分的に基づいて決定される、
請求項１に記載のシステム。
【請求項４】
前記補助機能は、カプセル化、ロギング、トレース、デバッグ、スキャン、プロファイリング、入力の検証または出力の検証のうちの１つまたは複数を含む、
請求項１に記載のシステム。
【請求項５】
コンピュータ実装方法であって、
オンデマンドコード実行システム上でユーザ送信コードを実行する要求を受信し、
前記ユーザ送信コードに関連付けられた構成情報を取得し、前記構成情報は、少なくとも前記ユーザ送信コードを実行するように構成された第１の仮想マシンインスタンスと、補助機能を実行するように構成された第２の仮想マシンインスタンスと、を指定し、
前記構成情報に従って、前記第１の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、
前記構成情報に従って、前記第２の仮想マシンインスタンスに前記補助機能を実行させ、
前記第１の仮想マシンインスタンス上での前記ユーザ送信コードの実行に少なくとも部分的に基づいて、前記第１の仮想マシンインスタンスの実行状態の保留中の変更を識別し、
前記第１の仮想マシンインスタンスの実行状態の前記保留中の変更に少なくとも部分的に基づいて、前記第２の仮想マシンインスタンスの実行状態の変更を決定し、
少なくとも前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスの実行状態の変更の順序を決定し、
前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスの前記実行状態を前記決定された順序で変更する、
ことを含むコンピュータ実装方法。
【請求項６】
前記コンピュータ実装方法は、前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスのプロビジョニング順序を決定することをさらに含み、前記プロビジョニング順序に従って、前記第１の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、前記第２の仮想マシンインスタンスに前記補助機能を実行させる、
請求項５に記載のコンピュータ実装方法。
【請求項７】
前記実行状態を変更する前記順序は、前記第２の仮想マシンインスタンスの実行状態の前記変更が、前記第１の仮想マシンインスタンスの実行状態の前記保留中の変更に先行しなければならないことを指定する、
請求項５に記載のコンピュータ実装方法。
【請求項８】
前記コンピュータ実装方法は、前記第１の仮想マシンインスタンスの実行状態の前記保留中の変更を引き起こすことをさらに含む、
請求項５に記載のコンピュータ実装方法。
【請求項９】
前記構成情報は、第２の補助機能を実行するように構成された少なくとも第３の仮想マシンインスタンスをさらに指定し、実行状態変更の前記決定された順序は、前記第３の仮想マシンインスタンスの実行状態変更をさらに含む、
請求項５に記載のコンピュータ実装方法。
【請求項１０】
前記コンピュータ実装方法は、前記第２の仮想マシンインスタンスと通信するように前記第１の仮想マシンインスタンスを構成することをさらに含み、前記第２の仮想マシンインスタンスと通信するように前記第１の仮想マシンインスタンスを構成することは、リダイレクト入力、リダイレクト出力またはパフォーマンス情報へのアクセス許可のうちの１つまたは複数を含む、
請求項５に記載のコンピュータ実装方法。
【請求項１１】
前記第２の仮想マシンインスタンスは、指定されたユーザに関連付けられた複数の仮想マシンインスタンスに対して前記補助機能を実行するように構成され、前記複数の仮想マシンインスタンスのそれぞれは、異なるユーザ送信コードに関連付けられている、
請求項５に記載のコンピュータ実装方法。
【請求項１２】
コンピュータ実行可能命令を含む非一時的なコンピュータ可読媒体であって、
前記コンピュータ実行可能命令は、オンデマンドコード実行システム上で実行されると、前記オンデマンドコード実行システムに、
オンデマンドコード実行システム上で実行可能なユーザ送信コードに関連する構成情報を取得することであって、前記構成情報は、第１の仮想マシンインスタンスに関連する第１の構成および第２の仮想マシンインスタンスに関連する第２の構成を含むことと、
前記第１の構成に従って、前記第１の仮想マシンインスタンスに前記ユーザ送信コードを実行することと、
前記第２の構成に従って、前記第２の仮想マシンインスタンスに補助機能を実行することと、
前記第１の仮想マシンインスタンスの実行状態の保留中の変更に少なくとも部分的に基づいて、前記第２の仮想マシンインスタンスの実行状態の変更を決定することと、
前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスの実行状態を前記構成情報に少なくとも部分的に基づいて、決定された順序で変更することと、
を行わせる非一時的なコンピュータ可読媒体。
【請求項１３】
前記命令は、さらに、前記オンデマンドコード実行システムに、前記ユーザ送信コードを実行するための要求を受信させる、
請求項１２に記載の非一時的なコンピュータ可読媒体。
【請求項１４】
前記命令はさらに、前記オンデマンドコード実行システムに、前記第２の仮想マシンインスタンスをインスタンス化させる、
請求項１２に記載の非一時的なコンピュータ可読媒体。
【請求項１５】
前記命令は、さらに、前記オンデマンドコード実行システムに、複数の事前に構成された仮想マシンインスタンスから前記第２の仮想マシンインスタンスを選択させる、
請求項１２に記載の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピューティングデバイスは、データを交換するために通信ネットワークを利用することができる。企業および組織は、業務を支援するために、またはサービスをサードパーティに提供するためにいくつかのコンピューティングデバイスを相互接続するコンピュータネットワークを運営する。コンピューティングシステムは、単一の地理的位置に位置付けられるか、または（例えば、プライベートもしくはパブリックな通信ネットワークを介して相互接続された）複数の別々の地理的位置に位置付けられる場合がある。具体的には、本明細書では一般的に「データセンタ」と呼ばれるデータセンタまたはデータ処理センタは、コンピューティングリソースをデータセンタのユーザに提供するために、いくつかの相互接続されたコンピューティングシステムを含んでもよい。データセンタは、組織の代わりに運営されるプライベートデータセンタ、または一般大衆の代わりにもしくは一般大衆の利益のために運営されるパブリックデータセンタであり得る。
【０００２】
データセンタリソースの利用度を向上させるために、仮想化技術により、単一の物理コンピューティングデバイスが、データセンタのユーザに対して独立したコンピューティングデバイスとして表示され、かつ動作する仮想マシンの１つまたは複数のインスタンスをホストすることができる。仮想化に伴い、単一の物理コンピューティングデバイスは、仮想マシンの作成、維持、削除、またはその他の方法による管理を動的に行い得る。結果として、ユーザは、単一のコンピューティングデバイス、またはネットワーク接続されたコンピューティングデバイスの構成を含むコンピュータリソースをデータセンタに要求することができ、様々な数の仮想マシンリソースが提供され得る。
【０００３】
いくつかのシナリオでは、仮想マシンインスタンスは、特定の機能性を提供するように、いくつかの仮想マシンインスタンスタイプによって構成されてもよい。例えば、様々なコンピューティングデバイスは、コンピューティングデバイスが、異なる所望の機能性を提供すること、または同様の機能性をより効率的に提供することを可能にするために、オペレーティングシステムまたはオペレーティングシステム構成、仮想ハードウェアリソースおよびソフトウェアアプリケーションの異なる組み合わせに関連付けられてもよい。これらの仮想マシンインスタンスタイプの構成は、多くの場合、デバイス画像内に含有され、そのデバイス画像は、開始すると仮想マシンが起動するソフトウェア（例えば、それらの構成およびデータファイルと一体のＯＳおよびアプリケーションなど）を含有する静的データを含む。デバイス画像は、通常、インスタンスを作成または初期化するために使用されるディスク上に格納される。したがって、コンピューティングデバイスは、所望のソフトウェア構成を実施するために、デバイス画像を処理してもよい。
【図面の簡単な説明】
【０００４】
【図１】オンデマンドコード実行システムが動作して、オンデマンドコード実行システムのユーザによって送信され得るコードに対応するタスクを実行し、送信されたコードの実行を容易にするためのサイドカー仮想マシンインスタンスをプロビジョニングおよび実行することができる例示的な環境を図示するブロック図である。
【図２】図１のオンデマンドコード実行システム上でタスクの実行を容易にするために使用されるサイドカー仮想マシンインスタンスの構成を容易にするように構成されたサイドカー構成システムを提供するコンピューティングデバイスの一般的なアーキテクチャを図示する。
【図３】タスクに対応するコードを図１のオンデマンドコード実行システムに送信し、オンデマンドコード実行システムがサイドカー構成を決定して、オンデマンドコード実行システム上でのタスクの実行を容易にするための例示的な相互作用を図示するフロー図である。
【図４】図１のオンデマンドコード実行システムで提供される決定されたサイドカー構成を利用してタスクを実行するための例示的な相互作用を図示するフロー図である。
【図５】図１のオンデマンドコード実行システム上のサイドカー仮想マシンインスタンスのライフサイクルを管理するための例示的な相互作用を図示するフロー図である。
【図６】図１のオンデマンドコード実行システム上のタスクに対応するコードを実行するサイドカー仮想マシンインスタンスと仮想マシンインスタンスとの間の例示的な相互作用を図示するフロー図である。
【図７】図１のオンデマンドコード実行システムに送信されたコードに基づいてサイドカー構成を決定するための例示的なルーチンを図示するフローチャートである。
【図８】図１のオンデマンドコード実行システム上でタスクを実行している間、サイドカーのライフサイクルを管理するための例示的なルーチンを図示するフローチャートである。
【発明を実施するための形態】
【０００５】
一般的に説明するように、本開示の態様は、オンデマンドコード実行システムに関する。オンデマンドコード実行システムでは、高速なコードの実行が可能になり、これはオンデマンドコード実行システムのユーザによって供給され得る。より詳細には、本開示の実施形態は、「サイドカー」仮想マシンインスタンスの使用によって、オンデマンドコード実行システムに補助機能を実装することに関する。本明細書で詳細に説明するように、オンデマンドコード実行システムは、ユーザがオンデマンドコード実行システム上で仮想マシンインスタンスによって実行されるコンピュータ実行可能コードを送信または指定することを可能にするネットワークにアクセス可能なサービスを提供し得る。オンデマンドコード実行システム上のコードの各セットは「タスク」を定義し、オンデマンドコード実行システムの仮想マシンインスタンス上での実行時に、そのタスクに対応する特定の機能性を実施し得る。オンデマンドコード実行システム上のタスクの個々の実施は、タスクの「実行」（または「タスク実行」）と呼ばれ得る。オンデマンドコード実行システムにより、さらに、ユーザは、ネットワークベースのストレージシステムでの新しいデータの検出、アプリケーションプログラミングインターフェース（「ＡＰＩ」）コールのオンデマンドコード実行システムへの送信、または特別にフォーマットされたハイパーテキストトランスポートプロトコル（「ＨＴＴＰ」）パケットのオンデマンドコード実行システムへの送信など、様々な潜在的なイベントに基づいてタスクの実行をトリガすることができる。したがって、ユーザは、オンデマンドコード実行システムを利用して、コードが実行される基盤となるハードウェアまたはインフラストラクチャの構成または保守を必要とすることなく、任意の指定された実行可能コードを「オンデマンド」で実行することができる。さらに、オンデマンドコード実行システムは、タスクを高速に（例えば、１００ミリ秒［ｍｓ］未満で）実行するように構成することができ、したがって、「リアルタイム」で（例えば、エンドユーザが遅延をほとんど知覚しないか、または全く知覚しない）タスクの実行を可能にする。
【０００６】
オンデマンドコード実行システムは、要求に応じて指定されたタスクを実行する仮想マシンインスタンスをインスタンス化することができる。オンデマンドコード実行システムは、「サイドカー」仮想マシンインスタンスをさらにインスタンス化することができ、これにより、ユーザは、タスクの実行、およびタスクの実行時での仮想マシンインスタンスを制御または監視することができる。例示的には、サイドカー仮想マシンインスタンス（本明細書では「サイドカー」と呼ばれ得る）は、タスクコードを実行する仮想マシンインスタンスを制御、保護、フィルタリング、監視または管理するための１つまたは複数の機能を実装することができる。これらの機能を１つまたは複数のサイドカーに実装することにより、オンデマンドコード実行システムは、タスクコードを実行する仮想マシンインスタンスからこれらの機能を効果的に分離することができる。したがって、サイドカーの実装は、（以下でより詳細に説明するように）サイドカーを必要な場合にのみ利用可能にすることができるため、リソース使用率に関する効率を向上させる。１つのサイドカーを侵害する攻撃者は、他のユーザのサイドカーまたは仮想マシンインスタンスにアクセスすることができないため、サイドカーの実装により、個々のユーザのセキュリティがさらに向上する。
【０００７】
本明細書で使用する場合、「補助機能」は、一般的に、ユーザ送信タスクコードの実行を容易にする機能を指し得る。例えば、補助機能には、カプセル化、ロギング、トレース、デバッグ、スキャン、プロファイリング、入力の検証、出力の検証、またはタスクコードの実行に関連するその他の機能が含まれる場合がある。しかしながら、これらの例は限定的ではなく、他の機能を実行するサイドカーは本開示の範囲内であることが当業者には理解されるであろう。いくつかの実施形態では、補助機能は、管理者レベルの特権で実行されるコントロールプレーン機能を含み得る。サイドカーは、ユーザごと、タスクごと、またはコールごとにこれらの機能を実行するようにインスタンス化することができ、したがって、個々のユーザに、仮想マシンインスタンスの個別のコントロールプレーンへのアクセスを提供することができる。例えば、ネットワークトラフィックをカプセル化するサイドカーを個々のユーザが利用できるようにし、物理基板ネットワークで転送されるパケットを、ユーザがユーザの仮想マシンインスタンスからアクセスすることができる仮想ネットワークに変換することができる。したがって、オンデマンドコード実行システムは、サイドカーを介してネットワークカプセル化を提供することができ、これは、ユーザコードを実行する仮想マシンインスタンスが基板ネットワークにアクセスして他のユーザのトラフィックを潜在的にカプセル化解除することを許可することなく行うことができる。
【０００８】
本開示の観点から当業者によって理解されるように、本明細書に開示する実施形態は、オンデマンドコード実行システムなどのコンピューティングシステムの能力を向上させ、効率的な方法でコードを実行する。さらに、現在開示されている実施形態は、コンピューティングシステムに固有の技術的問題に対処している。具体的には、コードを実行するコンピューティングリソースの性質の制限、「常時オン」の補助機能の提供に関連するリソースオーバーヘッド、利用されていないプロビジョニング機能によって引き起こされる非効率性、および共通のコントロールプレーンを複数のユーザに提供することによって引き起こされるセキュリティの問題などである。これらの技術的な問題は、ユーザ固有またはタスク固有の機能を提供するサイドカー仮想マシンインスタンスを使用した実行環境のプロビジョニングを含む、本明細書で説明する様々な技術的解決策によって対処される。よって、本開示は、概して、既存のデータ処理システムおよびコンピューティングシステムに対する改善を表す。
【０００９】
オンデマンドコード実行システムは、仮想マシンインスタンスのユーザ構成を必要とすることなく、ユーザコード（様々なプログラミング言語のいずれかで構成されたスレッド、プログラムなど）を受信し、高度に拡張性があり低遅延の方法でそのコードを実行するように構成されている、仮想マシンインスタンスマネージャを含んでもよい。具体的には、仮想マシンインスタンスマネージャは、ユーザコードを受信するより前に、かついずれかの特定の仮想マシンインスタンス構成に関するユーザからのいずれかの情報を受信するより前に、それぞれが様々なランタイム環境のいずれか１つまたは複数に対応する所定の構成セットに従って、仮想マシンインスタンスを作成し、構成することができる。その後、仮想マシンインスタンスマネージャは、コードを実行するユーザ起動の要求を受信し、この要求に関連付けられた構成情報に基づいて、コードを実行する事前に構成された仮想マシンインスタンスを識別する。仮想マシンインスタンスマネージャは、さらに、識別した仮想マシンインスタンスを割り当て、割り当てられた仮想マシンインスタンス内にコンテナを作成して構成し、独立コードオブジェクトだけでなくタスクコードもコンテナにプロビジョニングすることにより、ユーザのコードを少なくとも部分的に実行することができる。仮想マシンインスタンスマネージャを実装し、仮想マシンインスタンス上でユーザコードを実行するための様々な実施形態は、「ＰＲＯＧＲＡＭＭＡＴＩＣ  ＥＶＥＮＴ  ＤＥＴＥＣＴＩＯＮ  ＡＮＤ  ＭＥＳＳＡＧＥ  ＧＥＮＥＲＡＴＩＯＮ  ＦＯＲ  ＲＥＱＵＥＳＴＳ  ＴＯ  ＥＸＥＣＵＴＥ  ＰＲＯＧＲＡＭ  ＣＯＤＥ」と題され、２０１４年９月３０日に出願された米国特許番号第９，３２３，５５６号（「５５６特許」）により詳細に説明されており、その全体を参考として本明細書に組み込む。
【００１０】
本明細書に使用される場合、用語「仮想マシンインスタンス」は、ソフトウェア、またはソフトウェアが実行し得る環境またはプラットフォーム（「実行環境」）を提供するハードウェアをエミュレートする他の実行可能コードの実行を指すことを意図する。仮想マシンインスタンスは通常、ハードウェアデバイスによって実行され，これは、仮想マシンインスタンスによってエミュレートされる物理ハードウェアとは異なる場合がある。例えば、仮想マシンは、第２のタイプのプロセッサおよびメモリ上で実行されている間に、第１のタイプのプロセッサおよびメモリをエミュレートすることができる。したがって、仮想マシンを利用して、第２の実行環境（例えば、第２のオペレーティングシステム）を実行している物理デバイス上で、第１の実行環境（例えば、第１のオペレーティングシステム）を対象とするソフトウェアを実行することができる。いくつかの例では、仮想マシンインスタンスによってエミュレートされるハードウェアは、基盤となるデバイスのハードウェアと同じまたは類似している可能性がある。例えば、第１のタイプのプロセッサを備えたデバイスは、それぞれがその第１のタイプのプロセッサのインスタンスをエミュレートする複数の仮想マシンインスタンスを実装することができる。したがって、仮想マシンインスタンスを使用して、デバイスをいくつかの論理サブデバイス（それぞれ「仮想マシンインスタンス」と呼ばれる）に分割することができる。仮想マシンインスタンスは通常、基盤となる物理デバイスのハードウェアとは異なる抽象化レベルを提供することができるが、この抽象化は必須ではない。例えば、デバイスが複数の仮想マシンインスタンスを実装し、それぞれがデバイスによって提供されるものと同一のハードウェアをエミュレートすると仮定する。このようなシナリオでは、各仮想マシンインスタンスにより、ソフトウェアアプリケーションは、他の仮想マシンインスタンス上で実行されているソフトウェアアプリケーション間の論理的な分離を維持しながら、変換を伴うことなく、基盤となるハードウェア上でコードを実行することができる。一般的に「ネイティブ実行」と呼ばれるこのプロセスは、仮想マシンインスタンスの速度またはパフォーマンスを向上させるために利用することができる。ハードウェアパススルー技法など、基盤となるハードウェアを直接利用することができる他の技法も使用することができる。
【００１１】
オペレーティングシステムを実行する仮想マシンは、実行環境の一例として本明細書に記載されているが、他の実行環境も可能である。例えば、タスクまたは他のプロセスは、ハードウェアの仮想化を提供することなくランタイム環境を提供するソフトウェア「コンテナ」内で実行することができる。コンテナは、追加のセキュリティを提供するために仮想マシン内に実装することができるか、または仮想マシンインスタンスの外部で実行することができる。
【００１２】
本開示の上に述べた態様と付随する利点の多くとは、添付の図面と併用されると、以下の説明を参照することにより、それらが一層よく理解されるようになるので、さらに容易に認識されるようになる。
【００１３】
図１は、オンデマンドコード実行システム１１０が、ユーザコンピューティングデバイス１０２、補助サービス１０６およびネットワークベースのデータストレージサービス１０８との通信に基づいて動作することができる例示的な動作環境１００のブロック図である。例示では、デスクトップコンピュータ、ラップトップおよび携帯電話を含む、オンデマンドコード実行システム１１０と通信する様々な例示的なユーザコンピューティングデバイス１０２が示される。一般的に、ユーザコンピューティングデバイス１０２は、デスクトップ、ラップトップまたはタブレットコンピュータ、パーソナルコンピュータ、ウェアラブルコンピュータ、サーバ、パーソナルデジタルアシスタント（ＰＤＡ）、ハイブリッドＰＤＡ／携帯電話、携帯電話、電子ブックリーダ、セットトップボックス、音声コマンドデバイス、カメラおよびデジタルメディアプレーヤなどの、任意のコンピューティングデバイスとすることができる。オンデマンドコード実行システム１１０は、１つまたは複数のユーザインターフェース、コマンドラインインターフェース（ＣＬＩ）、アプリケーションプログラミングインターフェース（ＡＰＩ）、および／またはユーザ実行可能コード（例えば、アップロードされたコードの依存コードオブジェクトを識別するメタデータを含む）を生成およびアップロードするための他のプログラマチックインターフェースを伴うユーザコンピューティングデバイス１０２を提供し、ユーザ提供コードを呼び出し（例えば、オンデマンドコード実行システム１１０上でユーザコードを実行する要求を送信する）、イベントごとのジョブもしくは時限ジョブをスケジューリングし、ユーザ提供コードを追跡し、および／またはそれらの要求および／またはユーザコードに関連する情報の他のロギングもしくは管理を監視する。１つまたは複数の実施形態がユーザインターフェースを使用して本明細書に説明され得るが、そのような実施形態が、付加的または代替的に、ＣＬＩ、ＡＰＩ、または他のプログラマチックインターフェースを使用し得ることを理解されたい。
【００１４】
例示的な環境１００はさらに、ユーザの代わりに所望の機能を実装するために、オンデマンドコード実行環境１１０と相互作用することができる１つまたは複数の補助サービス１０６を含む。補助サービス１０６は、オンデマンドコード実行環境１１０にアクセス可能なデータを生成するか、別様には、オンデマンドコード実行環境１１０と通信するサーバなどのネットワーク接続されたコンピューティングデバイスに対応することができる。例えば、補助サービス１０６は、ウェブサービス（例えば、ユーザコンピューティングデバイス１０２、オンデマンドコード実行システム１１０またはサードパーティに関連付けられている）、データベース、リアリーシンプルシンジケーション（「ＲＳＳ」）リーダ、ソーシャルネットワーキングサイトまたはネットワークにアクセス可能なサービスもしくはデータソースの他のソースを含むことができる。いくつかの例では、補助サービス１０６は、例えば、請求またはロギングサービスをオンデマンドコード実行システム１１０に提供するために、オンデマンドコード実行システム１１０に関連付けられ得る。いくつかの例では、補助サービス１０６は、ＡＰＩコールまたは他のタスクトリガ情報などの情報をオンデマンドコード実行システム１１０に能動的に送信する。他の例では、補助サービス１０６は、オンデマンドコード実行システム１１０によるアクセスのためにデータが利用可能になるように、受動的であり得る。例えば、オンデマンドコード実行システム１１０の構成要素は、そのような受動データソースを定期的にポーリングし、提供されたデータに基づいてオンデマンドコード実行システム１１０内のタスクの実行をトリガすることができる。図１では、ユーザコンピューティングデバイス１０２およびオンデマンドコード実行システム１１０とは異なるものとして図示されているが、いくつかの実施形態では、様々な補助サービス１０６は、ユーザコンピューティングデバイス１０２またはオンデマンドコード実行システム１１０のいずれかによって実装され得る。
【００１５】
例示的な環境１００はさらに、１つまたは複数の持続的または実質的な永続データソースを格納し、ここからデータを取得するために、オンデマンドコード実行システム１１０を有効にするように構成された１つまたは複数のネットワークベースのデータストレージサービス１０８を含み得る。例示的には、ネットワークベースのデータストレージサービス１０８は、オンデマンドコード実行システム１１０が、コードまたはメタデータなどのタスクに対応する情報を格納し、タスクの依存関係を表す追加のコードオブジェクトを格納し、タスクの実行中に処理されるデータを取得し、その実行に関する情報（例えば、結果など）を格納することを可能にし得る。ネットワークベースのデータストレージサービス１０８は、例えば、リレーショナルデータベースまたは非リレーショナルデータベースを表し得る。別の例では、ネットワークベースのデータストレージサービス１０８は、ファイルシステムとして配置されたデータへのアクセスを提供するように構成されたネットワークアッタチトストレージ（ＮＡＳ）を表し得る。ネットワークベースのデータストレージサービス１０８はさらに、オンデマンドコード実行システム１１０が、多数の関連ファイルまたは記録、これらのファイルまたは記録のサイズ、ファイルまたは記録の名前、ファイルまたは記録の作成時間などを問い合わせることなどによって、オンデマンドコード実行システム１１０内に格納されたデータに関する情報の問い合わせおよび取得を可能にし得る。いくつかの例では、ネットワークベースのデータストレージサービス１０８は、データを論理グループ（例えば、個々のアカウントなどに関連付けられたグループ）に分離する機能などの追加機能を提供し得る。補助サービス１０６とは異なるものとして示されているが、ネットワークベースのデータストレージサービス１０８は、場合によっては、一種の補助サービス１０６を表すこともできる。
【００１６】
ユーザコンピューティングデバイス１０２、補助サービス１０６およびネットワークベースのデータストレージサービス１０８は、ネットワーク１０４を介してオンデマンドコード実行システム１１０と通信することができ、ネットワーク１０４は、任意の有線ネットワーク、無線ネットワークまたはそれらの組み合わせを含み得る。例えば、ネットワーク１０４は、パーソナルエリアネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、（例えば、ラジオまたはテレビのための）無線放送ネットワーク、ケーブルネットワーク、衛星ネットワーク、携帯電話ネットワーク、またはそれらの組み合わせであってもよい。さらなる例として、ネットワーク１０４は、インターネットなど、様々な別個の関係者によって運営されている可能性のある、連結されたネットワークのうちのパブリックにアクセス可能なネットワークであってもよい。いくつかの実施形態では、ネットワーク１０４は、企業または大学のイントラネットなどのプライベートまたはセミプライベートネットワークであり得る。ネットワーク１０４は、汎欧州デジタル移動電話方式（ＧＳＭ）ネットワーク、符号分割多重アクセス（ＣＤＭＡ）ネットワーク、ロングタームエボリューション（ＬＴＥ）ネットワークなどの１つまたは複数の無線ネットワーク、または他の任意のタイプの無線ネットワークを含み得る。ネットワーク１０４は、インターネットまたは他の前に述べたタイプのいずれかのネットワークを介して通信するためのプロトコルおよび構成要素を使用することができる。例えば、ネットワーク１０４に使用されるプロトコルは、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、ハイパーテキスト転送プロトコル保全（ＨＴＴＰＳ）、メッセージ待ち行列テレメトリートランスポート（ＭＱＴＴ）、制約アプリケーションプロトコル（ＣｏＡＰ）、および同等物を含んでもよい。インターネット、または他の上に述べたタイプのいずれかの通信ネットワークを介して通信するためのプロトコルおよび構成要素は当業者にとって周知であり、したがって本明細書では、さらに詳細には記載していない。
【００１７】
オンデマンドコード実行システム１１０は、１つまたは複数の（図１に示さない）コンピュータネットワークを使用して相互接続された、いくつかのコンピュータシステムを含む分散コンピューティング環境において動作するものとして図１に図示される。オンデマンドコード実行システム１１０は、図１に示されているよりも少ない数または多い数のデバイスを有するコンピューティング環境内で動作することもできる。したがって、図１のオンデマンドコード実行システム１１０の図示は、説明のためのものとして解釈されるべきであり、本開示を限定するものではない。例えば、オンデマンドコード実行システム１１０またはその様々な構成要素は、様々なウェブサービス構成要素、ホストもしくは「クラウド」コンピューティング環境、および／またはピアツーピアネットワーク構成を実装し、本明細書に説明されるプロセスの少なくとも一部を実施することができる。
【００１８】
さらに、オンデマンドコード実行システム１１０は、ハードウェア、またはハードウェアデバイスによって実行されるソフトウェアに直接実装されてもよく、例えば、本明細書で説明される様々な機能を実施するためのコンピュータ実行可能命令を実行するように構成された物理コンピュータハードウェア上に実装される１つまたは複数の物理サーバまたは仮想サーバを含んでもよい。１つまたは複数のサーバは、例えば、１つまたは複数のデータセンタ内に、地理的に分散しているか、または地理的に同じ場所に配置されている場合がある。いくつかの例では、１つまたは複数のサーバは、多くの場合、「クラウドコンピューティング環境」と呼ばれる、迅速にプロビジョニングおよび解放が行われるコンピューティングリソースのシステムの一部として動作し得る。
【００１９】
図１の例では、オンデマンドコード実行システム１１０は、ネットワーク１０４に接続されるように例示される。いくつかの実施形態では、オンデマンドコード実行システム１１０内の任意の構成要素は、ネットワーク１０４を介してオンデマンドコード実行システム１１０の他の構成要素と通信することができる。他の実施形態では、オンデマンドコード実行システム１１０内のすべての構成要素が、仮想環境１００の他の構成要素と通信可能であるとは限らない。一例では、フロントエンド１２０（いくつかの例では、複数のフロントエンド１２０を表し得る）だけが、ネットワーク１０４に接続されてもよく、オンデマンドコード実行システム１１０の他の構成要素は、フロントエンド１２０を介して、環境１００の他の構成要素と通信してもよい。
【００２０】
図１では、ユーザは、ユーザコンピューティングデバイス１０２を介して、オンデマンドコード実行システム１１０と相互作用して実行可能コードを提供し、オンデマンドコード実行システム１１０上でそのようなコードをいつどのように実行すべきかを定義するルールまたは論理を確立することができ、これのようにして「タスク」を確立する。例えば、ユーザは、ユーザが開発したウェブまたはモバイルアプリケーションと通信する数個のコードを起動することを望み得る。コードを起動する１つの方法は、仮想マシンインスタンスを、サービスとしてインフラストラクチャを提供するサービスプロバイダから獲得し、ユーザの要望に合わせるように仮想マシンインスタンスを構成し、コードを起動するように構成された仮想マシンインスタンスを使用するためのものであろう。このプロセスの複雑性を回避するために、ユーザは、代わりに、オンデマンドコード実行システム１１０にコードを提供し、オンデマンドコード実行システム１１０にコードを実行するように要求することができる。オンデマンドコード実行システム１１０は、コード実行要求に基づいて、計算能力（例えば、下記により詳細に説明される、コンテナ、インスタンスなど）の獲得および構成に対処することができ、計算能力を使用して、コードを実行することができる。オンデマンドコード実行システム１１０は、量に基づいて、自動的にスケールアップおよびスケールダウンしてもよく、これにより過度の利用（例えば、かなり少ない計算リソースの取得および性能問題への影響）、少ない利用（例えば、コードを実行するために必要以上に大きい計算リソースを取得することにより過剰な支払いが発生する）について心配しなければならない負担から、ユーザを解放する。本開示の実施形態によれば、以下でより詳細に説明するように、オンデマンドコード実行システム１１０は、ユーザのコードをより効率的に実行し、コンピューティングリソースの利用を減らすように、カスタマイズされたオペレーティングシステムで仮想マシンインスタンスを構成することができる。
【００２１】
オンデマンドコード実行システム１１０との相互作用を可能にするために、システム１１０は、オンデマンドコード実行システム１１０との相互作用を可能にする１つまたは複数のフロントエンド１２０を含む。例示的な実施形態では、フロントエンド１２０は、オンデマンドコード実行システム１１０によって提供される他のサービスへの「フロントドア」として機能し、ユーザが（ユーザコンピューティングデバイス１０２を介して）コンピュータ実行可能コードを提供し、実行を要求し、および結果を表示することを可能にする。フロントエンド１２０は、オンデマンドコード実行システム１１０と他のコンピューティングデバイスとの間の相互作用を可能にするための様々な構成要素を含む。例えば、各フロントエンド１２０は、ユーザコンピューティングデバイス１０２に、ユーザ指定コードをオンデマンドコード実行システム１１０にアップロードまたは別様には通信し、その後、そのコードの実行を要求する機能を提供する要求インターフェースを含み得る。一実施形態では、要求インターフェースは、グラフィカルユーザーインターフェース（ＧＵＩ）、ＣＬＩまたはＡＰＩを介して外部コンピューティングデバイス（例えば、ユーザコンピューティングデバイス１０２、補助サービス１０６など）と通信する。フロントエンド１２０は要求を処理し、要求が適切に許可されたことを確認する。例えば、フロントエンド１２０は、要求に関連付けられるユーザが、要求で指定されたユーザコードにアクセスすることが許可されているかどうかを決定してもよい。
【００２２】
本明細書で使用されるユーザコードへの言及は、特定のプログラム言語で記述された任意のプログラムコード（例えば、プログラム、ルーチン、サブルーチン、スレッド等）を指し得る。本開示では、用語「コード」、「ユーザコード」および「プログラムコード」は、互換的に使用されてもよい。このようなユーザコードは、例えば、ユーザによって開発された特定のウェブアプリケーションまたはモバイルアプリケーションに関連して、特定の機能を実現するように実行され得る。上記のように、ユーザコードの個々のコレクション（例えば、特定の機能を実現するため）は、本明細書では「タスク」と呼ばれ、そのコードの特定の実行（例えば、コードのコンパイル、コードの解釈または別様にはコードを実行可能化にすること）は「タスク実行」または単に「実行」と呼ばれる。タスクは、非限定的な例として、ＪａｖａＳｃｒｉｐｔ（例えば、ｎｏｄｅ．ｊｓ）、Ｊａｖａ、Ｐｙｔｈｏｎおよび／またはＲｕｂｙ（および／または別のプログラミング言語）で記述され得る。タスクは、様々な方式で、オンデマンドコード実行システム１１０で実行するために「トリガ」され得る。一実施形態では、ユーザまたは他のコンピューティングデバイスは、タスクを実行する要求を送信してよく、それは、一般的に、タスクを実行する「コール」と呼ばれ得る。このようなコールは、実行されるユーザコード（または、その場所）および、ユーザコードを実行するために使用される１つまたは複数の引数を含み得る。例えば、コールは、タスクを実行する要求と併せてタスクのユーザコードを提供し得る。別の例では、コールは、その名前または識別子によって、以前にアップロードされたタスクを識別し得る。さらに別の例では、タスクに対応するコードは、タスクに対するコールに含まれてよく、さらに、要求がオンデマンドコード実行システム１１０によって受信される前に、別個の場所（例えば、補助サービス１０６のストレージまたはオンデマンドコード実行システム１１０の内部のストレージシステム）にアップロードされる。上記のように、タスクのコードは、タスクの実行前にコードオブジェクトが実行環境内のタスクのコードと組み合わされるように、それらのコードオブジェクトの識別子を使用することによって、オンデマンドコード実行システム１１０に維持される追加のコードオブジェクトを参照することができる。オンデマンドコード実行システム１１０は、タスクコールが処理されるときのタスクのコードが利用可能である場所に基づいて、そのタスクの実行戦略を変更させ得る。フロントエンド１２０の要求インターフェースは、ユーザから、ハイパーテキスト転送プロトコルセキュア（ＨＴＴＰＳ）要求としてタスクを実行するためのコールを受信し得る。さらに、ＨＴＴＰＳ要求に含まれる任意の情報（例えば、ヘッダおよびパラメータ）も、タスクを実行するときに処理され利用され得る。上記に説明されたように、例えば、ＨＴＴＰ、ＭＱＴＴおよびＣｏＡＰを含む任意の他のプロトコルは、タスクコールを含むメッセージを要求インターフェース１２２に転送するために使用され得る。
【００２３】
タスクを実行するためのコールが、タスクに対応するユーザコードと併せて使用すべき１つまたは複数の（ネイティブライブラリを含む）サードパーティライブラリを指定してもよい。一実施形態では、コールは、実行を要求されたタスクに対応するユーザコードおよび任意のライブラリ（および／または、その格納場所の識別）を含むファイルを、オンデマンドコード実行システム１１０に提供してよい。いくつかの実施形態では、コールは、実行すべきタスクのプログラムコード、プログラムコードが記述された言語、コールと関連付けられたユーザおよび／またはプログラムコードを実行するために確保すべきコンピューティングリソース（例えば、メモリなど）を示すメタデータを含む。例えば、タスクのプログラムコードは、コールとともに提供されてよく、ユーザによって事前にアップロードされてよく、オンデマンドコード実行システム１１０（例えば、標準化されたルーチン）によって提供されてよく、および／またはサードパーティによって提供されてよい。例示的には、コールに含まれていないか、または以前にユーザによってアップロードされたコードは、コードに関連付けられたＵＲＩを使用することによって、タスクのメタデータ内で参照され得る。いくつかの実施形態では、そのようなリソースレベルの制約（例えば、特定のユーザコードを実行するために、割り当てられる予定のメモリの容量）は、特定のタスクに対して指定され、タスクの実行ごとには変更することはできない。そのような場合、オンデマンドコード実行システム１１０は、各個別のコールが受信される前に、そのようなリソースレベルの制約にアクセスすることができ、個々のコールは、そのようなリソースレベルの制約を指定しなくてもよい。いくつかの実施形態では、コールは、タスクを実行するためにコールが呼び出す許可または権限の種類を指示する許可データなどの他の制約を指定することができる。係る許可データは、（例えば、プライベートネットワーク上の）プライベートリソースにアクセスするためにオンデマンドコード実行システム１１０によって使用され得る。いくつかの実施形態では、個々のコードオブジェクトはまた、許可または認証に関連付けられ得る。例えば、サードパーティがコードオブジェクトを送信し、そのオブジェクトをユーザのサブセットのみが読み取り可能として指定する場合がある。オンデマンドコード実行システム１１０は、コードオブジェクトに関してこれらの許可または認証を実施するための機能を含み得る。
【００２４】
いくつかの実施形態では、コールは、コールを処理するために採用されるべき動作を指定してよい。そのような実施形態では、コールは、コールで参照されるタスクを実行するための１つまたは複数の実行モードを有効にするためのインジケータを含んでもよい。例えば、コールは、タスクの実行に関連して生成され得るデバッグおよび／またはロギングの出力が（例えば、コンソールユーザインターフェースを介して）ユーザに返されるデバッグモードでタスクが実行される必要があるかどうかを示すフラグまたはヘッダを含んでもよい。このような例では、オンデマンドコード実行システム１１０がコールを調べ、フラグまたはヘッダを検索してもよく、フラグまたはヘッダが存在する場合には、オンデマンドコード実行システム１１０は、タスクが実行されるコンテナの動作（例えば、ロギング機能）を変更し、出力データがユーザに返されるようにしてもよい。いくつかの実施形態では、動作／モードインジケータは、オンデマンドコード実行システム１１０によってユーザに提供されるユーザインターフェースによってコールに追加される。ソースコードプロファイリング、リモートデバッギングなどの他の機能も、コールで提供される表示に基づいて、有効または無効にされてもよい。
【００２５】
コード実行のための要求を管理するために、フロントエンド１２０は、要求されたタスクの実行の記録を維持することができる実行キュー（図１には図示せず）を含むことができる。例示的には、オンデマンドコード実行システム１１０による同時に行うタスク実行の数は制限されており、そのため、オンデマンドコード実行システム１１０で開始される新しいタスク実行（例えば、ＡＰＩコールを介して、実行済みまたは実行中のタスクからのコールを介してなど）は、実行キュー１２４に配置されてよく、例えば、先入れ先出しの順序で処理されてよい。いくつかの実施形態では、オンデマンドコード実行システム１１０は、各ユーザアカウントの個別の実行キューなど、複数の実行キューを含むことができる。例えば、オンデマンドコード実行システム１１０のユーザは、（例えば、コスト上の理由で）オンデマンドコード実行システム１１０でのタスク実行の速度を制限することを望むことができる。したがって、オンデマンドコード実行システム１１０は、アカウント固有の実行キューを利用して、特定のユーザアカウントによるタスクの同時実行の速度を調節することができる。いくつかの例では、オンデマンドコード実行システム１１０は、特定のアカウントまたは指定された優先順位のタスク実行が実行キュー内で回避または優先されるように、タスク実行に優先順位を付けることができる。他の例では、オンデマンドコード実行システム１１０は、そのタスクのコールを受信した直後または実質的に直後にタスクを実行することができ、したがって、実行キューを省略してもよい。
【００２６】
上記のように、タスクは、ユーザコンピューティングデバイス１０２（例えば、要求インターフェースで受信されるように）からの明示的なコールに基づいて、オンデマンドコード実行システム１１０で実行するためにトリガされてもよい。代替的または追加的に、タスクは、１つまたは複数の補助サービス１０６またはネットワークベースのデータストレージサービス１０８から取得されたデータに基づいて、オンデマンドコード実行システム１１０で実行するためにトリガされ得る。補助サービス１０６との相互作用を容易にするために、フロントエンド１２０は、データについて補助サービス１０６またはデータストレージサービス１０８をポーリングするように動作するポーリングインターフェース（図１には図示しない）を含むことができる。例示的には、ポーリングインターフェースは、新たに利用可能なデータ（例えば、ソーシャルネットワークの「投稿」、ニュース記事、ファイル、記録など）を取得するために、１つまたは複数のユーザ指定の補助サービス１０６またはデータストレージサービス１０８に定期的に要求を送信し、そのデータが、オンデマンドコード実行システム１１０上でタスクの実行をトリガするユーザの確立基準に対応するかどうかを決定することができる。例示的には、タスクの実行基準は、新しいデータが補助サービス１０６またはデータストレージサービス１０８で利用可能であるかどうか、データのタイプもしくはコンテンツ、またはデータに対応するタイミング情報を含み得るが、これらに限定されない。いくつかの例では、補助サービス１０６またはデータストレージサービス１０８は、フロントエンド１２０に新しいデータの利用可能性を通知するように機能することができ、したがって、ポーリングサービスは、そのようなサービスに関して不必要であり得る。
【００２７】
明示的なユーザコールに基づいて実行されるタスクおよび補助サービス１０６からのデータに加えて、オンデマンドコード実行システム１１０は、いくつかの例では、独立して、タスクのトリガを実行するように動作し得る。例えば、オンデマンドコード実行システム１１０は、（ユーザからの指示に基づいて）動作して、いくつかの指定された時間間隔（例えば、１０分ごと）それぞれでタスクの実行をトリガすることができる。
【００２８】
フロントエンド１２０は、オンデマンドコード実行システム１１０上でのタスクの実行に関する情報を出力するように構成された出力インターフェース（図１には図示しない）をさらに含むことができる。例示的には、出力インターフェースは、タスク実行に関するデータ（例えば、タスクの結果、タスク実行に関連するエラー、または実行を完了するために必要な合計時間、実行を介して処理された合計データなどのタスク実行の詳細）を、例えば、課金またはロギングサービスを含み得るユーザコンピューティングデバイス１０２または補助サービス１０６に送信することができる。出力インターフェースはさらに、サービスコールなど、送信をデータの補助サービス１０６に対して行うことができる。例えば、出力インターフェースは、タスクの実行中に利用されて、（例えば、タスクの実行中に生成されたデータを格納するため）ＡＰＩ要求を外部サービス１０６に送信することができる。
【００２９】
いくつかの実施形態では、オンデマンドコード実行システム１１０は、複数のフロントエンド１２０を含んでもよい。そのような実施形態では、ロードバランサ（図１には図示しない）は、例えば、ラウンドロビン方式で、着信コールを複数のフロントエンド１２０に分散するように提供されてもよい。いくつかの実施形態では、ロードバランサが着信コールを複数のフロントエンド１２０に分散する方法は、オンデマンドコード実行システム１１０の他の構成要素の場所または状態に基づくことができる。例えば、ロードバランサは、地理的に近くのフロントエンド１２０に、またはコールを処理する能力のあるフロントエンドにコールを分散する場合がある。各フロントエンド１２０が、以下に説明するアクティブプール１４０Ａなどのオンデマンドコード実行システムの別の構成要素の個々のインスタンスに対応する場合、ロードバランサは、それらの他の構成要素の容量または負荷に従ってコールを分散することができる。以下でより詳細に説明するように、いくつかの例では、タスクを実行するための所与のコールが常に（またはほとんど常に）同じフロントエンド１２０にルーティングされるように、コールがフロントエンド１２０間で決定論的に分散され得る。これは、例えば、タスクの正確な実行記録を維持して、タスクが必要な回数だけ実行されるようにするのに役立ち得る。ロードバランサを介したコールの分散が例示的に説明されているが、エニーキャストルーティングなどの他の分散技法が当業者には明らかであろう。
【００３０】
タスクの実行を容易にするために、オンデマンドコード実行システム１１０は、次に、１つまたは複数のサイドカー画像を含む１つまたは複数のサイドカーライブラリ１３０を含む。図１に示される例では、サイドカーライブラリ１３０は、オペレーティングシステム１３２Ａおよびエージェント１３２Ｂを含むサイドカー画像１３２と、オペレーティングシステム１３４Ａおよびエージェント１３４Ｂを含むサイドカー画像１３４とを含む。いくつかの実施形態では、オペレーティングシステム１３２Ａおよびオペレーティングシステム１３４Ａは、同じオペレーティングシステムであり得る。以下でより詳細に説明するように、エージェント１３２Ｂおよび１３４Ｂは、１つまたは複数の仮想マシンインスタンスと通信するように構成された場合、１つまたは複数の補助機能を実行することができる。いくつかの実施形態では、サイドカーライブラリ１３０は、補助機能を実行するエージェント（例えば、エージェント１３２Ｂおよび１３４Ｂ）のみを含み、サイドカーは、サイドカーライブラリ１３０からのエージェントのうち１つまたは複数で仮想マシンインスタンスをプロビジョニングすることによって作成される。
【００３１】
オンデマンドコード実行システム１１０はさらに、サイドカー構成システム１６０を含み、これは、本開示の態様を実装し、例えば、特定のタスクに対する仮想マシンインスタンスおよびサイドカーインスタンスの決定および構成を含む。いくつかの実施形態では、サイドカー構成システム１６０は、仮想マシン構成ユニット１６２を含み、これは、ユーザがフロントエンド１２０を介してコードを送信して、送信されたコードにより仮想マシン構成を決定するときに呼び出され得る。以下でより詳細に説明するように、仮想マシン構成ユニット１６２は、ユーザのコードを分析し、ユーザ送信コードの実行前、実行中および／または実行後に、例えば、オペレーティングシステムの「フック」、入力および／または出力リダイレクト、または仮想マシンインスタンスと様々なサイドカーとの間の相互作用を容易にする他の変更を識別することができる。様々な実施形態では、仮想マシン構成ユニット１６２は、ユーザのコードを分析するか、またはユーザ要求を処理して、仮想マシン構成を決定することができる。さらなる実施形態では、オンデマンドコード実行システム１１０は、サイドカー構成ユニット１６４を含み、これは、仮想マシンインスタンス（複数可）との相互作用を容易にするためのサイドカーの任意の構成によりプロビジョニングされるサイドカーを識別し得る。サイドカー構成ユニット１６４は、例えば、サイドカーが実行すべき入力検証を識別し、それらを実行するようにサイドカーを構成することができる。例えば、ユーザ送信コードは、特定のフォーマットで入力データを処理することができ、したがって、サイドカー構成を決定して、入力データがそのフォーマットであることを検証することができる。
【００３２】
オンデマンドコード実行システムは、さらに、着信コールを提供するために使用されるインスタンスを管理してタスクを実行し、これらのインスタンスための補助機能を提供するために使用されるサイドカーを管理する１つまたは複数のワーカーマネージャ１４０を含む。図１に例示される例では、各ワーカーマネージャ１４０は、１人または複数のユーザに現在割り当てられ、１つまたは複数の物理ホストコンピューティングデバイスによって実装される仮想マシンインスタンスのグループ（「プール」として呼ばれることがある）であるアクティブプール１４０Ａを管理する。仮想マシンインスタンスは特定のユーザに割り当てられるように本明細書に説明されるが、いくつかの実施形態では、インスタンスがユーザのグループに割り当てられてよく、これにより、インスタンスがユーザのグループに関係付けられ、グループの任意のメンバがインスタンス上のリソースを利用することができる。例えば、同じグループ内のユーザは、（例えば、そのセキュリティ証明書に基づいて）同じセキュリティグループに属してもよく、それにより、別のメンバのタスクが同じインスタン上の別のコンテナ内で実行された後で特定のインスタンス上のコンテナ内の一方のメンバのタスクを実行することは、セキュリティ上のリスクを引き起こさない。同様に、ワーカーマネージャ１４０は、１つまたは複数のポリシに従って、インスタンスおよびコンテナを割り当ててもよく、そのポリシは、どの要求がどのコンテナ内で実行できるか、どのインスタンスがどのユーザに割り当てられるかを指図する。例示的なポリシは、インスタンスが同じアカウント（例えば、オンデマンドコード実行システム１１０によって提供されるサービスにアクセスするためのアカウント）を共有するユーザのコレクションに割り当てられることを指定してもよい。いくつかの実施形態では、同じユーザグループに関係付けられる要求は、同じコンテナを共有してもよい（例えば、それに関連するユーザコードが同一である場合）。いくつかの実施形態では、タスクは、グループの異なるユーザ間の違いを区別せず、タスクに関連付けられるユーザが属するグループを単に示す。
【００３３】
タスクを実行するためのイベントのトリガがフロントエンド１２０によって正常に処理された後、フロントエンド１２０は、タスクを実行するワーカーマネージャ１４０に要求を渡す。一実施形態では、各フロントエンド１２０は、対応するワーカーマネージャ１４０（例えば、フロントエンド１２０と同じ場所にあるか地理的に近いワーカーマネージャ１４０）に関連付けられてよく、したがって、フロントエンド１２０は、ほとんどまたはすべての要求をそのワーカーマネージャ１４０に渡すことができる。別の実施形態では、フロントエンド１２０は、実行要求を渡すワーカーマネージャ１４０を決定するように構成されたロケーションセレクタを含み得る。一実施形態では、ロケーションセレクタは、コールをハッシュすることに基づいてコールを受信するようにワーカーマネージャ１４０を決定し、ハッシュ値に基づいて（例えば、ハッシュリングを介して）選択されたワーカーマネージャ１４０にコールを分散することができる。ワーカーマネージャ１４０間でコールを分散するための他の様々なメカニズムは、当業者には明らかであろう。本開示の実施形態によれば、ワーカーマネージャ１４０は、仮想マシンインスタンスをプロビジョニングするときに、仮想マシン構成および／またはサイドカー構成を取得することができる。
【００３４】
図１に示されるように、インスタンスは、オペレーティングシステム（ＯＳ）、言語ランタイムおよびコンテナを有してもよい。コンテナは、ＯＳおよびランタイムおよびコンテナにロードされた様々なタスクに対応するユーザコードの個別コピーを有してよい。図１の例では、ワーカーマネージャ１４０によって管理されるアクティブプール１４０Ａは、仮想マシンインスタンス１５０を含む。インスタンス１５０は、オペレーティングシステム１５０Ａおよびユーザコード１５０Ｂを含む。いくつかの実施形態では、ワーカーマネージャ１４０は、アクティブプール１４０Ａ内のインスタンスのリストを維持してもよい。インスタンスのリストは、さらに、インスタンスの構成（例えば、ＯＳ、ランタイム、コンテナなど）を指定してもよい。いくつかの実施形態では、ワーカーマネージャ１４０は、ウォーミングプール内のインスタンスのリスト（例えば、インスタンスの数および種類を含む）へのアクセスを有してもよい。他の実施形態では、ワーカーマネージャ１４０は、ウォーミングプール内の仮想マシンインスタンスの認識を有することなく、計算能力をウォーミングプールマネージャに要求する。
【００３５】
アクティブプール１４０Ａは、サイドカー１５２およびサイドカー１５４などの１つまたは複数のサイドカー仮想マシンインスタンスをさらに含むことができる。図１に図示するように、サイドカー１５２は、ＯＳ１５２Ａおよびエージェント１５２Ｂを含み、サイドカー１５４は、ＯＳ１５４Ａおよびエージェント１５４Ｂを含む。いくつかの実施形態では、サイドカー１５２および１５４の一方または両方は、サイドカーライブラリ１３０からのサイドカー画像１３２または１３４のプロビジョニングされたインスタンスに対応し得る。サイドカー１５２および１５４は、以下でより詳細に説明するように、ユーザコード１５０Ｂを実行する仮想マシンインスタンス１５０と併せて１つまたは複数の補助機能を提供することができる。
【００３６】
ワーカーマネージャ１４０は、サイドカーライフサイクル管理ユニット１４２をさらに含むことができる。以下でより詳細に説明するように、サイドカーライフサイクル管理ユニット１４２は、仮想マシンインスタンス１５０などの仮想マシンインスタンスのライフサイクルを監視し、対応するサイドカーインスタンス（例えば、サイドカー１５２および１５４）のライフサイクルが、それらが接続されている仮想マシンインスタンス（複数可）に同期されていることを保証し得る。以下に説明するように、サイドカーライフサイクル管理ユニット１４２は、仮想マシンインスタンスが実行状態の変更をしたときに、特定のサイドカーがその実行状態に並行しながら先行するか、続くか、または変更するかを決定してよく、それに応じてサイドカーに実行状態の変更を実施させ得る。いくつかの実施形態では、サイドカーライフサイクル管理ユニット１４２は、アクティブプール１４０Ａの構成要素であり得る。他の実施形態では、サイドカーライフサイクル管理ユニット１４２は、アクティブプール１４０Ａの外側に位置し、アクティブプール１４０Ａからのサイドカーの追加、削除および／または追加もしくは削除のタイミングを容易にすることができる。
【００３７】
いくつかの機能は、一般的に、オンデマンドコード実行システム１１０の個々の構成要素を参照して本明細書に説明されているが、他の構成要素または構成要素の組み合わせはこのような機能に追加的にまたは代替的に実装してよい。例えば、ワーカーマネージャ１４０は、ＯＳ構成システム１６０を参照して本明細書で説明されるのと同様または同一の方法で仮想マシンインスタンスを構成するように動作することができる。当業者はまた、本開示が、１つの仮想マシンインスタンス１５０が２つのサイドカー１５２および１５４と通信している図１に図示される実施形態に限定されないことを理解するであろう。様々な実施形態では、任意の数のサイドカーが、仮想マシンインスタンスとサイドカーとの間の１対多および多対多の関係を含む、任意の数の仮想マシンインスタンスと通信することができる。
【００３８】
図２は、オンデマンドコード実行システム１１０内のサイドカー構成を決定するように動作するコンピューティングシステム（サイドカー構成システム１６０と呼ばれる）の一般的なアーキテクチャを図示している。図２に図示するサイドカー構成システム１６０の一般的なアーキテクチャは、本開示の態様を実施するために使用することができるコンピュータハードウェアおよびソフトウェアモジュールの配列を含む。ハードウェアモジュールは、以下にさらに詳細に説明するように、物理電子デバイスで実装され得る。サイドカー構成システム１６０は、図２に示すものよりも多い（または少ない）要素を含む場合がある。しかしながら、開示を可能にするために、これらの一般的な従来の要素のすべてを示す必要はない。さらに、図２に示される一般的なアーキテクチャは、図１に示される他の構成要素のうちの１つまたは複数を実装するために使用することができる。例示のように、サイドカー構成システム１６０は、処理ユニット２９０、ネットワークインターフェース２９２、コンピュータ可読媒体ドライブ２９４および入力／出力デバイスインターフェース２９６を含み、これらはすべて、通信バスを介して互いに通信することができる。ネットワークインターフェース２９２は、１つまたは複数のネットワークまたはコンピューティングシステムへの接続性を提供してもよい。したがって、処理ユニット２９０は、ネットワーク１０４を介して、情報および命令を他のコンピューティングシステムまたはサービスから受信してもよい。処理ユニット２９０はまた、メモリ２８０との間で通信し、さらに、入力／出力デバイスインターフェース２９６を介して、選択式ディスプレイ（図示しない）用の出力情報を提供してもよい。入力／出力デバイスインターフェース２９６はまた、入力を選択式入力デバイス（図示しない）から受信してもよい。
【００３９】
メモリ２８０は、本開示の１つまたは複数の態様を実施するために、処理ユニット２９０が実行するコンピュータプログラム命令（いくつかの実施形態では、モジュールとしてグループ化される）を含んでもよい。メモリ２８０は、一般に、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）および／または他の永続的、補助的、もしくは非一時的なコンピュータ可読媒体を含む。メモリ２８０は、サイドカー構成システム１６０の一般的な管理および動作において処理ユニット２９０が使用するためのコンピュータプログラム命令を提供するオペレーティングシステム２８４を格納してよい。メモリ２８０はさらに、本開示の態様を実施するためのコンピュータプログラム命令および他の情報を含んでもよい。例えば、一実施形態では、メモリ２８０は、例えば、ナビゲーションを介して、コンピューティングデバイス上に表示するためのユーザインターフェース（および／または、そのための命令）と、および／またはコンピューティングデバイス上にインストールされたブラウザもしくはアプリケーションなどのブラウジングインターフェースを生成する、ユーザインターフェースユニット２８２を含む。さらに、メモリ２８０は、１つまたは複数のデータリポジトリ（図示しない）を含み、および／またはそれと通信し、例えば、ユーザプログラムコードおよび／またはライブラリにアクセスしてもよい。
【００４０】
ユーザインターフェースユニット２８２に加えて、および／またはユーザインターフェースユニット２８２と組み合わせて、メモリ２８０は、処理ユニット２９０によって実行することができる仮想マシン構成ユニット１６２およびサイドカー構成ユニット１６４を含み得る。一実施形態では、仮想マシン構成ユニット１６２およびサイドカー構成ユニット１６４は、以下でさらに説明するように、本開示の様々な態様、例えば、オンデマンドコード実行システム１１０内でのサイドカー構成の生成または選択、仮想マシン構成の決定などを個別にまたは集合的に実施する。
【００４１】
仮想マシン構成ユニット１６２およびサイドカー構成ユニット１６４は、サイドカー構成システム１６０の一部として図２に示されており、他の実施形態では、仮想マシン構成ユニット１６２およびサイドカー構成ユニット１６４のすべてまたは一部は、オンデマンドコード実行システム１１０の他の構成要素および／または別のコンピューティングデバイスによって実装され得る。例えば、本開示の特定の実施形態では、オンデマンドコード実行システム１１０と通信する別のコンピューティングデバイスは、サイドカー構成システム１６０の一部として例示されるようなモジュールおよび構成要素と同様に動作するいくつかのモジュールまたは構成要素を含んでもよい。
【００４２】
いくつかの実施形態では、サイドカー構成システム１６０は、図２に示したもの以外の構成要素をさらに含んでもよい。例えば、メモリ２８０は、実行環境をタスクに割り当てるためのインスタンス割り当てユニット、実行環境内でのタスクの実行を容易にするためのユーザコード実行ユニット、または仮想マシンインスタンス内にコンテナの作成、準備および構成を管理するためのコンテナマネージャをさらに含み得る。
【００４３】
図３を参照すると、ユーザ送信コードを実行するためのサイドカーを決定および構成するための例示的な相互作用が図示されている。図３の相互作用は（１）で開始し、ここで、ユーザデバイス１０２は、オンデマンドコード実行システム１１０上でタスクコードを実行するための要求を生成することができる。例示的には、ユーザは、その実行が様々な補助機能を必要とし、したがって、これらの機能を提供する１つまたは複数のサイドカーを必要とするコードを生成することができる。いくつかの実施形態では、ユーザは、タスクコードの実行中にユーザが必要になると予想する補助機能のリストを生成または識別することができる。（２）で、ユーザデバイス１０２は、ＡＰＩまたはフロントエンド１２０の他のインターフェースを使用することなどによって、フロントエンド１２０に要求を送信する。要求は、例えば、タスクコードおよびサイドカーまたは補助機能のリストを含み得る。（３）で、フロントエンド１２０は、送信されたタスクコードを検証する。検証は、例えば、タスクコードがオンデマンドコード実行システム１１０によって実行可能であることを検証することを含むことができる。
【００４４】
（４）では、フロントエンド１２０は、タスクのサイドカーのセットを決定するためにサイドカー構成システム１６０に要求を送信する。その後、（５）では、サイドカー構成システム１６０はサイドカーの適切なセットを決定する。例示的には、サイドカー構成システム１６０の仮想マシン構成ユニット１６２は、タスクコードの実行を容易にするサイドカー仮想マシンインスタンスのセットを識別するために要求を分析することができる。次に、サイドカー構成ユニット１６４は、タスクコードの実行中に必要とされるだろう仮想マシンインスタンスおよびサイドカーを構成することができる。例えば、サイドカー構成システム１６０は、タスクコードが実行中に入力検証を必要とするであろうと決定することができる。したがって、仮想マシン構成ユニット１６２は、サイドカーから処理された入力を受信するように仮想マシンインスタンスを構成することができ、サイドカー構成ユニット１６４は、必要な入力検証を実行するようにサイドカーを識別および構成することができる。さらなる例として、サイドカー構成システム１６０は、ユーザがタスクコードの実行をプロファイリングして、コードを最適化できるかどうか、およびどのように最適化することができるかを決定することを望むと決定することができる。したがって、仮想マシン構成ユニット１６２は、タスク実行中にプロファイリングデータを出力するように仮想マシンインスタンスを構成することができ、サイドカー構成ユニット１６４は、プロファイリングデータを集約および報告するサイドカーを構成することができる。
【００４５】
（６）では、サイドカー構成システムは、データ記憶装置１０８などの記憶装置に、決定されたサイドカーの構成および検証タスクコードを格納することができる。したがって、オンデマンドコード実行システム１１０は、以下でより詳細に説明するように、タスクコードを実行するためのさらなる要求を受信するときに、コードを分析し、サイドカー構成を決定するのに費やされる時間を削減することができる。いくつかの実施形態では、オンデマンドコード実行システム１１０は、要求ごとにサイドカーを決定することができる。例えば、要求には、タスクコードの実行時に特定のサイドカーを含めるかどうかを示すデバッグフラグまたは他の情報が含まれる場合がある。
【００４６】
いくつかの実施形態では、上記の動作の順序および実装は変更することができ、あるいは、これらの相互作用は、オンデマンドコード実行システム１１０の追加または代替の要素によって行われてもよい。例えば、一実施形態では、仮想マシン構成ユニット１６２およびサイドカー構成ユニット１６４を組み合わせることができ、これらのユニットによって行われる決定は、集合的に、タスクコードを実行する仮想マシンの構成を含む「サイドカー構成」と見なすことができる。さらなる例として、別の実施形態では、ユーザデバイス１０２は、送信タスクコードに対して特定のサイドカー構成を要求することができ、サイドカー構成システム１６０は、この要求を検証、処理および／または実装することができる。
【００４７】
オンデマンドコード実行システム１１０上でタスクを実行することに併せて所定のサイドカーの構成を利用するための例示的な相互作用は、図４を参照して説明される。（１）において、ユーザデバイス１０２は、タスクの実行を要求することができる。いくつかの実施形態では、上記のように、フロントエンド１２０は、要求を受信することなくタスク実行を開始することができ、その場合、（１）での相互作用を省略してもよい。
【００４８】
（２）では、フロントエンド１２０は、ワーカーマネージャ１４０に、実行のためにタスクを分散する。タスク実行を分散する前に、フロントエンド１２０は、上記の参照により組み込まれる「５５６特許」内でより詳細に説明されるように、要求のキューイング、要求の検証などのいくつかの追加の相互作用のいずれかを行うことができる。
【００４９】
（３）では、ワーカーマネージャ１４０は、タスクのサイドカー設定を要求する。いくつかの実施形態では、上記のように、サイドカー構成は、タスクのコードが検証のために送信されるときに（例えば、図３に示される相互作用を実行することによって）決定され得る。他の実施形態では、サイドカー構成は、タスクのコードが検証のために送信されるときにユーザによって提供され得る。さらなる実施形態では、サイドカー構成は、要求ごとに決定することができる。（４）では、ワーカーマネージャ１４０は、データ記憶装置１０８から以前に決定された（または以前に指定された）サイドカー構成を受信する。
【００５０】
その後、（５）において、ワーカーマネージャ１４０は受信されたサイドカー構成に従って、仮想マシンインスタンスおよびサイドカーの構成および実行を行う。いくつかの実施形態では、上記のように、ワーカーマネージャ１４０は、図１のサイドカーライブラリ１３０などのライブラリからサイドカー画像を取得し、構成に従ってこれらの画像を構成することができる。他の実施形態では、ワーカーマネージャ１４０は、完全にまたは部分的に事前構成されたサイドカーをワーミングプールから取得し、必要に応じて追加の構成を実行することができる（例えば、サイドカーを特定の仮想マシンインスタンスと通信させる）。さらに別の実施形態では、ワーカーマネージャ１４０は、ウォーミングプールから複数の仮想マシンインスタンスを取得し、タスクコードを実行するようにインスタンスのいくつかを構成し、（例えば、補助機能を実行するエージェントでサイドカーインスタンスをプロビジョニングすることによって）他のインスタンスをサイドカーとして構成することができる。
【００５１】
「主な」仮想マシンインスタンス（例えば、タスクコードを実行するもの）のライフサイクルに併せてサイドカーのライフサイクルを管理するための例示的な相互作用は、図５を参照して説明される。（１）において、サイドカーライフサイクル管理ユニット１４２は、仮想マシンインスタンス１５０の実行を監視する。例示的には、サイドカーライフサイクル管理ユニット１４２は、入力、出力、リソース使用率、仮想マシンインスタンス１５０によって生成された指標、ワーカーマネージャ１４０によって生成された指標、または仮想マシンインスタンス１５０の状態に関する他の情報を監視することができる。
【００５２】
（２）では、サイドカーライフサイクル管理ユニット１４２は、仮想マシンインスタンス１５０の実行状態に変更が生じようとしていることを検出する。実行状態の変更には、例えば、仮想マシンインスタンス１５０のプロビジョニング、タスクコードの実行開始、タスクコードの実行の停止、タスクコードの実行の再開、タスクコードの実行終了、仮想マシンインスタンス１５０の停止、仮想マシンインスタンス１５０の再開、仮想マシンインスタンス１５０のプロビジョニング解除などが含まれ得る。タスクコードの実行終了には、正常な終了（例えば、完了するまでのタスクコードの実行）と異常な終了（例えば、エラーのため、ユーザが終了を要求したため、オペレーティングシステムから信号が受信されたためなどにより、タスクコードが実行停止した）の両方が含まれる場合がある。いくつかの実施形態では、サイドカーライフサイクル管理ユニット１４２は、実行状態の保留中の変更をその発生前に検出する。例えば、サイドカーライフサイクル管理ユニット１４２は、ワーカーマネージャ１４０が仮想マシンインスタンス１５０をプロビジョニングしている、またはプロビジョニングしようとしているという通知を受信することができる。他の実施形態では、サイドカーライフサイクル管理ユニット１４２は、変更が発生している間または発生した後に変更を検出することができる。例えば、サイドカーライフサイクル管理ユニット１４２は、タスクコードが利用可能なすべての入力データを処理したため、閾値量のコンピューティングリソースが消費されたため、またはタスクコードがエラーメッセージで終了したために、仮想マシンインスタンスがタスクコードの実行を停止または終了したことを検出することができる。
【００５３】
その後、（３）では、サイドカーライフサイクル管理ユニット１４２は、サイドカー１５２および１５４などの仮想マシンインスタンス１５０に関連するサイドカーの実行状態に生じるべき変更を決定する。サイドカーの実行状態の変更は、サイドカーに関連付けられた仮想マシンインスタンスの数、サイドカーによって実行される補助機能（複数可）など、複数の要因に基づいて決定される場合がある。例えば、サイドカー１５２は、仮想マシンインスタンス１５０の出力検証を提供することができる。したがって、サイドカーライフサイクル管理ユニット１４２は、出力検証機能が必要とされないため、仮想マシンインスタンス１５０が非アクティブ状態になるときにサイドカー１５２が非アクティブ状態になることができると決定することができる。別の例として、サイドカー１５４は、仮想マシンインスタンス１５０と別の仮想マシンインスタンスとの両方に制御プレーン機能を提供することができ、これらは、同じユーザに代わって同じタスクコードまたは異なるタスクコードを実行することができる。したがって、サイドカーライフサイクル管理ユニット１４２は、サイドカー１５４がサポートする仮想マシンインスタンスの両方がプロビジョニング解除状態になった場合にのみ、サイドカー１５４をプロビジョニング解除する必要があると決定することができる。
【００５４】
いくつかの実施形態では、サイドカーライフサイクル管理ユニット１４２は、サイドカー（複数可）および仮想マシンインスタンス１５０がそれらの実行状態を変更する順序を決定してよく、決定された順序で実行状態を変更させてよい。例えば、サイドカー１５４は、仮想マシンインスタンス１５０のロギングまたはデバッグ機能を提供することができる。したがって、サイドカーライフサイクル管理ユニット１４２は、サイドカー１５４がロギングまたはデバッグ情報の完全な記録を維持できるように、仮想マシンインスタンス１５０が実行停止状態になった後でのみサイドカー１５４は実行停止状態になり、仮想マシンインスタンス１５０が実行再開する前にサイドカー１５４が実行を再開することを決定してよい。別の例として、サイドカー１５２は、入力データを仮想マシンインスタンス１５０に送信する前に処理および検証することができ、したがって、サイドカー１５２がデータを仮想マシンインスタンス１５０に送信し始める前に、仮想マシンインスタンス１５０はアクティブでなければならない。いくつかの実施形態では、サイドカーライフサイクル管理ユニット１４２は、仮想マシンインスタンス１５０の実行状態の変更のタイミングを制御することができない場合があり、したがって、仮想マシンインスタンス１５０の実行状態の変更のタイミングに基づいて、サイドカー実行状態の変更をスケジュールし、優先順位を付けることができる。
【００５５】
図５に示す例では、サイドカーライフサイクル管理ユニット１４２は、サイドカー１５２の実行状態の変更が仮想マシンインスタンス１５０の実行状態の変更に先行するべきであり、サイドカー１５４の実行状態の変更が仮想マシンインスタンス１５０の変更に続くべきであると決定する。したがって、サイドカーライフサイクル管理ユニット１４２は、（４）で、サイドカー１５２にその実行状態を変更させる。様々な実施形態では、サイドカーライフサイクル管理ユニット１４２は、サイドカー１５２、ワーカーマネージャ１４０、またはオンデマンドコード実行システム１１０の別の構成要素に命令を送信することによって、実行状態の変更を引き起こし得る。（５）では、サイドカー１５２（または別の構成要素）は、実行状態の変更を実施する。
【００５６】
その後、（６）において、仮想マシンインスタンス１５０は、実行状態の変更を実施する。いくつかの実施形態では、ワーカーマネージャ１４０は、例えば、仮想マシンインスタンス１５０をプロビジョニングまたはプロビジョニング解除することによって、仮想マシンインスタンス１５０の実行状態の変更を実施する。他の実施形態では、仮想マシンインスタンス１５０は、変更を実施することができる。例えば、仮想マシンインスタンス１５０は、タスクコードの実行を開始、終了、停止、または再開することができる。
【００５７】
（７）では、サイドカーライフサイクル管理ユニット１４２は、（４）での相互作用と同様の方法でサイドカー１５４の実行状態の変更を引き起こす。その後、（８）において、サイドカー１５４（またはオンデマンドコード実行システム１１０の別の構成要素）は、サイドカー１５４の実行状態の変更を実施する。
【００５８】
いくつかの実施形態では、（４）、（６）および（７）での１つまたは複数の相互作用は単一の相互作用に統合されてよい。例えば、サイドカーライフサイクル管理ユニット１４２は、サイドカー１５２、仮想マシンインスタンス１５０およびサイドカー１５４の実行状態を変更するためのスケジュールまたは順序付きリストをワーカーマネージャ１４０に提供することができ、ワーカーマネージャ１４０は、指定された順序で実行状態の変更を実施することができる。別の例として、サイドカーライフサイクル管理ユニット１４２は、サイドカー１５２が仮想マシンインスタンス１５０の前に実行を再開し、サイドカー１５４が、仮想マシンインスタンス１５０が実行を再開した後に再開する必要があることをワーカーマネージャ１４０に示すことができる。さらに、上記のように、いくつかの実施形態では、（２）での相互作用は、発生しようとしている変更を検出するのではなく、発生中またはすでに発生した変更を検出し得る。
【００５９】
図６は、仮想マシンインスタンス６０４とサイドカー６０６、６０８および６１０との間の相互作用の例示的な例を図示している。図示の例では、（１）で、外部入力が入力検証サイドカー６０６に提供される。外部入力は、フロントエンド１２０から、またはいくつかの実施形態では別の入力ソースから受信することができる。（２）において、入力検証サイドカー６０６は、外部入力を検証することができる。例えば、入力検証サイドカー６０６は、（例えば、エスケープ文字を挿入するか、または特殊文字を削除することによって）外部入力を削除するか、または外部入力がタスクコードに求められる形式であることを検証することができる。
【００６０】
その後、（３）において、入力検証サイドカー６０６は、仮想マシンインスタンス６０４に検証された入力を提供することができる。いくつかの実施形態では、仮想マシンインスタンス６０４は、入力検証サイドカー６０６から入力を受信するように構成され得る。他の実施形態では、サイドカー６０６は、処理された入力を仮想マシンインスタンス６０４に送信するように構成されてよく、仮想マシンインスタンス６０４に対して特別な構成は実行されない。代わりに、仮想マシンインスタンス６０４で実行されるタスクコードは、仮想マシンインスタンス６０４が受信する任意の入力を処理するだけであり、サイドカー６０６からの入力のみを受信する構成は、仮想マシンインスタンス６０４に対して透過的である。さらなる実施形態では、入力検証サイドカー６０６も仮想マシンインスタンス６０４も、他方を認識するようには構成することができず、サイドカー６０６から仮想マシンインスタンス６０４への検証されたデータの通信は、ワーカーマネージャ１４０によって処理され得る。
【００６１】
（４）では、仮想マシンインスタンス６０４は、検証された入力を処理することができる。例示的には、仮想マシンインスタンス６０４は、検証された入力でタスクコードを実行することによって検証された入力を処理することができ、対応する出力を生成することができる。仮想マシンインスタンス６０４はさらに、（５）で、プロファイリングサイドカー６０８がタスクコードをプロファイリングすることを可能にする情報へのアクセスを提供することができる。例えば、仮想マシンインスタンス６０４は、ログファイル、指標、スタックトレース、メモリダンプ、またはタスクコードの実行に関する他のデータを生成することができる。次に、仮想マシンインスタンス６０４は、データを送信し、データにアクセスするためのＡＰＩを提供し、プロファイリングサイドカー６０８がファイルシステムまたはメモリ位置を読み取ることを可能にし、別様にはプロファイリング情報へのアクセスを許可することができる。（６）では、プロファイリングサイドカーは、プロファイリング情報を取得および／または受信し、それを処理し、仮想マシンインスタンス６０４および／または仮想マシンインスタンス６０４上で実行されるタスクコードをプロファイリングすることができる。
【００６２】
（７）では、仮想マシンインスタンス６０４は、（４）で生成された出力を出力検証サイドカー６１０に提供することができ、これは（８）で出力を検証することができる。例えば、出力検証サイドカー６１０は、出力を後処理し、出力を特定のフォーマットに変換し、出力が指定された範囲内にあることを検証し、または他の検証を実行し得る。
【００６３】
（９）では、いくつかの実施形態では、出力検証サイドカー６１０は、フロントエンド１２０または別の構成要素に検証された出力を提供することができる。いくつかの実施形態では、（１）〜（９）での相互作用は、入力がそれ以上利用できなくなるか、ユーザがタスクコードの実行を停止する要求を出すまで繰り返され得る。さらに、図６に図示される相互作用の例は、異なる順序で実行され得るか、より多いまたはより少ない相互作用が実行され得る。例えば、（５）および（６）での相互作用は省略され得るか、または（４）での相互作用の前に（または同時に）実行され得る。さらなる例として、いくつかの実施形態では、入力検証サイドカー６０６によって生成された検証された入力は、結果データを仮想マシンインスタンス６０４に送信する前にさらなる検証を実行し得る別の入力検証サイドカーへの入力として提供され得る。したがって、サイドカーの他の多くの組み合わせおよび配置が本開示の範囲内にあることが当業者によって理解されるであろう。
【００６４】
図７を参照すると、オンデマンドコード実行システム１１０上でタスクを実行するためのサイドカー構成を決定するための１つの例示的なルーチン７００が説明される。ルーチン７００は、例えば、図１のサイドカー構成システム１６０によって実行され得る。一実施形態では、ルーチン７００（例えば、ブロック７０２〜７０６）は、オンデマンドコード実行システム１１０上でのタスクの作成と併せて実行される。別の実施形態では、ルーチン７００のすべてまたは一部（例えば、ブロック７０８〜７１６）は、オンデマンドコード実行システム１１０上でタスクを実行することに併せて実行され得る。ルーチン７００のすべてまたは一部は、追加的または代替的に、普段は定期的（例えば、１日１回、週１回、月１回など）に、または実行指標またはリソース使用率指標が閾値外であるという検出に基づいて実行され得る。
【００６５】
ルーチン７００はブロック７０２で開始し、サイドカー構成システム１６０は（例えば、ユーザによって送信されるときに）タスクのコードを取得する。一実施形態では、タスクのコードは、タスクのソースコードを含む圧縮ファイルなどのコードオブジェクトとして表される。次に、ルーチン７００は、ブロック７０４に進み、サイドカー構成システム１６０が、タスクのサイドカー構成を決定する。上記のように、サイドカー構成システム１６０は、いくつかの実施形態では、送信されたタスクコードに基づいてサイドカー構成を決定することができる。他の実施形態では、サイドカー構成システム１６０は、タスクコードの実行をプロファイルする要求またはタスクコードに提供される入力を検証する要求などのユーザ入力に基づいてサイドカー構成を決定することができる。いくつかの実施形態では、オンデマンドコード実行システム１１０のフロントエンド１２０または別の構成要素は、ユーザが所望のサイドカーを選択することを可能にするユーザインターフェースを提示することができる。
【００６６】
ブロック７０６において、サイドカー構成システム１６０は、データストアサービス１０８など、データストアにタスクコードおよびサイドカー構成を格納することができる。いくつかの実施形態では、上記のように、サイドカー構成は、タスクコードを実行する仮想マシンインスタンスの構成を含み得る。他の実施形態では、サイドカー構成は、ワーカーマネージャ１４０によって利用される命令を含み得る。
【００６７】
その後、ブロック７０８において、タスクコードを実行するための要求が受信されてよい。要求は、例えば、フロントエンド１２０、ワーカーマネージャ１４０、またはオンデマンドコード実行システム１１０上の別の構成要素によって受信され得る。いくつかの実施形態では、上記のように、タスクコードは、要求を受信することなく実行することができ、その場合、ブロック７０８を省略してもよい。
【００６８】
ブロック７１０では、ワーカーマネージャ１４０はタスクコードを実行するために仮想マシンインスタンスをプロビジョニングする。いくつかの実施形態では、ワーカーマネージャ１４０は、サイドカー構成に従って仮想マシンインスタンスを構成する。例えば、ワーカーマネージャ１４０は、サイドカーからの入力を受け入れ、サイドカーに出力を提供し、仮想マシンの内部（例えば、スタックまたはメモリの内容）へのアクセスを提供するように仮想マシンインスタンスを構成するか、別様には、サイドカーで動作するように仮想マシンインスタンスを構成することができる。他の実施形態では、仮想マシンインスタンスは構成されなくてもよく、サイドカーとの相互作用は仮想マシンインスタンスに対して透過的であり得る。
【００６９】
ブロック７１２では、ワーカーマネージャ１４０はサイドカー構成に応じて、１つまたは複数のサイドカーをプロビジョニングする。いくつかの実施形態では、上記のように、ワーカーマネージャ１４０は、サイドカーライブラリ１３０などのライブラリからサイドカー画像またはエージェントを取得し、これらの画像またはエージェントを使用してサイドカーをプロビジョニングまたは構成する。他の実施形態では、サイドカー構成は、サイドカーをユーザ仕様にプロビジョニングするための命令を含んでよく、ワーカーマネージャ１４０は、これらの命令を実行して、サイドカーをそれに応じてプロビジョニングすることができる。
【００７０】
ブロック７１４では、ワーカーマネージャ１４０は仮想マシンインスタンスおよびサイドカーインスタンス（複数可）を実行する。いくつかの実施形態では、ワーカーマネージャ１４０は、図８を参照して以下に説明するルーチン８００などのルーチンを実行することによって、仮想マシンインスタンスおよびサイドカーインスタンス（複数可）のライフサイクルの管理に進む。他の実施形態では、ルーチン７００は、プロビジョニングされた仮想マシンインスタンスおよびサイドカー（複数可）の実行で終了する。
【００７１】
図８を参照すると、サイドカーのライフサイクルを管理するための例示的なルーチン８００が説明される。ルーチン８００は、例えば、図１のサイドカーライフサイクル管理ユニット１４２によって実行され得る。ルーチン８００は、ブロック８０２で開始し、ここで、サイドカーライフサイクル管理ユニット１４２（または、いくつかの実施形態では、ワーカーマネージャ１４０またはオンデマンドコード実行システム１１０の別の構成要素）が、仮想マシンインスタンスの実行を監視する。決定ブロック８０４で、仮想マシンインスタンスの実行状態に保留中の変更があるかどうかに関して決定が行われる。いくつかの実施形態では、上記のように、決定ブロック８０４での決定は、仮想マシンインスタンスの実行状態への変更がすでに発生したか、または進行中であるかどうかも含み得る。仮想マシンインスタンスの実行状態の変更が検出されない場合、ルーチン８００はブロック８０２に分岐し、監視を継続する。
【００７２】
決定ブロック８０４での決定が、仮想マシンインスタンスが実行状態を変更するというものである場合、ルーチン８００はブロック８０６に分岐し、ここでは未処理のサイドカーが選択され得る。ブロック８０８では、サイドカーライフサイクル管理ユニット１４２は、選択されたサイドカーがその実行状態を変更すべきかどうか、変更すべきである場合、仮想マシンインスタンスに対してその実行状態をいつ変更すべきかを決定することができる。例えば、サイドカーライフサイクル管理ユニット１４２は、サイドカーが仮想マシンインスタンスの前、同時または後にその実行状態を変更すべきであると決定することができる。いくつかの実施形態では、サイドカーライフサイクル管理ユニット１４２は、他のサイドカーと比較して、選択されたサイドカーの実行状態への変更のタイミングを決定することができる。例えば、サイドカーライフサイクル管理ユニット１４２は、サイドカーおよび仮想マシンインスタンスの状態変更の順序付きリストを生成し、選択されたサイドカーを順序付きリストに配置することができる。他の実施形態では、サイドカーライフサイクル管理ユニット１４２は、選択されたサイドカーがその実行状態への変更を必要としないこと、または選択されたサイドカーが仮想マシンインスタンスとは異なる実行状態に変更されることを決定することができる。例えば、サイドカーライフサイクル管理ユニット１４２は、仮想マシンインスタンスがタスクコードの実行を停止した後にサイドカーをプロビジョニング解除する必要があること、または仮想マシンインスタンスがタスクコードの実行を再開する前に新しいサイドカーをプロビジョニングする必要があることを決定することができる。一実施形態では、サイドカーライフサイクル管理ユニット１４２は、仮想マシンインスタンス内のタスクコードの実行ごとに新しいサイドカー仮想マシンが作成されることを保証することができる。例示的には、サイドカー仮想マシンがセキュリティ機能を提供する場合、コードの実行ごとに新しいサイドカーを再作成することで、例えば、過去のコードの実行中にサイドカー仮想マシンに悪意のデータが渡されることによって、サイドカーの機能が損なわれることがないことを保証し得る。
【００７３】
決定ブロック８１０で、サイドカーライフサイクル管理ユニット１４２は、サイドカーのすべてがルーチン８００により処理されたかどうかを決定することができる。そうでない場合、ルーチン８００はブロック８０６に分岐し、ここで残りの未処理のサイドカーの１つが選択されてよく、その後、ルーチン８００は、すべてのサイドカーが処理されるまでブロック８０６〜８１０を繰り返す。次に、ルーチン８００は、ブロック８１２に分岐し、ここでサイドカーライフサイクル管理ユニット１４２は、仮想マシンインスタンスおよびサイドカーに、決定された順序で実行状態を変更させる。いくつかの実施形態では、決定された順序は、仮想マシンインスタンスの変更に関連する場合があり、サイドカー間の特定の順序を指定しない場合がある。例えば、サイドカーライフサイクル管理ユニット１４２は、サイドカーＡとＢとの両方が、仮想マシンインスタンスが変更する前にそれらの実行状態を変更するべきであるが、サイドカーＡの実行状態の変更がサイドカーＢの前または後に行われても問題ないと決定し得る。他の実施形態では、サイドカーライフサイクル管理ユニット１４２は、あるサイドカーが別のサイドカーが変更する前にその実行状態を変更すべきであることを決定し、それに応じて実行状態を変更することができる。
【００７４】
上記のルーチンのブロックは、本開示の実施形態で変更し得る。例えば、いずれかのルーチンのいくつかの実装形態では、サイドカー構成システム１６０は、追加のサイドカーの生成および格納などの追加の機能を実装するように構成され得る。したがって、様々な実施形態によれば、ルーチンは、追加のブロックを含み得るか、またはルーチンのブロックが再配置され得る。
【００７５】
上述の方法およびプロセスのすべては、１つまたは複数のコンピュータまたはプロセッサによって実行されるソフトウェアコードモジュールに実装され得るか、またはこれらを介して完全に自動化されてよい。コードモジュールは、任意の種類の非一時的なコンピュータ可読媒体または他のコンピュータ記憶デバイス内に格納され得る。本方法の一部またはすべては、代わりに専用コンピュータハードウェアで実装され得る。
【００７６】
特に明記しない限り、とりわけ、「できる（ｃａｎ）」、「できるであろう（ｃｏｕｌｄ）」、「可能性がある（ｍｉｇｈｔ）」、または「してよい（ｍａｙ）」などの条件的言語は、他の実施形態が特定の特徴、要素および／またはステップを含まない一方で、特定の実施形態が特定の特徴、要素および／またはステップを含むことを提示するために一般的に使用される文脈内で別様に理解される。したがって、そのような条件的言語は、概して、特徴、要素および／またはステップが、１つまたは複数の実施形態に任意の方法で要求されるか、または１つまたは複数の実施形態が、ユーザ入力もしくはプロンプトを用いて、もしくは用いずに、これらの特徴、要素および／またはステップが含まれるか、もしくは任意の特定の実施形態で行われるべきであるかを決定するための論理を必ず含むことを含意することは意図していない。
【００７７】
特に明記しない限り、句「Ｘ、ＹまたはＺのうちの少なくとも１つ」などの選言的言語は、項目、用語などが、Ｘ、ＹもしくはＺのいずれか、またはそれらの任意の組み合わせ（例えば、Ｘ、Ｙおよび／またはＺ）であり得ることを提示するために一般に使用される文脈の中で別様に理解される。したがって、そのような選言的言語は、ある実施形態がＸの少なくとも１つ、Ｙの少なくとも１つ、またはＺの少なくとも１つがそれぞれ存在することを必要とすることを含意することを一般的に意図しておらず、意味するべきではない。
【００７８】
特に明記しない限り、「ａ」または「ａｎ」などの冠詞は、概して、１つまたは複数の記載された項目を含むと解釈すべきである。したがって、「〜するように構成されたデバイス」などの語句は、１つまたは複数の列挙されたデバイスを含むことを意図している。そのような１つまたは複数の列挙されたデバイスは、記載された列挙を実行するように集合的に構成されることもできる。例えば、「列挙Ａ、ＢおよびＣを実行するように構成されたプロセッサ」は、列挙ＢおよびＣを実行するように構成された第２のプロセッサと連動して機能し、列挙Ａを実行するように構成された第１のプロセッサを含む場合がある。
【００７９】
本明細書に説明する、および／または添付の図面に図示するフロー図のいずれのルーチンの記述、要素、またはブロックも、ルーチンにおける特定の論理的機能または要素を実装するための１つまたは複数の実行可能な命令を含む、モジュール、セグメント、またはコードの部分を潜在的に表すものとして理解されるべきである。代替の実装は、本明細書に説明される実施形態の範囲内に含まれ、その中で要素または機能は、当業者によって理解されるであろうように、関係する機能性に応じて、実質的に同時または逆の順序を含む、示されるものまたは説明されるものとは異なる順序で削除または実行され得る。
【００８０】
多くの変形形態および変更形態が上記の実施形態に対して行われ得、それらの要素が他の許容される実施例中にあるものとして理解されることが強調されるべきである。すべてのこのような変更形態および変形形態は、本明細書において、本開示の範囲内に含まれ、以下の特許請求の範囲によって保護されることが意図される。
【００８１】
本開示の実施形態の例は、以下の条項を考慮して説明することができる。
【００８２】
１．構成情報を格納する物理データストアと、実行可能命令で構成されるコンピューティングデバイスとを含み、前記コンピューティングデバイスは、オンデマンドコード実行システム上でユーザ送信コードを実行する要求を受信し、前記要求に少なくとも部分的に基づいて、複数の仮想マシンインスタンスを決定し、前記複数は、前記ユーザ送信コードを実行するための第１の仮想マシンインスタンスと、補助機能を実行するための第２の仮想マシンインスタンスとを含み、前記構成に従って、前記第１の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、前記構成に従って、前記第２の仮想マシンインスタンスに前記補助機能を実行させ、前記第１の仮想マシンインスタンス上で前記ユーザ送信コードの実行を監視し、前記第１の仮想マシンインスタンスの実行状態の保留中の変更を検出し、前記第１の仮想マシンインスタンスの実行状態の前記保留中の変更に少なくとも部分的に基づいて、前記第２の仮想マシンインスタンスの実行状態の変更を決定し、前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスの実行状態の変更の順序を決定し、前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスの前記実行状態を前記決定された順序で変更する、システム。
【００８３】
２．前記第１の仮想マシンインスタンスの実行状態の前記保留中の変更は、前記第１の仮想マシンインスタンスのプロビジョニング、前記ユーザ送信コードの実行の開始、前記第１の仮想マシンインスタンスの停止、前記ユーザ送信コードの実行の停止、前記第１の仮想マシンインスタンスの再開、前記ユーザ送信コードの実行の再開、前記ユーザ送信コードの実行の終了、または前記第１の仮想マシンインスタンスのプロビジョニング解除のうちの１つまたは複数を含む、条項１に記載のシステム。
【００８４】
３．前記コンピューティングデバイスは前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスをプロビジョニングするようにさらに構成される、条項１に記載のシステム。
【００８５】
４．前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスの前記実行状態を変更する前記順序は、前記第２の仮想マシンインスタンスによって実行される前記補助機能に少なくとも部分的に基づいて決定される、条項１に記載のシステム。
【００８６】
５．前記補助機能が、カプセル化、ロギング、トレース、デバッグ、スキャン、プロファイリング、入力の検証または出力の検証のうちの１つまたは複数を含む、条項１に記載のシステム。
【００８７】
６．オンデマンドコード実行システム上でユーザ送信コードを実行する要求を受信し、前記ユーザ送信コードに関連付けられた構成情報、少なくとも前記ユーザ送信コードを実行するように構成された第１の仮想マシンインスタンス、および補助機能を実行するように構成された第２の仮想マシンインスタンスを指定する前記構成情報を取得し、前記構成情報に従って、前記第１の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、前記構成情報に従って、前記第２の仮想マシンインスタンスに前記補助機能を実行させ、前記第１の仮想マシンインスタンス上での前記ユーザ送信コードの実行に少なくとも部分的に基づいて、前記第１の仮想マシンインスタンスの実行状態の保留中の変更を識別し、前記第１の仮想マシンインスタンスの実行状態の前記保留中の変更に少なくとも部分的に基づいて、前記第２の仮想マシンインスタンスの実行状態の変更を決定し、少なくとも前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスの実行状態の変更の順序を決定し、前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスの前記実行状態を前記決定された順序で変更することを含む、コンピュータ実装方法。
【００８８】
７．前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスのプロビジョニング順序を決定することをさらに含み、前記プロビジョニング順序に従って、前記第１の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、前記第２の仮想マシンインスタンスに前記補助機能を実行させる、条項６に記載のコンピュータ実装方法。
【００８９】
８．前記実行状態を変更する前記順序は、前記第２の仮想マシンインスタンスの実行状態の前記変更が、前記第１の仮想マシンインスタンスの実行状態の前記保留中の変更に先行しなければならないことを指定する、条項６に記載のコンピュータ実装方法。
【００９０】
９．前記第１の仮想マシンインスタンスの実行状態の前記保留中の変更を発生させることをさらに含む、条項６に記載のコンピュータ実装方法。
【００９１】
１０．前記構成情報は、第２の補助機能を実行するように構成された少なくとも第３の仮想マシンインスタンスをさらに指定し、実行状態の変更の前記決定された順序は、前記第３の仮想マシンインスタンスの実行状態の変更をさらに含む、条項６に記載のコンピュータ実装方法。
【００９２】
１１．前記第１の仮想マシンインスタンス、前記第２の仮想マシンインスタンスおよび前記第３の仮想マシンインスタンスの前記実行状態の変更を前記決定された順序で発生させることをさらに含む、条項１０に記載のコンピュータ実装方法。
【００９３】
１２．前記第２の仮想マシンインスタンスと通信するように前記第１の仮想マシンインスタンスを構成することをさらに含む、条項６に記載のコンピュータ実装方法。
【００９４】
１３．前記第２の仮想マシンインスタンスと通信するように前記第１の仮想マシンインスタンスを構成することは、リダイレクト入力、リダイレクト出力またはパフォーマンス情報へのアクセス許可のうちの１つまたは複数を含む、条項１２に記載のコンピュータ実装方法。
【００９５】
１４．前記第２の仮想マシンインスタンスは、指定されたユーザに関連付けられた複数の仮想マシンインスタンスに対して前記補助機能を実行するように構成される、条項６に記載のコンピュータ実装方法。
【００９６】
１５．前記複数の仮想マシンインスタンスのそれぞれは、異なるユーザ送信コードに関連付けられている、条項１４に記載のコンピュータ実装方法。
【００９７】
１６．オンデマンドコード実行システム上で実行されると、前記オンデマンドコード実行システムに、オンデマンドコード実行システム上で実行可能なユーザ送信コードに関連する構成情報を取得することであって、前記構成情報は、第１の仮想マシンインスタンスに関連する第１の構成および第２の仮想マシンインスタンスに関連する第２の構成を含み、前記第１の構成に従って、前記第１の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、前記第２の構成に従って、前記第２の仮想マシンインスタンスに補助機能を実行させ、前記第１の仮想マシンインスタンスの実行状態の保留中の変更に少なくとも部分的に基づいて、前記第２の仮想マシンインスタンスの実行状態の変更を決定し、前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスの実行状態を前記構成情報に少なくとも部分的に基づいて、決定された順序で変更させるコンピュータ実行可能命令を含む、非一時的なコンピュータ可読媒体。
【００９８】
１７．前記命令はさらに、前記オンデマンドコード実行システムに、前記ユーザ送信コードを実行するための要求を受信させる、条項１６に記載の非一時的なコンピュータ可読媒体。
【００９９】
１８．前記命令はさらに、前記オンデマンドコード実行システムに実行状態の前記保留中の変更を識別させる、条項１６に記載の非一時的なコンピュータ可読媒体。
【０１００】
１９．前記命令はさらに、前記オンデマンドコード実行システムに、前記第２の仮想マシンインスタンスをインスタンス化させる、条項１６に記載の非一時的なコンピュータ可読媒体。
【０１０１】
２０．前記命令はさらに、前記オンデマンドコード実行システムに、複数の事前に構成された仮想マシンインスタンスから前記第２の仮想マシンインスタンスを選択させる、条項１６に記載の非一時的なコンピュータ可読媒体。
【０１０２】
２１．構成情報を格納する物理データストアと、実行可能命令により構成されるコンピューティングデバイスとを含むシステムであって、前記実行可能命令は、オンデマンドコード実行システム上でタスクを実行する要求を受信するものであって、前記要求は、ユーザ送信コードを含み、前記ユーザ送信コードによって処理されることになる未処理データを識別し、前記要求に少なくとも部分的に基づき、第１の仮想マシンインスタンスが前記ユーザ送信コードを実行するために必要になるであろうことと、第２の仮想マシンインスタンスが前記未処理データを事前に処理するために必要になるであろうことを決定し、前記第１の仮想マシンをプロビジョニングし、前記第２の仮想マシンから処理済みデータを受信し、前記処理済みデータで前記ユーザ送信コードを実行するように前記第１の仮想マシンインスタンスを構成し、前記第２の仮想マシンインスタンスをプロビジョニングし、前記処理済みデータを形成するように前記未処理データを処理し、前記処理済みデータを前記第１の仮想マシンインスタンスに送信するように前記第２の仮想マシンインスタンスを構成し、前記ユーザ送信コードが前記第１の仮想マシンインスタンス上での実行を完了したことを決定し、前記ユーザ送信コードが実行完了したという決定に応答して、前記第１の仮想マシンインスタンスおよび前記第２の仮想マシンインスタンスをプロビジョニング解除する、前記システム。
【０１０３】
２２．前記第２の仮想マシンインスタンスが、前記未処理データの検証、削除、前処理またはスキャンのうちの少なくとも１つを実行して、前記処理済みデータを形成する、条項２１に記載のシステム。
【０１０４】
２３．前記コンピューティングデバイスは、前記第１の仮想マシンインスタンスに、前記処理済みデータを用いて前記ユーザ送信コードを実行した結果を第３の仮想マシンインスタンスに送信させるようにさらに構成される、条項２１に記載のシステム。
【０１０５】
２４．前記コンピューティングデバイスは、前記第３の仮想マシンインスタンスに、前記結果の検証、削除、後処理またはスキャンのうちの少なくとも１つを実行させるようにさらに構成される、条項２３に記載のシステム。
【０１０６】
２５．前記コンピューティングデバイスは、前記ユーザ送信コードが実行を完了したという前記決定に応答して、前記第３の仮想マシンインスタンスをプロビジョニング解除するようにさらに構成される、条項２３に記載のシステム。
【０１０７】
２６．オンデマンドコード実行システム上でユーザ送信コードを実行するための要求を受信することと、前記要求に少なくとも部分的に基づいて、複数の仮想マシンインスタンスを識別する情報を取得することと、前記複数の仮想マシンインスタンスの第１の仮想マシンインスタンスをプロビジョニングすることと、前記ユーザ送信コードを実行させ、前記ユーザ送信コードの実行結果を前記第２の仮想マシンインスタンスに送信させるように前記第１の仮想マシンインスタンスを構成することと、前記複数の仮想マシンインスタンスの第２の仮想マシンインスタンスをプロビジョニングすることと、前記第１の仮想マシンインスタンスからの前記結果を処理して処理された結果を形成するように前記第２の仮想マシンインスタンスを構成することと、前記第１の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという決定に応答して、前記第２の仮想マシンインスタンスをプロビジョニング解除することとを含む、コンピュータ実装方法。
【０１０８】
２７．前記第２の仮想マシンインスタンスのプロビジョニングを解除することは、前記第２の仮想マシンインスタンスが前記結果の処理を終了したという決定にさらに応答する、条項２６に記載のコンピュータ実装方法。
【０１０９】
２８．前記第１の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという前記決定に応答して、前記第１の仮想マシンインスタンスのプロビジョニングを解除することをさらに含む、条項２６に記載のコンピュータ実装方法。
【０１１０】
２９．前記第１の仮想マシンインスタンスに、前記複数の仮想マシンインスタンスの第３の仮想マシンインスタンスからの処理済みデータを受信させることをさらに含み、前記ユーザ送信コードは、前記処理済みデータで実行される、条項２６に記載のコンピュータ実装方法。
【０１１１】
３０．前記第３の仮想マシンインスタンスをプロビジョニングすることをさらに含む、条項２９に記載のコンピュータ実装方法。
【０１１２】
３１．前記第３の仮想マシンインスタンスが既存の仮想マシンインスタンスであり、前記方法は、前記処理済みデータを前記第１の仮想マシンインスタンスに送信するように前記第３の仮想マシンインスタンスを構成することをさらに含む、条項２９に記載のコンピュータ実装方法。
【０１１３】
３２．前記第１の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという前記決定に応答して、前記第３の仮想マシンインスタンスの構成を解除することをさらに含む、条項３１に記載のコンピュータ実装方法。
【０１１４】
３３．前記第１の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという決定、または前記第３の仮想マシンインスタンスが前記処理済みデータのすべてを送信したという前記決定のうちの１つまたは複数に応答して、前記第３の仮想マシンインスタンスのプロビジョニングを解除することをさらに含む、条項２９に記載のコンピュータ実装方法。
【０１１５】
３４．前記複数の仮想マシンを識別する前記情報を、前記要求に少なくとも部分的に基づいて決定することをさらに含む、条項２６に記載のコンピュータ実装方法。
【０１１６】
３５．オンデマンドコード実行システム上で実行されると、前記オンデマンドコード実行システムに、ユーザ送信コードを実行する要求を受信させ、前記要求に少なくとも部分的に基づいて、複数の仮想マシンインスタンスを識別する構成情報を取得させ、前記構成情報に従って、前記ユーザ送信コードを実行するように前記複数の仮想マシンインスタンスの第１の仮想マシンインスタンスを構成させ、前記構成情報に従って、前記第１の仮想マシンインスタンスとの間の入力の送信または出力の受信のうちの少なくとも１つを実行するように前記複数の仮想マシンインスタンスの第２の仮想マシンインスタンスを構成させ、前記第１の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという決定に応答して、前記第２の仮想マシンインスタンスのプロビジョニング解除させるコンピュータ実行可能命令を含む、非一時的なコンピュータ可読媒体。
【０１１７】
３６．前記命令はさらに、前記オンデマンドコード実行システムに、前記第１の仮想マシンインスタンスをプロビジョニングさせる、条項３５に記載の非一時的なコンピュータ可読媒体。
【０１１８】
３７．前記命令はさらに、前記オンデマンドコード実行システムに、前記第１の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したことを決定させる、条項３５に記載の非一時的なコンピュータ可読媒体。
【０１１９】
３８．前記命令は、前記オンデマンドコード実行システムに、前記第１の仮想マシンインスタンスとの間で入力を送信し、出力を受信するように前記第２の仮想マシンインスタンスを構成させる、条項３５に記載の非一時的なコンピュータ可読媒体。
【０１２０】
３９．前記第１の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという前記決定に応答して、前記第２の仮想マシンインスタンスがデフォルト構成にリセットされる、条項３５に記載の非一時的なコンピュータ可読媒体。
【０１２１】
４０．前記第１の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという前記決定に応答して、前記第１の仮想マシンインスタンスがデフォルト構成にリセットされる、条項３５に記載の非一時的なコンピュータ可読媒体。
【図１】
2021529386.tif 000003
【図２】
2021529386.tif 000004
【図３】
2021529386.tif 000005
【図４】
2021529386.tif 000006
【図５】
2021529386.tif 000007
【図６】
2021529386.tif 000008
【図７】
2021529386.tif 000009
【図８】
2021529386.tif 000010
【国際調査報告】
2021529386.tif 000011
2021529386.tif 000012
2021529386.tif 000013