(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-19
(45)【発行日】2022-12-27
(54)【発明の名称】オンデマンドネットワークコード実行システム上での補助機能の実行
(51)【国際特許分類】
G06F 9/50 20060101AFI20221220BHJP
G06F 9/455 20060101ALI20221220BHJP
G06F 9/48 20060101ALI20221220BHJP
【FI】
G06F9/50 120A
G06F9/455 150
G06F9/48 370
(21)【出願番号】P 2020572441
(86)(22)【出願日】2019-06-21
(86)【国際出願番号】 US2019038520
(87)【国際公開番号】W WO2020005764
(87)【国際公開日】2020-01-02
【審査請求日】2020-12-24
(32)【優先日】2018-06-25
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-06-25
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】506329306
【氏名又は名称】アマゾン テクノロジーズ インコーポレイテッド
(74)【代理人】
【識別番号】100114890
【氏名又は名称】アインゼル・フェリックス=ラインハルト
(74)【代理人】
【識別番号】100098501
【氏名又は名称】森田 拓
(74)【代理人】
【識別番号】100116403
【氏名又は名称】前川 純一
(74)【代理人】
【識別番号】100134315
【氏名又は名称】永島 秀郎
(74)【代理人】
【識別番号】100135633
【氏名又は名称】二宮 浩康
(74)【代理人】
【識別番号】100162880
【氏名又は名称】上島 類
(72)【発明者】
【氏名】ニール ヌーレン
(72)【発明者】
【氏名】フィリップ ダニエル ピウォンカ
(72)【発明者】
【氏名】ティモシー アレン ワグナー
(72)【発明者】
【氏名】マーク ジョン ブルッカー
【審査官】三坂 敏夫
(56)【参考文献】
【文献】米国特許出願公開第2017/0371703(US,A1)
【文献】米国特許第10002036(US,B2)
【文献】国際公開第2018/098445(WO,A1)
【文献】特表2016-507100(JP,A)
【文献】米国特許出願公開第2018/0150339(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455-9/54
(57)【特許請求の範囲】
【請求項1】
実行可能命令で構成されるコンピューティングデバイスと、
を含むシステムであって、
前記コンピューティングデバイスは、
オンデマンドコード実行システム上でユーザ送信コードを実行する要求を受信し、
前記要求に少なくとも部分的に基づいて、複数の仮想マシンインスタンスを決定し、前記複数の仮想マシンインスタンスは、前記ユーザ送信コードを実行するための第1の仮想マシンインスタンスと、補助機能を実行するための第2の仮想マシンインスタンスと、を含み、
前記構成に従って、前記第1の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、
前記構成に従って、前記第2の仮想マシンインスタンスに前記補助機能を実行させ、
前記第1の仮想マシンインスタンス上で前記ユーザ送信コードの実行を監視し、前記第1の仮想マシンインスタンスの実行状態の保留中の変更を検出し、
前記保留中の変更は、第1の実行状態から第2の実行状態への変更であり、
前記第1の実行状態から前記第2の実行状態への、前記第1の仮想マシンインスタンスの実行状態の前記保留中の変更に少なくとも部分的に基づいて、前記第2の仮想マシンインスタンスの実行状態
が、前記第1の実行状態から前記第2の実行状態に変更
することを決定し、
前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスの実行状態の変更の順序を決定し、
前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスの前記実行状態を前記決定された順序で
前記第1の実行状態から前記第2の実行状態に変更する、
システム。
【請求項2】
前記第1の仮想マシンインスタンスの実行状態の前記保留中の変更は、前記第1の仮想マシンインスタンスのプロビジョニング、前記ユーザ送信コードの実行の開始、前記第1の仮想マシンインスタンスの停止、前記ユーザ送信コードの実行の停止、前記第1の仮想マシンインスタンスの再開、前記ユーザ送信コードの実行の再開、前記ユーザ送信コードの実行の終了、または、前記第1の仮想マシンインスタンスのプロビジョニング解除のうちの1つまたは複数を含む、
請求項1に記載のシステム。
【請求項3】
前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスの前記実行状態を変更する前記順序は、前記第2の仮想マシンインスタンスによって実行される前記補助機能に少なくとも部分的に基づいて決定される、
請求項1に記載のシステム。
【請求項4】
前記補助機能は、カプセル化、ロギング、トレース、デバッグ、スキャン、プロファイリング、入力の検証または出力の検証のうちの1つまたは複数を含む、
請求項1に記載のシステム。
【請求項5】
コンピュータ実装方法であって、
オンデマンドコード実行システム上でユーザ送信コードを実行する要求を受信し、
前記ユーザ送信コードに関連付けられた構成情報を取得し、前記構成情報は、少なくとも前記ユーザ送信コードを実行するように構成された第1の仮想マシンインスタンスと、補助機能を実行するように構成された第2の仮想マシンインスタンスと、を指定し、
前記構成情報に従って、前記第1の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、
前記構成情報に従って、前記第2の仮想マシンインスタンスに前記補助機能を実行させ、
前記第1の仮想マシンインスタンス上での前記ユーザ送信コードの実行に少なくとも部分的に基づいて、前記第1の仮想マシンインスタンスの実行状態の保留中の変更を識別し、
前記保留中の変更は、第1の実行状態から第2の実行状態への変更であり、
前記第1の実行状態から前記第2の実行状態への、前記第1の仮想マシンインスタンスの実行状態の前記保留中の変更に少なくとも部分的に基づいて、前記第2の仮想マシンインスタンスの実行状態
が、前記第1の実行状態から前記第2の実行状態に変更
することを決定し、
少なくとも前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスの実行状態の変更の順序を決定し、
前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスの前記実行状態を前記決定された順序で
前記第1の実行状態から前記第2の実行状態に変更する、
ことを含むコンピュータ実装方法。
【請求項6】
前記コンピュータ実装方法は、前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスのプロビジョニング順序を決定することをさらに含み、前記プロビジョニング順序に従って、前記第1の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、前記第2の仮想マシンインスタンスに前記補助機能を実行させる、
請求項5に記載のコンピュータ実装方法。
【請求項7】
前記実行状態を変更する前記順序は、前記第2の仮想マシンインスタンスの実行状態の前記変更が、前記第1の仮想マシンインスタンスの実行状態の前記保留中の変更に先行しなければならないことを指定する、
請求項5に記載のコンピュータ実装方法。
【請求項8】
前記コンピュータ実装方法は、前記第1の仮想マシンインスタンスの実行状態の前記保留中の変更を引き起こすことをさらに含む、
請求項5に記載のコンピュータ実装方法。
【請求項9】
前記構成情報は、第2の補助機能を実行するように構成された少なくとも第3の仮想マシンインスタンスをさらに指定し、実行状態変更の前記決定された順序は、前記第3の仮想マシンインスタンスの実行状態変更をさらに含む、
請求項5に記載のコンピュータ実装方法。
【請求項10】
前記コンピュータ実装方法は、前記第2の仮想マシンインスタンスと通信するように前記第1の仮想マシンインスタンスを構成することをさらに含み、前記第2の仮想マシンインスタンスと通信するように前記第1の仮想マシンインスタンスを構成することは、リダイレクト入力、リダイレクト出力またはパフォーマンス情報へのアクセス許可のうちの1つまたは複数を含む、
請求項5に記載のコンピュータ実装方法。
【請求項11】
前記第2の仮想マシンインスタンスは、指定されたユーザに関連付けられた複数の仮想マシンインスタンスに対して前記補助機能を実行するように構成され、前記複数の仮想マシンインスタンスのそれぞれは、異なるユーザ送信コードに関連付けられている、
請求項5に記載のコンピュータ実装方法。
【請求項12】
コンピュータ実行可能命令を含む非一時的なコンピュータ可読媒体であって、
前記コンピュータ実行可能命令は、オンデマンドコード実行システム上で実行されると、前記オンデマンドコード実行システムに、
オンデマンドコード実行システム上で実行可能なユーザ送信コードに関連する構成情報を取得することであって、前記構成情報は、第1の仮想マシンインスタンスに関連する第1の構成および第2の仮想マシンインスタンスに関連する第2の構成を含むことと、
前記第1の構成に従って、前記第1の仮想マシンインスタンスに前記ユーザ送信コードを実行することと、
前記第2の構成に従って、前記第2の仮想マシンインスタンスに補助機能を実行することと、
第1の実行状態から第2の実行状態への変更である、前記第1の仮想マシンインスタンスの実行状態の保留中の変更に少なくとも部分的に基づいて、
前記第1の実行状態から前記第2の実行状態への、前記第2の仮想マシンインスタンスの実行状態の変更を決定することと、
前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスの実行状態を
、前記構成情報に少なくとも部分的に基づいて、決定された順序で
前記第1の実行状態から前記第2の実行状態に変更することと、
を行わせる非一時的なコンピュータ可読媒体。
【請求項13】
前記命令は、さらに、前記オンデマンドコード実行システムに、前記ユーザ送信コードを実行するための要求を受信させる、
請求項12に記載の非一時的なコンピュータ可読媒体。
【請求項14】
前記命令はさらに、前記オンデマンドコード実行システムに、前記第2の仮想マシンインスタンスをインスタンス化させる、
請求項12に記載の非一時的なコンピュータ可読媒体。
【請求項15】
前記命令は、さらに、前記オンデマンドコード実行システムに、複数の事前に構成された仮想マシンインスタンスから前記第2の仮想マシンインスタンスを選択させる、
請求項12に記載の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【背景技術】
【0001】
コンピューティングデバイスは、データを交換するために通信ネットワークを利用することができる。企業および組織は、業務を支援するために、またはサービスをサードパーティに提供するためにいくつかのコンピューティングデバイスを相互接続するコンピュータネットワークを運営する。コンピューティングシステムは、単一の地理的位置に位置付けられるか、または(例えば、プライベートもしくはパブリックな通信ネットワークを介して相互接続された)複数の別々の地理的位置に位置付けられる場合がある。具体的には、本明細書では一般的に「データセンタ」と呼ばれるデータセンタまたはデータ処理センタは、コンピューティングリソースをデータセンタのユーザに提供するために、いくつかの相互接続されたコンピューティングシステムを含んでもよい。データセンタは、組織の代わりに運営されるプライベートデータセンタ、または一般大衆の代わりにもしくは一般大衆の利益のために運営されるパブリックデータセンタであり得る。
【0002】
データセンタリソースの利用度を向上させるために、仮想化技術により、単一の物理コンピューティングデバイスが、データセンタのユーザに対して独立したコンピューティングデバイスとして表示され、かつ動作する仮想マシンの1つまたは複数のインスタンスをホストすることができる。仮想化に伴い、単一の物理コンピューティングデバイスは、仮想マシンの作成、維持、削除、またはその他の方法による管理を動的に行い得る。結果として、ユーザは、単一のコンピューティングデバイス、またはネットワーク接続されたコンピューティングデバイスの構成を含むコンピュータリソースをデータセンタに要求することができ、様々な数の仮想マシンリソースが提供され得る。
【0003】
いくつかのシナリオでは、仮想マシンインスタンスは、特定の機能性を提供するように、いくつかの仮想マシンインスタンスタイプによって構成されてもよい。例えば、様々なコンピューティングデバイスは、コンピューティングデバイスが、異なる所望の機能性を提供すること、または同様の機能性をより効率的に提供することを可能にするために、オペレーティングシステムまたはオペレーティングシステム構成、仮想ハードウェアリソースおよびソフトウェアアプリケーションの異なる組み合わせに関連付けられてもよい。これらの仮想マシンインスタンスタイプの構成は、多くの場合、デバイス画像内に含有され、そのデバイス画像は、開始すると仮想マシンが起動するソフトウェア(例えば、それらの構成およびデータファイルと一体のOSおよびアプリケーションなど)を含有する静的データを含む。デバイス画像は、通常、インスタンスを作成または初期化するために使用されるディスク上に格納される。したがって、コンピューティングデバイスは、所望のソフトウェア構成を実施するために、デバイス画像を処理してもよい。
【図面の簡単な説明】
【0004】
【
図1】オンデマンドコード実行システムが動作して、オンデマンドコード実行システムのユーザによって送信され得るコードに対応するタスクを実行し、送信されたコードの実行を容易にするためのサイドカー仮想マシンインスタンスをプロビジョニングおよび実行することができる例示的な環境を図示するブロック図である。
【
図2】
図1のオンデマンドコード実行システム上でタスクの実行を容易にするために使用されるサイドカー仮想マシンインスタンスの構成を容易にするように構成されたサイドカー構成システムを提供するコンピューティングデバイスの一般的なアーキテクチャを図示する。
【
図3】タスクに対応するコードを
図1のオンデマンドコード実行システムに送信し、オンデマンドコード実行システムがサイドカー構成を決定して、オンデマンドコード実行システム上でのタスクの実行を容易にするための例示的な相互作用を図示するフロー図である。
【
図4】
図1のオンデマンドコード実行システムで提供される決定されたサイドカー構成を利用してタスクを実行するための例示的な相互作用を図示するフロー図である。
【
図5】
図1のオンデマンドコード実行システム上のサイドカー仮想マシンインスタンスのライフサイクルを管理するための例示的な相互作用を図示するフロー図である。
【
図6】
図1のオンデマンドコード実行システム上のタスクに対応するコードを実行するサイドカー仮想マシンインスタンスと仮想マシンインスタンスとの間の例示的な相互作用を図示するフロー図である。
【
図7】
図1のオンデマンドコード実行システムに送信されたコードに基づいてサイドカー構成を決定するための例示的なルーチンを図示するフローチャートである。
【
図8】
図1のオンデマンドコード実行システム上でタスクを実行している間、サイドカーのライフサイクルを管理するための例示的なルーチンを図示するフローチャートである。
【発明を実施するための形態】
【0005】
一般的に説明するように、本開示の態様は、オンデマンドコード実行システムに関する。オンデマンドコード実行システムでは、高速なコードの実行が可能になり、これはオンデマンドコード実行システムのユーザによって供給され得る。より詳細には、本開示の実施形態は、「サイドカー」仮想マシンインスタンスの使用によって、オンデマンドコード実行システムに補助機能を実装することに関する。本明細書で詳細に説明するように、オンデマンドコード実行システムは、ユーザがオンデマンドコード実行システム上で仮想マシンインスタンスによって実行されるコンピュータ実行可能コードを送信または指定することを可能にするネットワークにアクセス可能なサービスを提供し得る。オンデマンドコード実行システム上のコードの各セットは「タスク」を定義し、オンデマンドコード実行システムの仮想マシンインスタンス上での実行時に、そのタスクに対応する特定の機能性を実施し得る。オンデマンドコード実行システム上のタスクの個々の実施は、タスクの「実行」(または「タスク実行」)と呼ばれ得る。オンデマンドコード実行システムにより、さらに、ユーザは、ネットワークベースのストレージシステムでの新しいデータの検出、アプリケーションプログラミングインターフェース(「API」)コールのオンデマンドコード実行システムへの送信、または特別にフォーマットされたハイパーテキストトランスポートプロトコル(「HTTP」)パケットのオンデマンドコード実行システムへの送信など、様々な潜在的なイベントに基づいてタスクの実行をトリガすることができる。したがって、ユーザは、オンデマンドコード実行システムを利用して、コードが実行される基盤となるハードウェアまたはインフラストラクチャの構成または保守を必要とすることなく、任意の指定された実行可能コードを「オンデマンド」で実行することができる。さらに、オンデマンドコード実行システムは、タスクを高速に(例えば、100ミリ秒[ms]未満で)実行するように構成することができ、したがって、「リアルタイム」で(例えば、エンドユーザが遅延をほとんど知覚しないか、または全く知覚しない)タスクの実行を可能にする。
【0006】
オンデマンドコード実行システムは、要求に応じて指定されたタスクを実行する仮想マシンインスタンスをインスタンス化することができる。オンデマンドコード実行システムは、「サイドカー」仮想マシンインスタンスをさらにインスタンス化することができ、これにより、ユーザは、タスクの実行、およびタスクの実行時での仮想マシンインスタンスを制御または監視することができる。例示的には、サイドカー仮想マシンインスタンス(本明細書では「サイドカー」と呼ばれ得る)は、タスクコードを実行する仮想マシンインスタンスを制御、保護、フィルタリング、監視または管理するための1つまたは複数の機能を実装することができる。これらの機能を1つまたは複数のサイドカーに実装することにより、オンデマンドコード実行システムは、タスクコードを実行する仮想マシンインスタンスからこれらの機能を効果的に分離することができる。したがって、サイドカーの実装は、(以下でより詳細に説明するように)サイドカーを必要な場合にのみ利用可能にすることができるため、リソース使用率に関する効率を向上させる。1つのサイドカーを侵害する攻撃者は、他のユーザのサイドカーまたは仮想マシンインスタンスにアクセスすることができないため、サイドカーの実装により、個々のユーザのセキュリティがさらに向上する。
【0007】
本明細書で使用する場合、「補助機能」は、一般的に、ユーザ送信タスクコードの実行を容易にする機能を指し得る。例えば、補助機能には、カプセル化、ロギング、トレース、デバッグ、スキャン、プロファイリング、入力の検証、出力の検証、またはタスクコードの実行に関連するその他の機能が含まれる場合がある。しかしながら、これらの例は限定的ではなく、他の機能を実行するサイドカーは本開示の範囲内であることが当業者には理解されるであろう。いくつかの実施形態では、補助機能は、管理者レベルの特権で実行されるコントロールプレーン機能を含み得る。サイドカーは、ユーザごと、タスクごと、またはコールごとにこれらの機能を実行するようにインスタンス化することができ、したがって、個々のユーザに、仮想マシンインスタンスの個別のコントロールプレーンへのアクセスを提供することができる。例えば、ネットワークトラフィックをカプセル化するサイドカーを個々のユーザが利用できるようにし、物理基板ネットワークで転送されるパケットを、ユーザがユーザの仮想マシンインスタンスからアクセスすることができる仮想ネットワークに変換することができる。したがって、オンデマンドコード実行システムは、サイドカーを介してネットワークカプセル化を提供することができ、これは、ユーザコードを実行する仮想マシンインスタンスが基板ネットワークにアクセスして他のユーザのトラフィックを潜在的にカプセル化解除することを許可することなく行うことができる。
【0008】
本開示の観点から当業者によって理解されるように、本明細書に開示する実施形態は、オンデマンドコード実行システムなどのコンピューティングシステムの能力を向上させ、効率的な方法でコードを実行する。さらに、現在開示されている実施形態は、コンピューティングシステムに固有の技術的問題に対処している。具体的には、コードを実行するコンピューティングリソースの性質の制限、「常時オン」の補助機能の提供に関連するリソースオーバーヘッド、利用されていないプロビジョニング機能によって引き起こされる非効率性、および共通のコントロールプレーンを複数のユーザに提供することによって引き起こされるセキュリティの問題などである。これらの技術的な問題は、ユーザ固有またはタスク固有の機能を提供するサイドカー仮想マシンインスタンスを使用した実行環境のプロビジョニングを含む、本明細書で説明する様々な技術的解決策によって対処される。よって、本開示は、概して、既存のデータ処理システムおよびコンピューティングシステムに対する改善を表す。
【0009】
オンデマンドコード実行システムは、仮想マシンインスタンスのユーザ構成を必要とすることなく、ユーザコード(様々なプログラミング言語のいずれかで構成されたスレッド、プログラムなど)を受信し、高度に拡張性があり低遅延の方法でそのコードを実行するように構成されている、仮想マシンインスタンスマネージャを含んでもよい。具体的には、仮想マシンインスタンスマネージャは、ユーザコードを受信するより前に、かついずれかの特定の仮想マシンインスタンス構成に関するユーザからのいずれかの情報を受信するより前に、それぞれが様々なランタイム環境のいずれか1つまたは複数に対応する所定の構成セットに従って、仮想マシンインスタンスを作成し、構成することができる。その後、仮想マシンインスタンスマネージャは、コードを実行するユーザ起動の要求を受信し、この要求に関連付けられた構成情報に基づいて、コードを実行する事前に構成された仮想マシンインスタンスを識別する。仮想マシンインスタンスマネージャは、さらに、識別した仮想マシンインスタンスを割り当て、割り当てられた仮想マシンインスタンス内にコンテナを作成して構成し、独立コードオブジェクトだけでなくタスクコードもコンテナにプロビジョニングすることにより、ユーザのコードを少なくとも部分的に実行することができる。仮想マシンインスタンスマネージャを実装し、仮想マシンインスタンス上でユーザコードを実行するための様々な実施形態は、「PROGRAMMATIC EVENT DETECTION AND MESSAGE GENERATION FOR REQUESTS TO EXECUTE PROGRAM CODE」と題され、2014年9月30日に出願された米国特許番号第9,323,556号(「556特許」)により詳細に説明されており、その全体を参考として本明細書に組み込む。
【0010】
本明細書に使用される場合、用語「仮想マシンインスタンス」は、ソフトウェア、またはソフトウェアが実行し得る環境またはプラットフォーム(「実行環境」)を提供するハードウェアをエミュレートする他の実行可能コードの実行を指すことを意図する。仮想マシンインスタンスは通常、ハードウェアデバイスによって実行され,これは、仮想マシンインスタンスによってエミュレートされる物理ハードウェアとは異なる場合がある。例えば、仮想マシンは、第2のタイプのプロセッサおよびメモリ上で実行されている間に、第1のタイプのプロセッサおよびメモリをエミュレートすることができる。したがって、仮想マシンを利用して、第2の実行環境(例えば、第2のオペレーティングシステム)を実行している物理デバイス上で、第1の実行環境(例えば、第1のオペレーティングシステム)を対象とするソフトウェアを実行することができる。いくつかの例では、仮想マシンインスタンスによってエミュレートされるハードウェアは、基盤となるデバイスのハードウェアと同じまたは類似している可能性がある。例えば、第1のタイプのプロセッサを備えたデバイスは、それぞれがその第1のタイプのプロセッサのインスタンスをエミュレートする複数の仮想マシンインスタンスを実装することができる。したがって、仮想マシンインスタンスを使用して、デバイスをいくつかの論理サブデバイス(それぞれ「仮想マシンインスタンス」と呼ばれる)に分割することができる。仮想マシンインスタンスは通常、基盤となる物理デバイスのハードウェアとは異なる抽象化レベルを提供することができるが、この抽象化は必須ではない。例えば、デバイスが複数の仮想マシンインスタンスを実装し、それぞれがデバイスによって提供されるものと同一のハードウェアをエミュレートすると仮定する。このようなシナリオでは、各仮想マシンインスタンスにより、ソフトウェアアプリケーションは、他の仮想マシンインスタンス上で実行されているソフトウェアアプリケーション間の論理的な分離を維持しながら、変換を伴うことなく、基盤となるハードウェア上でコードを実行することができる。一般的に「ネイティブ実行」と呼ばれるこのプロセスは、仮想マシンインスタンスの速度またはパフォーマンスを向上させるために利用することができる。ハードウェアパススルー技法など、基盤となるハードウェアを直接利用することができる他の技法も使用することができる。
【0011】
オペレーティングシステムを実行する仮想マシンは、実行環境の一例として本明細書に記載されているが、他の実行環境も可能である。例えば、タスクまたは他のプロセスは、ハードウェアの仮想化を提供することなくランタイム環境を提供するソフトウェア「コンテナ」内で実行することができる。コンテナは、追加のセキュリティを提供するために仮想マシン内に実装することができるか、または仮想マシンインスタンスの外部で実行することができる。
【0012】
本開示の上に述べた態様と付随する利点の多くとは、添付の図面と併用されると、以下の説明を参照することにより、それらが一層よく理解されるようになるので、さらに容易に認識されるようになる。
【0013】
図1は、オンデマンドコード実行システム110が、ユーザコンピューティングデバイス102、補助サービス106およびネットワークベースのデータストレージサービス108との通信に基づいて動作することができる例示的な動作環境100のブロック図である。例示では、デスクトップコンピュータ、ラップトップおよび携帯電話を含む、オンデマンドコード実行システム110と通信する様々な例示的なユーザコンピューティングデバイス102が示される。一般的に、ユーザコンピューティングデバイス102は、デスクトップ、ラップトップまたはタブレットコンピュータ、パーソナルコンピュータ、ウェアラブルコンピュータ、サーバ、パーソナルデジタルアシスタント(PDA)、ハイブリッドPDA/携帯電話、携帯電話、電子ブックリーダ、セットトップボックス、音声コマンドデバイス、カメラおよびデジタルメディアプレーヤなどの、任意のコンピューティングデバイスとすることができる。オンデマンドコード実行システム110は、1つまたは複数のユーザインターフェース、コマンドラインインターフェース(CLI)、アプリケーションプログラミングインターフェース(API)、および/またはユーザ実行可能コード(例えば、アップロードされたコードの依存コードオブジェクトを識別するメタデータを含む)を生成およびアップロードするための他のプログラマチックインターフェースを伴うユーザコンピューティングデバイス102を提供し、ユーザ提供コードを呼び出し(例えば、オンデマンドコード実行システム110上でユーザコードを実行する要求を送信する)、イベントごとのジョブもしくは時限ジョブをスケジューリングし、ユーザ提供コードを追跡し、および/またはそれらの要求および/またはユーザコードに関連する情報の他のロギングもしくは管理を監視する。1つまたは複数の実施形態がユーザインターフェースを使用して本明細書に説明され得るが、そのような実施形態が、付加的または代替的に、CLI、API、または他のプログラマチックインターフェースを使用し得ることを理解されたい。
【0014】
例示的な環境100はさらに、ユーザの代わりに所望の機能を実装するために、オンデマンドコード実行環境110と相互作用することができる1つまたは複数の補助サービス106を含む。補助サービス106は、オンデマンドコード実行環境110にアクセス可能なデータを生成するか、別様には、オンデマンドコード実行環境110と通信するサーバなどのネットワーク接続されたコンピューティングデバイスに対応することができる。例えば、補助サービス106は、ウェブサービス(例えば、ユーザコンピューティングデバイス102、オンデマンドコード実行システム110またはサードパーティに関連付けられている)、データベース、リアリーシンプルシンジケーション(「RSS」)リーダ、ソーシャルネットワーキングサイトまたはネットワークにアクセス可能なサービスもしくはデータソースの他のソースを含むことができる。いくつかの例では、補助サービス106は、例えば、請求またはロギングサービスをオンデマンドコード実行システム110に提供するために、オンデマンドコード実行システム110に関連付けられ得る。いくつかの例では、補助サービス106は、APIコールまたは他のタスクトリガ情報などの情報をオンデマンドコード実行システム110に能動的に送信する。他の例では、補助サービス106は、オンデマンドコード実行システム110によるアクセスのためにデータが利用可能になるように、受動的であり得る。例えば、オンデマンドコード実行システム110の構成要素は、そのような受動データソースを定期的にポーリングし、提供されたデータに基づいてオンデマンドコード実行システム110内のタスクの実行をトリガすることができる。
図1では、ユーザコンピューティングデバイス102およびオンデマンドコード実行システム110とは異なるものとして図示されているが、いくつかの実施形態では、様々な補助サービス106は、ユーザコンピューティングデバイス102またはオンデマンドコード実行システム110のいずれかによって実装され得る。
【0015】
例示的な環境100はさらに、1つまたは複数の持続的または実質的な永続データソースを格納し、ここからデータを取得するために、オンデマンドコード実行システム110を有効にするように構成された1つまたは複数のネットワークベースのデータストレージサービス108を含み得る。例示的には、ネットワークベースのデータストレージサービス108は、オンデマンドコード実行システム110が、コードまたはメタデータなどのタスクに対応する情報を格納し、タスクの依存関係を表す追加のコードオブジェクトを格納し、タスクの実行中に処理されるデータを取得し、その実行に関する情報(例えば、結果など)を格納することを可能にし得る。ネットワークベースのデータストレージサービス108は、例えば、リレーショナルデータベースまたは非リレーショナルデータベースを表し得る。別の例では、ネットワークベースのデータストレージサービス108は、ファイルシステムとして配置されたデータへのアクセスを提供するように構成されたネットワークアッタチトストレージ(NAS)を表し得る。ネットワークベースのデータストレージサービス108はさらに、オンデマンドコード実行システム110が、多数の関連ファイルまたは記録、これらのファイルまたは記録のサイズ、ファイルまたは記録の名前、ファイルまたは記録の作成時間などを問い合わせることなどによって、オンデマンドコード実行システム110内に格納されたデータに関する情報の問い合わせおよび取得を可能にし得る。いくつかの例では、ネットワークベースのデータストレージサービス108は、データを論理グループ(例えば、個々のアカウントなどに関連付けられたグループ)に分離する機能などの追加機能を提供し得る。補助サービス106とは異なるものとして示されているが、ネットワークベースのデータストレージサービス108は、場合によっては、一種の補助サービス106を表すこともできる。
【0016】
ユーザコンピューティングデバイス102、補助サービス106およびネットワークベースのデータストレージサービス108は、ネットワーク104を介してオンデマンドコード実行システム110と通信することができ、ネットワーク104は、任意の有線ネットワーク、無線ネットワークまたはそれらの組み合わせを含み得る。例えば、ネットワーク104は、パーソナルエリアネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、(例えば、ラジオまたはテレビのための)無線放送ネットワーク、ケーブルネットワーク、衛星ネットワーク、携帯電話ネットワーク、またはそれらの組み合わせであってもよい。さらなる例として、ネットワーク104は、インターネットなど、様々な別個の関係者によって運営されている可能性のある、連結されたネットワークのうちのパブリックにアクセス可能なネットワークであってもよい。いくつかの実施形態では、ネットワーク104は、企業または大学のイントラネットなどのプライベートまたはセミプライベートネットワークであり得る。ネットワーク104は、汎欧州デジタル移動電話方式(GSM)ネットワーク、符号分割多重アクセス(CDMA)ネットワーク、ロングタームエボリューション(LTE)ネットワークなどの1つまたは複数の無線ネットワーク、または他の任意のタイプの無線ネットワークを含み得る。ネットワーク104は、インターネットまたは他の前に述べたタイプのいずれかのネットワークを介して通信するためのプロトコルおよび構成要素を使用することができる。例えば、ネットワーク104に使用されるプロトコルは、ハイパーテキスト転送プロトコル(HTTP)、ハイパーテキスト転送プロトコル保全(HTTPS)、メッセージ待ち行列テレメトリートランスポート(MQTT)、制約アプリケーションプロトコル(CoAP)、および同等物を含んでもよい。インターネット、または他の上に述べたタイプのいずれかの通信ネットワークを介して通信するためのプロトコルおよび構成要素は当業者にとって周知であり、したがって本明細書では、さらに詳細には記載していない。
【0017】
オンデマンドコード実行システム110は、1つまたは複数の(
図1に示さない)コンピュータネットワークを使用して相互接続された、いくつかのコンピュータシステムを含む分散コンピューティング環境において動作するものとして
図1に図示される。オンデマンドコード実行システム110は、
図1に示されているよりも少ない数または多い数のデバイスを有するコンピューティング環境内で動作することもできる。したがって、
図1のオンデマンドコード実行システム110の図示は、説明のためのものとして解釈されるべきであり、本開示を限定するものではない。例えば、オンデマンドコード実行システム110またはその様々な構成要素は、様々なウェブサービス構成要素、ホストもしくは「クラウド」コンピューティング環境、および/またはピアツーピアネットワーク構成を実装し、本明細書に説明されるプロセスの少なくとも一部を実施することができる。
【0018】
さらに、オンデマンドコード実行システム110は、ハードウェア、またはハードウェアデバイスによって実行されるソフトウェアに直接実装されてもよく、例えば、本明細書で説明される様々な機能を実施するためのコンピュータ実行可能命令を実行するように構成された物理コンピュータハードウェア上に実装される1つまたは複数の物理サーバまたは仮想サーバを含んでもよい。1つまたは複数のサーバは、例えば、1つまたは複数のデータセンタ内に、地理的に分散しているか、または地理的に同じ場所に配置されている場合がある。いくつかの例では、1つまたは複数のサーバは、多くの場合、「クラウドコンピューティング環境」と呼ばれる、迅速にプロビジョニングおよび解放が行われるコンピューティングリソースのシステムの一部として動作し得る。
【0019】
図1の例では、オンデマンドコード実行システム110は、ネットワーク104に接続されるように例示される。いくつかの実施形態では、オンデマンドコード実行システム110内の任意の構成要素は、ネットワーク104を介してオンデマンドコード実行システム110の他の構成要素と通信することができる。他の実施形態では、オンデマンドコード実行システム110内のすべての構成要素が、仮想環境100の他の構成要素と通信可能であるとは限らない。一例では、フロントエンド120(いくつかの例では、複数のフロントエンド120を表し得る)だけが、ネットワーク104に接続されてもよく、オンデマンドコード実行システム110の他の構成要素は、フロントエンド120を介して、環境100の他の構成要素と通信してもよい。
【0020】
図1では、ユーザは、ユーザコンピューティングデバイス102を介して、オンデマンドコード実行システム110と相互作用して実行可能コードを提供し、オンデマンドコード実行システム110上でそのようなコードをいつどのように実行すべきかを定義するルールまたは論理を確立することができ、これのようにして「タスク」を確立する。例えば、ユーザは、ユーザが開発したウェブまたはモバイルアプリケーションと通信する数個のコードを起動することを望み得る。コードを起動する1つの方法は、仮想マシンインスタンスを、サービスとしてインフラストラクチャを提供するサービスプロバイダから獲得し、ユーザの要望に合わせるように仮想マシンインスタンスを構成し、コードを起動するように構成された仮想マシンインスタンスを使用するためのものであろう。このプロセスの複雑性を回避するために、ユーザは、代わりに、オンデマンドコード実行システム110にコードを提供し、オンデマンドコード実行システム110にコードを実行するように要求することができる。オンデマンドコード実行システム110は、コード実行要求に基づいて、計算能力(例えば、下記により詳細に説明される、コンテナ、インスタンスなど)の獲得および構成に対処することができ、計算能力を使用して、コードを実行することができる。オンデマンドコード実行システム110は、量に基づいて、自動的にスケールアップおよびスケールダウンしてもよく、これにより過度の利用(例えば、かなり少ない計算リソースの取得および性能問題への影響)、少ない利用(例えば、コードを実行するために必要以上に大きい計算リソースを取得することにより過剰な支払いが発生する)について心配しなければならない負担から、ユーザを解放する。本開示の実施形態によれば、以下でより詳細に説明するように、オンデマンドコード実行システム110は、ユーザのコードをより効率的に実行し、コンピューティングリソースの利用を減らすように、カスタマイズされたオペレーティングシステムで仮想マシンインスタンスを構成することができる。
【0021】
オンデマンドコード実行システム110との相互作用を可能にするために、システム110は、オンデマンドコード実行システム110との相互作用を可能にする1つまたは複数のフロントエンド120を含む。例示的な実施形態では、フロントエンド120は、オンデマンドコード実行システム110によって提供される他のサービスへの「フロントドア」として機能し、ユーザが(ユーザコンピューティングデバイス102を介して)コンピュータ実行可能コードを提供し、実行を要求し、および結果を表示することを可能にする。フロントエンド120は、オンデマンドコード実行システム110と他のコンピューティングデバイスとの間の相互作用を可能にするための様々な構成要素を含む。例えば、各フロントエンド120は、ユーザコンピューティングデバイス102に、ユーザ指定コードをオンデマンドコード実行システム110にアップロードまたは別様には通信し、その後、そのコードの実行を要求する機能を提供する要求インターフェースを含み得る。一実施形態では、要求インターフェースは、グラフィカルユーザーインターフェース(GUI)、CLIまたはAPIを介して外部コンピューティングデバイス(例えば、ユーザコンピューティングデバイス102、補助サービス106など)と通信する。フロントエンド120は要求を処理し、要求が適切に許可されたことを確認する。例えば、フロントエンド120は、要求に関連付けられるユーザが、要求で指定されたユーザコードにアクセスすることが許可されているかどうかを決定してもよい。
【0022】
本明細書で使用されるユーザコードへの言及は、特定のプログラム言語で記述された任意のプログラムコード(例えば、プログラム、ルーチン、サブルーチン、スレッド等)を指し得る。本開示では、用語「コード」、「ユーザコード」および「プログラムコード」は、互換的に使用されてもよい。このようなユーザコードは、例えば、ユーザによって開発された特定のウェブアプリケーションまたはモバイルアプリケーションに関連して、特定の機能を実現するように実行され得る。上記のように、ユーザコードの個々のコレクション(例えば、特定の機能を実現するため)は、本明細書では「タスク」と呼ばれ、そのコードの特定の実行(例えば、コードのコンパイル、コードの解釈または別様にはコードを実行可能化にすること)は「タスク実行」または単に「実行」と呼ばれる。タスクは、非限定的な例として、JavaScript(例えば、node.js)、Java、Pythonおよび/またはRuby(および/または別のプログラミング言語)で記述され得る。タスクは、様々な方式で、オンデマンドコード実行システム110で実行するために「トリガ」され得る。一実施形態では、ユーザまたは他のコンピューティングデバイスは、タスクを実行する要求を送信してよく、それは、一般的に、タスクを実行する「コール」と呼ばれ得る。このようなコールは、実行されるユーザコード(または、その場所)および、ユーザコードを実行するために使用される1つまたは複数の引数を含み得る。例えば、コールは、タスクを実行する要求と併せてタスクのユーザコードを提供し得る。別の例では、コールは、その名前または識別子によって、以前にアップロードされたタスクを識別し得る。さらに別の例では、タスクに対応するコードは、タスクに対するコールに含まれてよく、さらに、要求がオンデマンドコード実行システム110によって受信される前に、別個の場所(例えば、補助サービス106のストレージまたはオンデマンドコード実行システム110の内部のストレージシステム)にアップロードされる。上記のように、タスクのコードは、タスクの実行前にコードオブジェクトが実行環境内のタスクのコードと組み合わされるように、それらのコードオブジェクトの識別子を使用することによって、オンデマンドコード実行システム110に維持される追加のコードオブジェクトを参照することができる。オンデマンドコード実行システム110は、タスクコールが処理されるときのタスクのコードが利用可能である場所に基づいて、そのタスクの実行戦略を変更させ得る。フロントエンド120の要求インターフェースは、ユーザから、ハイパーテキスト転送プロトコルセキュア(HTTPS)要求としてタスクを実行するためのコールを受信し得る。さらに、HTTPS要求に含まれる任意の情報(例えば、ヘッダおよびパラメータ)も、タスクを実行するときに処理され利用され得る。上記に説明されたように、例えば、HTTP、MQTTおよびCoAPを含む任意の他のプロトコルは、タスクコールを含むメッセージを要求インターフェース122に転送するために使用され得る。
【0023】
タスクを実行するためのコールが、タスクに対応するユーザコードと併せて使用すべき1つまたは複数の(ネイティブライブラリを含む)サードパーティライブラリを指定してもよい。一実施形態では、コールは、実行を要求されたタスクに対応するユーザコードおよび任意のライブラリ(および/または、その格納場所の識別)を含むファイルを、オンデマンドコード実行システム110に提供してよい。いくつかの実施形態では、コールは、実行すべきタスクのプログラムコード、プログラムコードが記述された言語、コールと関連付けられたユーザおよび/またはプログラムコードを実行するために確保すべきコンピューティングリソース(例えば、メモリなど)を示すメタデータを含む。例えば、タスクのプログラムコードは、コールとともに提供されてよく、ユーザによって事前にアップロードされてよく、オンデマンドコード実行システム110(例えば、標準化されたルーチン)によって提供されてよく、および/またはサードパーティによって提供されてよい。例示的には、コールに含まれていないか、または以前にユーザによってアップロードされたコードは、コードに関連付けられたURIを使用することによって、タスクのメタデータ内で参照され得る。いくつかの実施形態では、そのようなリソースレベルの制約(例えば、特定のユーザコードを実行するために、割り当てられる予定のメモリの容量)は、特定のタスクに対して指定され、タスクの実行ごとには変更することはできない。そのような場合、オンデマンドコード実行システム110は、各個別のコールが受信される前に、そのようなリソースレベルの制約にアクセスすることができ、個々のコールは、そのようなリソースレベルの制約を指定しなくてもよい。いくつかの実施形態では、コールは、タスクを実行するためにコールが呼び出す許可または権限の種類を指示する許可データなどの他の制約を指定することができる。係る許可データは、(例えば、プライベートネットワーク上の)プライベートリソースにアクセスするためにオンデマンドコード実行システム110によって使用され得る。いくつかの実施形態では、個々のコードオブジェクトはまた、許可または認証に関連付けられ得る。例えば、サードパーティがコードオブジェクトを送信し、そのオブジェクトをユーザのサブセットのみが読み取り可能として指定する場合がある。オンデマンドコード実行システム110は、コードオブジェクトに関してこれらの許可または認証を実施するための機能を含み得る。
【0024】
いくつかの実施形態では、コールは、コールを処理するために採用されるべき動作を指定してよい。そのような実施形態では、コールは、コールで参照されるタスクを実行するための1つまたは複数の実行モードを有効にするためのインジケータを含んでもよい。例えば、コールは、タスクの実行に関連して生成され得るデバッグおよび/またはロギングの出力が(例えば、コンソールユーザインターフェースを介して)ユーザに返されるデバッグモードでタスクが実行される必要があるかどうかを示すフラグまたはヘッダを含んでもよい。このような例では、オンデマンドコード実行システム110がコールを調べ、フラグまたはヘッダを検索してもよく、フラグまたはヘッダが存在する場合には、オンデマンドコード実行システム110は、タスクが実行されるコンテナの動作(例えば、ロギング機能)を変更し、出力データがユーザに返されるようにしてもよい。いくつかの実施形態では、動作/モードインジケータは、オンデマンドコード実行システム110によってユーザに提供されるユーザインターフェースによってコールに追加される。ソースコードプロファイリング、リモートデバッギングなどの他の機能も、コールで提供される表示に基づいて、有効または無効にされてもよい。
【0025】
コード実行のための要求を管理するために、フロントエンド120は、要求されたタスクの実行の記録を維持することができる実行キュー(
図1には図示せず)を含むことができる。例示的には、オンデマンドコード実行システム110による同時に行うタスク実行の数は制限されており、そのため、オンデマンドコード実行システム110で開始される新しいタスク実行(例えば、APIコールを介して、実行済みまたは実行中のタスクからのコールを介してなど)は、実行キュー124に配置されてよく、例えば、先入れ先出しの順序で処理されてよい。いくつかの実施形態では、オンデマンドコード実行システム110は、各ユーザアカウントの個別の実行キューなど、複数の実行キューを含むことができる。例えば、オンデマンドコード実行システム110のユーザは、(例えば、コスト上の理由で)オンデマンドコード実行システム110でのタスク実行の速度を制限することを望むことができる。したがって、オンデマンドコード実行システム110は、アカウント固有の実行キューを利用して、特定のユーザアカウントによるタスクの同時実行の速度を調節することができる。いくつかの例では、オンデマンドコード実行システム110は、特定のアカウントまたは指定された優先順位のタスク実行が実行キュー内で回避または優先されるように、タスク実行に優先順位を付けることができる。他の例では、オンデマンドコード実行システム110は、そのタスクのコールを受信した直後または実質的に直後にタスクを実行することができ、したがって、実行キューを省略してもよい。
【0026】
上記のように、タスクは、ユーザコンピューティングデバイス102(例えば、要求インターフェースで受信されるように)からの明示的なコールに基づいて、オンデマンドコード実行システム110で実行するためにトリガされてもよい。代替的または追加的に、タスクは、1つまたは複数の補助サービス106またはネットワークベースのデータストレージサービス108から取得されたデータに基づいて、オンデマンドコード実行システム110で実行するためにトリガされ得る。補助サービス106との相互作用を容易にするために、フロントエンド120は、データについて補助サービス106またはデータストレージサービス108をポーリングするように動作するポーリングインターフェース(
図1には図示しない)を含むことができる。例示的には、ポーリングインターフェースは、新たに利用可能なデータ(例えば、ソーシャルネットワークの「投稿」、ニュース記事、ファイル、記録など)を取得するために、1つまたは複数のユーザ指定の補助サービス106またはデータストレージサービス108に定期的に要求を送信し、そのデータが、オンデマンドコード実行システム110上でタスクの実行をトリガするユーザの確立基準に対応するかどうかを決定することができる。例示的には、タスクの実行基準は、新しいデータが補助サービス106またはデータストレージサービス108で利用可能であるかどうか、データのタイプもしくはコンテンツ、またはデータに対応するタイミング情報を含み得るが、これらに限定されない。いくつかの例では、補助サービス106またはデータストレージサービス108は、フロントエンド120に新しいデータの利用可能性を通知するように機能することができ、したがって、ポーリングサービスは、そのようなサービスに関して不必要であり得る。
【0027】
明示的なユーザコールに基づいて実行されるタスクおよび補助サービス106からのデータに加えて、オンデマンドコード実行システム110は、いくつかの例では、独立して、タスクのトリガを実行するように動作し得る。例えば、オンデマンドコード実行システム110は、(ユーザからの指示に基づいて)動作して、いくつかの指定された時間間隔(例えば、10分ごと)それぞれでタスクの実行をトリガすることができる。
【0028】
フロントエンド120は、オンデマンドコード実行システム110上でのタスクの実行に関する情報を出力するように構成された出力インターフェース(
図1には図示しない)をさらに含むことができる。例示的には、出力インターフェースは、タスク実行に関するデータ(例えば、タスクの結果、タスク実行に関連するエラー、または実行を完了するために必要な合計時間、実行を介して処理された合計データなどのタスク実行の詳細)を、例えば、課金またはロギングサービスを含み得るユーザコンピューティングデバイス102または補助サービス106に送信することができる。出力インターフェースはさらに、サービスコールなど、送信をデータの補助サービス106に対して行うことができる。例えば、出力インターフェースは、タスクの実行中に利用されて、(例えば、タスクの実行中に生成されたデータを格納するため)API要求を外部サービス106に送信することができる。
【0029】
いくつかの実施形態では、オンデマンドコード実行システム110は、複数のフロントエンド120を含んでもよい。そのような実施形態では、ロードバランサ(
図1には図示しない)は、例えば、ラウンドロビン方式で、着信コールを複数のフロントエンド120に分散するように提供されてもよい。いくつかの実施形態では、ロードバランサが着信コールを複数のフロントエンド120に分散する方法は、オンデマンドコード実行システム110の他の構成要素の場所または状態に基づくことができる。例えば、ロードバランサは、地理的に近くのフロントエンド120に、またはコールを処理する能力のあるフロントエンドにコールを分散する場合がある。各フロントエンド120が、以下に説明するアクティブプール140Aなどのオンデマンドコード実行システムの別の構成要素の個々のインスタンスに対応する場合、ロードバランサは、それらの他の構成要素の容量または負荷に従ってコールを分散することができる。以下でより詳細に説明するように、いくつかの例では、タスクを実行するための所与のコールが常に(またはほとんど常に)同じフロントエンド120にルーティングされるように、コールがフロントエンド120間で決定論的に分散され得る。これは、例えば、タスクの正確な実行記録を維持して、タスクが必要な回数だけ実行されるようにするのに役立ち得る。ロードバランサを介したコールの分散が例示的に説明されているが、エニーキャストルーティングなどの他の分散技法が当業者には明らかであろう。
【0030】
タスクの実行を容易にするために、オンデマンドコード実行システム110は、次に、1つまたは複数のサイドカー画像を含む1つまたは複数のサイドカーライブラリ130を含む。
図1に示される例では、サイドカーライブラリ130は、オペレーティングシステム132Aおよびエージェント132Bを含むサイドカー画像132と、オペレーティングシステム134Aおよびエージェント134Bを含むサイドカー画像134とを含む。いくつかの実施形態では、オペレーティングシステム132Aおよびオペレーティングシステム134Aは、同じオペレーティングシステムであり得る。以下でより詳細に説明するように、エージェント132Bおよび134Bは、1つまたは複数の仮想マシンインスタンスと通信するように構成された場合、1つまたは複数の補助機能を実行することができる。いくつかの実施形態では、サイドカーライブラリ130は、補助機能を実行するエージェント(例えば、エージェント132Bおよび134B)のみを含み、サイドカーは、サイドカーライブラリ130からのエージェントのうち1つまたは複数で仮想マシンインスタンスをプロビジョニングすることによって作成される。
【0031】
オンデマンドコード実行システム110はさらに、サイドカー構成システム160を含み、これは、本開示の態様を実装し、例えば、特定のタスクに対する仮想マシンインスタンスおよびサイドカーインスタンスの決定および構成を含む。いくつかの実施形態では、サイドカー構成システム160は、仮想マシン構成ユニット162を含み、これは、ユーザがフロントエンド120を介してコードを送信して、送信されたコードにより仮想マシン構成を決定するときに呼び出され得る。以下でより詳細に説明するように、仮想マシン構成ユニット162は、ユーザのコードを分析し、ユーザ送信コードの実行前、実行中および/または実行後に、例えば、オペレーティングシステムの「フック」、入力および/または出力リダイレクト、または仮想マシンインスタンスと様々なサイドカーとの間の相互作用を容易にする他の変更を識別することができる。様々な実施形態では、仮想マシン構成ユニット162は、ユーザのコードを分析するか、またはユーザ要求を処理して、仮想マシン構成を決定することができる。さらなる実施形態では、オンデマンドコード実行システム110は、サイドカー構成ユニット164を含み、これは、仮想マシンインスタンス(複数可)との相互作用を容易にするためのサイドカーの任意の構成によりプロビジョニングされるサイドカーを識別し得る。サイドカー構成ユニット164は、例えば、サイドカーが実行すべき入力検証を識別し、それらを実行するようにサイドカーを構成することができる。例えば、ユーザ送信コードは、特定のフォーマットで入力データを処理することができ、したがって、サイドカー構成を決定して、入力データがそのフォーマットであることを検証することができる。
【0032】
オンデマンドコード実行システムは、さらに、着信コールを提供するために使用されるインスタンスを管理してタスクを実行し、これらのインスタンスための補助機能を提供するために使用されるサイドカーを管理する1つまたは複数のワーカーマネージャ140を含む。
図1に例示される例では、各ワーカーマネージャ140は、1人または複数のユーザに現在割り当てられ、1つまたは複数の物理ホストコンピューティングデバイスによって実装される仮想マシンインスタンスのグループ(「プール」として呼ばれることがある)であるアクティブプール140Aを管理する。仮想マシンインスタンスは特定のユーザに割り当てられるように本明細書に説明されるが、いくつかの実施形態では、インスタンスがユーザのグループに割り当てられてよく、これにより、インスタンスがユーザのグループに関係付けられ、グループの任意のメンバがインスタンス上のリソースを利用することができる。例えば、同じグループ内のユーザは、(例えば、そのセキュリティ証明書に基づいて)同じセキュリティグループに属してもよく、それにより、別のメンバのタスクが同じインスタン上の別のコンテナ内で実行された後で特定のインスタンス上のコンテナ内の一方のメンバのタスクを実行することは、セキュリティ上のリスクを引き起こさない。同様に、ワーカーマネージャ140は、1つまたは複数のポリシに従って、インスタンスおよびコンテナを割り当ててもよく、そのポリシは、どの要求がどのコンテナ内で実行できるか、どのインスタンスがどのユーザに割り当てられるかを指図する。例示的なポリシは、インスタンスが同じアカウント(例えば、オンデマンドコード実行システム110によって提供されるサービスにアクセスするためのアカウント)を共有するユーザのコレクションに割り当てられることを指定してもよい。いくつかの実施形態では、同じユーザグループに関係付けられる要求は、同じコンテナを共有してもよい(例えば、それに関連するユーザコードが同一である場合)。いくつかの実施形態では、タスクは、グループの異なるユーザ間の違いを区別せず、タスクに関連付けられるユーザが属するグループを単に示す。
【0033】
タスクを実行するためのイベントのトリガがフロントエンド120によって正常に処理された後、フロントエンド120は、タスクを実行するワーカーマネージャ140に要求を渡す。一実施形態では、各フロントエンド120は、対応するワーカーマネージャ140(例えば、フロントエンド120と同じ場所にあるか地理的に近いワーカーマネージャ140)に関連付けられてよく、したがって、フロントエンド120は、ほとんどまたはすべての要求をそのワーカーマネージャ140に渡すことができる。別の実施形態では、フロントエンド120は、実行要求を渡すワーカーマネージャ140を決定するように構成されたロケーションセレクタを含み得る。一実施形態では、ロケーションセレクタは、コールをハッシュすることに基づいてコールを受信するようにワーカーマネージャ140を決定し、ハッシュ値に基づいて(例えば、ハッシュリングを介して)選択されたワーカーマネージャ140にコールを分散することができる。ワーカーマネージャ140間でコールを分散するための他の様々なメカニズムは、当業者には明らかであろう。本開示の実施形態によれば、ワーカーマネージャ140は、仮想マシンインスタンスをプロビジョニングするときに、仮想マシン構成および/またはサイドカー構成を取得することができる。
【0034】
図1に示されるように、インスタンスは、オペレーティングシステム(OS)、言語ランタイムおよびコンテナを有してもよい。コンテナは、OSおよびランタイムおよびコンテナにロードされた様々なタスクに対応するユーザコードの個別コピーを有してよい。
図1の例では、ワーカーマネージャ140によって管理されるアクティブプール140Aは、仮想マシンインスタンス150を含む。インスタンス150は、オペレーティングシステム150Aおよびユーザコード150Bを含む。いくつかの実施形態では、ワーカーマネージャ140は、アクティブプール140A内のインスタンスのリストを維持してもよい。インスタンスのリストは、さらに、インスタンスの構成(例えば、OS、ランタイム、コンテナなど)を指定してもよい。いくつかの実施形態では、ワーカーマネージャ140は、ウォーミングプール内のインスタンスのリスト(例えば、インスタンスの数および種類を含む)へのアクセスを有してもよい。他の実施形態では、ワーカーマネージャ140は、ウォーミングプール内の仮想マシンインスタンスの認識を有することなく、計算能力をウォーミングプールマネージャに要求する。
【0035】
アクティブプール140Aは、サイドカー152およびサイドカー154などの1つまたは複数のサイドカー仮想マシンインスタンスをさらに含むことができる。
図1に図示するように、サイドカー152は、OS152Aおよびエージェント152Bを含み、サイドカー154は、OS154Aおよびエージェント154Bを含む。いくつかの実施形態では、サイドカー152および154の一方または両方は、サイドカーライブラリ130からのサイドカー画像132または134のプロビジョニングされたインスタンスに対応し得る。サイドカー152および154は、以下でより詳細に説明するように、ユーザコード150Bを実行する仮想マシンインスタンス150と併せて1つまたは複数の補助機能を提供することができる。
【0036】
ワーカーマネージャ140は、サイドカーライフサイクル管理ユニット142をさらに含むことができる。以下でより詳細に説明するように、サイドカーライフサイクル管理ユニット142は、仮想マシンインスタンス150などの仮想マシンインスタンスのライフサイクルを監視し、対応するサイドカーインスタンス(例えば、サイドカー152および154)のライフサイクルが、それらが接続されている仮想マシンインスタンス(複数可)に同期されていることを保証し得る。以下に説明するように、サイドカーライフサイクル管理ユニット142は、仮想マシンインスタンスが実行状態の変更をしたときに、特定のサイドカーがその実行状態に並行しながら先行するか、続くか、または変更するかを決定してよく、それに応じてサイドカーに実行状態の変更を実施させ得る。いくつかの実施形態では、サイドカーライフサイクル管理ユニット142は、アクティブプール140Aの構成要素であり得る。他の実施形態では、サイドカーライフサイクル管理ユニット142は、アクティブプール140Aの外側に位置し、アクティブプール140Aからのサイドカーの追加、削除および/または追加もしくは削除のタイミングを容易にすることができる。
【0037】
いくつかの機能は、一般的に、オンデマンドコード実行システム110の個々の構成要素を参照して本明細書に説明されているが、他の構成要素または構成要素の組み合わせはこのような機能に追加的にまたは代替的に実装してよい。例えば、ワーカーマネージャ140は、OS構成システム160を参照して本明細書で説明されるのと同様または同一の方法で仮想マシンインスタンスを構成するように動作することができる。当業者はまた、本開示が、1つの仮想マシンインスタンス150が2つのサイドカー152および154と通信している
図1に図示される実施形態に限定されないことを理解するであろう。様々な実施形態では、任意の数のサイドカーが、仮想マシンインスタンスとサイドカーとの間の1対多および多対多の関係を含む、任意の数の仮想マシンインスタンスと通信することができる。
【0038】
図2は、オンデマンドコード実行システム110内のサイドカー構成を決定するように動作するコンピューティングシステム(サイドカー構成システム160と呼ばれる)の一般的なアーキテクチャを図示している。
図2に図示するサイドカー構成システム160の一般的なアーキテクチャは、本開示の態様を実施するために使用することができるコンピュータハードウェアおよびソフトウェアモジュールの配列を含む。ハードウェアモジュールは、以下にさらに詳細に説明するように、物理電子デバイスで実装され得る。サイドカー構成システム160は、
図2に示すものよりも多い(または少ない)要素を含む場合がある。しかしながら、開示を可能にするために、これらの一般的な従来の要素のすべてを示す必要はない。さらに、
図2に示される一般的なアーキテクチャは、
図1に示される他の構成要素のうちの1つまたは複数を実装するために使用することができる。例示のように、サイドカー構成システム160は、処理ユニット290、ネットワークインターフェース292、コンピュータ可読媒体ドライブ294および入力/出力デバイスインターフェース296を含み、これらはすべて、通信バスを介して互いに通信することができる。ネットワークインターフェース292は、1つまたは複数のネットワークまたはコンピューティングシステムへの接続性を提供してもよい。したがって、処理ユニット290は、ネットワーク104を介して、情報および命令を他のコンピューティングシステムまたはサービスから受信してもよい。処理ユニット290はまた、メモリ280との間で通信し、さらに、入力/出力デバイスインターフェース296を介して、選択式ディスプレイ(図示しない)用の出力情報を提供してもよい。入力/出力デバイスインターフェース296はまた、入力を選択式入力デバイス(図示しない)から受信してもよい。
【0039】
メモリ280は、本開示の1つまたは複数の態様を実施するために、処理ユニット290が実行するコンピュータプログラム命令(いくつかの実施形態では、モジュールとしてグループ化される)を含んでもよい。メモリ280は、一般に、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)および/または他の永続的、補助的、もしくは非一時的なコンピュータ可読媒体を含む。メモリ280は、サイドカー構成システム160の一般的な管理および動作において処理ユニット290が使用するためのコンピュータプログラム命令を提供するオペレーティングシステム284を格納してよい。メモリ280はさらに、本開示の態様を実施するためのコンピュータプログラム命令および他の情報を含んでもよい。例えば、一実施形態では、メモリ280は、例えば、ナビゲーションを介して、コンピューティングデバイス上に表示するためのユーザインターフェース(および/または、そのための命令)と、および/またはコンピューティングデバイス上にインストールされたブラウザもしくはアプリケーションなどのブラウジングインターフェースを生成する、ユーザインターフェースユニット282を含む。さらに、メモリ280は、1つまたは複数のデータリポジトリ(図示しない)を含み、および/またはそれと通信し、例えば、ユーザプログラムコードおよび/またはライブラリにアクセスしてもよい。
【0040】
ユーザインターフェースユニット282に加えて、および/またはユーザインターフェースユニット282と組み合わせて、メモリ280は、処理ユニット290によって実行することができる仮想マシン構成ユニット162およびサイドカー構成ユニット164を含み得る。一実施形態では、仮想マシン構成ユニット162およびサイドカー構成ユニット164は、以下でさらに説明するように、本開示の様々な態様、例えば、オンデマンドコード実行システム110内でのサイドカー構成の生成または選択、仮想マシン構成の決定などを個別にまたは集合的に実施する。
【0041】
仮想マシン構成ユニット162およびサイドカー構成ユニット164は、サイドカー構成システム160の一部として
図2に示されており、他の実施形態では、仮想マシン構成ユニット162およびサイドカー構成ユニット164のすべてまたは一部は、オンデマンドコード実行システム110の他の構成要素および/または別のコンピューティングデバイスによって実装され得る。例えば、本開示の特定の実施形態では、オンデマンドコード実行システム110と通信する別のコンピューティングデバイスは、サイドカー構成システム160の一部として例示されるようなモジュールおよび構成要素と同様に動作するいくつかのモジュールまたは構成要素を含んでもよい。
【0042】
いくつかの実施形態では、サイドカー構成システム160は、
図2に示したもの以外の構成要素をさらに含んでもよい。例えば、メモリ280は、実行環境をタスクに割り当てるためのインスタンス割り当てユニット、実行環境内でのタスクの実行を容易にするためのユーザコード実行ユニット、または仮想マシンインスタンス内にコンテナの作成、準備および構成を管理するためのコンテナマネージャをさらに含み得る。
【0043】
図3を参照すると、ユーザ送信コードを実行するためのサイドカーを決定および構成するための例示的な相互作用が図示されている。
図3の相互作用は(1)で開始し、ここで、ユーザデバイス102は、オンデマンドコード実行システム110上でタスクコードを実行するための要求を生成することができる。例示的には、ユーザは、その実行が様々な補助機能を必要とし、したがって、これらの機能を提供する1つまたは複数のサイドカーを必要とするコードを生成することができる。いくつかの実施形態では、ユーザは、タスクコードの実行中にユーザが必要になると予想する補助機能のリストを生成または識別することができる。(2)で、ユーザデバイス102は、APIまたはフロントエンド120の他のインターフェースを使用することなどによって、フロントエンド120に要求を送信する。要求は、例えば、タスクコードおよびサイドカーまたは補助機能のリストを含み得る。(3)で、フロントエンド120は、送信されたタスクコードを検証する。検証は、例えば、タスクコードがオンデマンドコード実行システム110によって実行可能であることを検証することを含むことができる。
【0044】
(4)では、フロントエンド120は、タスクのサイドカーのセットを決定するためにサイドカー構成システム160に要求を送信する。その後、(5)では、サイドカー構成システム160はサイドカーの適切なセットを決定する。例示的には、サイドカー構成システム160の仮想マシン構成ユニット162は、タスクコードの実行を容易にするサイドカー仮想マシンインスタンスのセットを識別するために要求を分析することができる。次に、サイドカー構成ユニット164は、タスクコードの実行中に必要とされるだろう仮想マシンインスタンスおよびサイドカーを構成することができる。例えば、サイドカー構成システム160は、タスクコードが実行中に入力検証を必要とするであろうと決定することができる。したがって、仮想マシン構成ユニット162は、サイドカーから処理された入力を受信するように仮想マシンインスタンスを構成することができ、サイドカー構成ユニット164は、必要な入力検証を実行するようにサイドカーを識別および構成することができる。さらなる例として、サイドカー構成システム160は、ユーザがタスクコードの実行をプロファイリングして、コードを最適化できるかどうか、およびどのように最適化することができるかを決定することを望むと決定することができる。したがって、仮想マシン構成ユニット162は、タスク実行中にプロファイリングデータを出力するように仮想マシンインスタンスを構成することができ、サイドカー構成ユニット164は、プロファイリングデータを集約および報告するサイドカーを構成することができる。
【0045】
(6)では、サイドカー構成システムは、データ記憶装置108などの記憶装置に、決定されたサイドカーの構成および検証タスクコードを格納することができる。したがって、オンデマンドコード実行システム110は、以下でより詳細に説明するように、タスクコードを実行するためのさらなる要求を受信するときに、コードを分析し、サイドカー構成を決定するのに費やされる時間を削減することができる。いくつかの実施形態では、オンデマンドコード実行システム110は、要求ごとにサイドカーを決定することができる。例えば、要求には、タスクコードの実行時に特定のサイドカーを含めるかどうかを示すデバッグフラグまたは他の情報が含まれる場合がある。
【0046】
いくつかの実施形態では、上記の動作の順序および実装は変更することができ、あるいは、これらの相互作用は、オンデマンドコード実行システム110の追加または代替の要素によって行われてもよい。例えば、一実施形態では、仮想マシン構成ユニット162およびサイドカー構成ユニット164を組み合わせることができ、これらのユニットによって行われる決定は、集合的に、タスクコードを実行する仮想マシンの構成を含む「サイドカー構成」と見なすことができる。さらなる例として、別の実施形態では、ユーザデバイス102は、送信タスクコードに対して特定のサイドカー構成を要求することができ、サイドカー構成システム160は、この要求を検証、処理および/または実装することができる。
【0047】
オンデマンドコード実行システム110上でタスクを実行することに併せて所定のサイドカーの構成を利用するための例示的な相互作用は、
図4を参照して説明される。(1)において、ユーザデバイス102は、タスクの実行を要求することができる。いくつかの実施形態では、上記のように、フロントエンド120は、要求を受信することなくタスク実行を開始することができ、その場合、(1)での相互作用を省略してもよい。
【0048】
(2)では、フロントエンド120は、ワーカーマネージャ140に、実行のためにタスクを分散する。タスク実行を分散する前に、フロントエンド120は、上記の参照により組み込まれる「556特許」内でより詳細に説明されるように、要求のキューイング、要求の検証などのいくつかの追加の相互作用のいずれかを行うことができる。
【0049】
(3)では、ワーカーマネージャ140は、タスクのサイドカー設定を要求する。いくつかの実施形態では、上記のように、サイドカー構成は、タスクのコードが検証のために送信されるときに(例えば、
図3に示される相互作用を実行することによって)決定され得る。他の実施形態では、サイドカー構成は、タスクのコードが検証のために送信されるときにユーザによって提供され得る。さらなる実施形態では、サイドカー構成は、要求ごとに決定することができる。(4)では、ワーカーマネージャ140は、データ記憶装置108から以前に決定された(または以前に指定された)サイドカー構成を受信する。
【0050】
その後、(5)において、ワーカーマネージャ140は受信されたサイドカー構成に従って、仮想マシンインスタンスおよびサイドカーの構成および実行を行う。いくつかの実施形態では、上記のように、ワーカーマネージャ140は、
図1のサイドカーライブラリ130などのライブラリからサイドカー画像を取得し、構成に従ってこれらの画像を構成することができる。他の実施形態では、ワーカーマネージャ140は、完全にまたは部分的に事前構成されたサイドカーをワーミングプールから取得し、必要に応じて追加の構成を実行することができる(例えば、サイドカーを特定の仮想マシンインスタンスと通信させる)。さらに別の実施形態では、ワーカーマネージャ140は、ウォーミングプールから複数の仮想マシンインスタンスを取得し、タスクコードを実行するようにインスタンスのいくつかを構成し、(例えば、補助機能を実行するエージェントでサイドカーインスタンスをプロビジョニングすることによって)他のインスタンスをサイドカーとして構成することができる。
【0051】
「主な」仮想マシンインスタンス(例えば、タスクコードを実行するもの)のライフサイクルに併せてサイドカーのライフサイクルを管理するための例示的な相互作用は、
図5を参照して説明される。(1)において、サイドカーライフサイクル管理ユニット142は、仮想マシンインスタンス150の実行を監視する。例示的には、サイドカーライフサイクル管理ユニット142は、入力、出力、リソース使用率、仮想マシンインスタンス150によって生成された指標、ワーカーマネージャ140によって生成された指標、または仮想マシンインスタンス150の状態に関する他の情報を監視することができる。
【0052】
(2)では、サイドカーライフサイクル管理ユニット142は、仮想マシンインスタンス150の実行状態に変更が生じようとしていることを検出する。実行状態の変更には、例えば、仮想マシンインスタンス150のプロビジョニング、タスクコードの実行開始、タスクコードの実行の停止、タスクコードの実行の再開、タスクコードの実行終了、仮想マシンインスタンス150の停止、仮想マシンインスタンス150の再開、仮想マシンインスタンス150のプロビジョニング解除などが含まれ得る。タスクコードの実行終了には、正常な終了(例えば、完了するまでのタスクコードの実行)と異常な終了(例えば、エラーのため、ユーザが終了を要求したため、オペレーティングシステムから信号が受信されたためなどにより、タスクコードが実行停止した)の両方が含まれる場合がある。いくつかの実施形態では、サイドカーライフサイクル管理ユニット142は、実行状態の保留中の変更をその発生前に検出する。例えば、サイドカーライフサイクル管理ユニット142は、ワーカーマネージャ140が仮想マシンインスタンス150をプロビジョニングしている、またはプロビジョニングしようとしているという通知を受信することができる。他の実施形態では、サイドカーライフサイクル管理ユニット142は、変更が発生している間または発生した後に変更を検出することができる。例えば、サイドカーライフサイクル管理ユニット142は、タスクコードが利用可能なすべての入力データを処理したため、閾値量のコンピューティングリソースが消費されたため、またはタスクコードがエラーメッセージで終了したために、仮想マシンインスタンスがタスクコードの実行を停止または終了したことを検出することができる。
【0053】
その後、(3)では、サイドカーライフサイクル管理ユニット142は、サイドカー152および154などの仮想マシンインスタンス150に関連するサイドカーの実行状態に生じるべき変更を決定する。サイドカーの実行状態の変更は、サイドカーに関連付けられた仮想マシンインスタンスの数、サイドカーによって実行される補助機能(複数可)など、複数の要因に基づいて決定される場合がある。例えば、サイドカー152は、仮想マシンインスタンス150の出力検証を提供することができる。したがって、サイドカーライフサイクル管理ユニット142は、出力検証機能が必要とされないため、仮想マシンインスタンス150が非アクティブ状態になるときにサイドカー152が非アクティブ状態になることができると決定することができる。別の例として、サイドカー154は、仮想マシンインスタンス150と別の仮想マシンインスタンスとの両方に制御プレーン機能を提供することができ、これらは、同じユーザに代わって同じタスクコードまたは異なるタスクコードを実行することができる。したがって、サイドカーライフサイクル管理ユニット142は、サイドカー154がサポートする仮想マシンインスタンスの両方がプロビジョニング解除状態になった場合にのみ、サイドカー154をプロビジョニング解除する必要があると決定することができる。
【0054】
いくつかの実施形態では、サイドカーライフサイクル管理ユニット142は、サイドカー(複数可)および仮想マシンインスタンス150がそれらの実行状態を変更する順序を決定してよく、決定された順序で実行状態を変更させてよい。例えば、サイドカー154は、仮想マシンインスタンス150のロギングまたはデバッグ機能を提供することができる。したがって、サイドカーライフサイクル管理ユニット142は、サイドカー154がロギングまたはデバッグ情報の完全な記録を維持できるように、仮想マシンインスタンス150が実行停止状態になった後でのみサイドカー154は実行停止状態になり、仮想マシンインスタンス150が実行再開する前にサイドカー154が実行を再開することを決定してよい。別の例として、サイドカー152は、入力データを仮想マシンインスタンス150に送信する前に処理および検証することができ、したがって、サイドカー152がデータを仮想マシンインスタンス150に送信し始める前に、仮想マシンインスタンス150はアクティブでなければならない。いくつかの実施形態では、サイドカーライフサイクル管理ユニット142は、仮想マシンインスタンス150の実行状態の変更のタイミングを制御することができない場合があり、したがって、仮想マシンインスタンス150の実行状態の変更のタイミングに基づいて、サイドカー実行状態の変更をスケジュールし、優先順位を付けることができる。
【0055】
図5に示す例では、サイドカーライフサイクル管理ユニット142は、サイドカー152の実行状態の変更が仮想マシンインスタンス150の実行状態の変更に先行するべきであり、サイドカー154の実行状態の変更が仮想マシンインスタンス150の変更に続くべきであると決定する。したがって、サイドカーライフサイクル管理ユニット142は、(4)で、サイドカー152にその実行状態を変更させる。様々な実施形態では、サイドカーライフサイクル管理ユニット142は、サイドカー152、ワーカーマネージャ140、またはオンデマンドコード実行システム110の別の構成要素に命令を送信することによって、実行状態の変更を引き起こし得る。(5)では、サイドカー152(または別の構成要素)は、実行状態の変更を実施する。
【0056】
その後、(6)において、仮想マシンインスタンス150は、実行状態の変更を実施する。いくつかの実施形態では、ワーカーマネージャ140は、例えば、仮想マシンインスタンス150をプロビジョニングまたはプロビジョニング解除することによって、仮想マシンインスタンス150の実行状態の変更を実施する。他の実施形態では、仮想マシンインスタンス150は、変更を実施することができる。例えば、仮想マシンインスタンス150は、タスクコードの実行を開始、終了、停止、または再開することができる。
【0057】
(7)では、サイドカーライフサイクル管理ユニット142は、(4)での相互作用と同様の方法でサイドカー154の実行状態の変更を引き起こす。その後、(8)において、サイドカー154(またはオンデマンドコード実行システム110の別の構成要素)は、サイドカー154の実行状態の変更を実施する。
【0058】
いくつかの実施形態では、(4)、(6)および(7)での1つまたは複数の相互作用は単一の相互作用に統合されてよい。例えば、サイドカーライフサイクル管理ユニット142は、サイドカー152、仮想マシンインスタンス150およびサイドカー154の実行状態を変更するためのスケジュールまたは順序付きリストをワーカーマネージャ140に提供することができ、ワーカーマネージャ140は、指定された順序で実行状態の変更を実施することができる。別の例として、サイドカーライフサイクル管理ユニット142は、サイドカー152が仮想マシンインスタンス150の前に実行を再開し、サイドカー154が、仮想マシンインスタンス150が実行を再開した後に再開する必要があることをワーカーマネージャ140に示すことができる。さらに、上記のように、いくつかの実施形態では、(2)での相互作用は、発生しようとしている変更を検出するのではなく、発生中またはすでに発生した変更を検出し得る。
【0059】
図6は、仮想マシンインスタンス604とサイドカー606、608および610との間の相互作用の例示的な例を図示している。図示の例では、(1)で、外部入力が入力検証サイドカー606に提供される。外部入力は、フロントエンド120から、またはいくつかの実施形態では別の入力ソースから受信することができる。(2)において、入力検証サイドカー606は、外部入力を検証することができる。例えば、入力検証サイドカー606は、(例えば、エスケープ文字を挿入するか、または特殊文字を削除することによって)外部入力を削除するか、または外部入力がタスクコードに求められる形式であることを検証することができる。
【0060】
その後、(3)において、入力検証サイドカー606は、仮想マシンインスタンス604に検証された入力を提供することができる。いくつかの実施形態では、仮想マシンインスタンス604は、入力検証サイドカー606から入力を受信するように構成され得る。他の実施形態では、サイドカー606は、処理された入力を仮想マシンインスタンス604に送信するように構成されてよく、仮想マシンインスタンス604に対して特別な構成は実行されない。代わりに、仮想マシンインスタンス604で実行されるタスクコードは、仮想マシンインスタンス604が受信する任意の入力を処理するだけであり、サイドカー606からの入力のみを受信する構成は、仮想マシンインスタンス604に対して透過的である。さらなる実施形態では、入力検証サイドカー606も仮想マシンインスタンス604も、他方を認識するようには構成することができず、サイドカー606から仮想マシンインスタンス604への検証されたデータの通信は、ワーカーマネージャ140によって処理され得る。
【0061】
(4)では、仮想マシンインスタンス604は、検証された入力を処理することができる。例示的には、仮想マシンインスタンス604は、検証された入力でタスクコードを実行することによって検証された入力を処理することができ、対応する出力を生成することができる。仮想マシンインスタンス604はさらに、(5)で、プロファイリングサイドカー608がタスクコードをプロファイリングすることを可能にする情報へのアクセスを提供することができる。例えば、仮想マシンインスタンス604は、ログファイル、指標、スタックトレース、メモリダンプ、またはタスクコードの実行に関する他のデータを生成することができる。次に、仮想マシンインスタンス604は、データを送信し、データにアクセスするためのAPIを提供し、プロファイリングサイドカー608がファイルシステムまたはメモリ位置を読み取ることを可能にし、別様にはプロファイリング情報へのアクセスを許可することができる。(6)では、プロファイリングサイドカーは、プロファイリング情報を取得および/または受信し、それを処理し、仮想マシンインスタンス604および/または仮想マシンインスタンス604上で実行されるタスクコードをプロファイリングすることができる。
【0062】
(7)では、仮想マシンインスタンス604は、(4)で生成された出力を出力検証サイドカー610に提供することができ、これは(8)で出力を検証することができる。例えば、出力検証サイドカー610は、出力を後処理し、出力を特定のフォーマットに変換し、出力が指定された範囲内にあることを検証し、または他の検証を実行し得る。
【0063】
(9)では、いくつかの実施形態では、出力検証サイドカー610は、フロントエンド120または別の構成要素に検証された出力を提供することができる。いくつかの実施形態では、(1)~(9)での相互作用は、入力がそれ以上利用できなくなるか、ユーザがタスクコードの実行を停止する要求を出すまで繰り返され得る。さらに、
図6に図示される相互作用の例は、異なる順序で実行され得るか、より多いまたはより少ない相互作用が実行され得る。例えば、(5)および(6)での相互作用は省略され得るか、または(4)での相互作用の前に(または同時に)実行され得る。さらなる例として、いくつかの実施形態では、入力検証サイドカー606によって生成された検証された入力は、結果データを仮想マシンインスタンス604に送信する前にさらなる検証を実行し得る別の入力検証サイドカーへの入力として提供され得る。したがって、サイドカーの他の多くの組み合わせおよび配置が本開示の範囲内にあることが当業者によって理解されるであろう。
【0064】
図7を参照すると、オンデマンドコード実行システム110上でタスクを実行するためのサイドカー構成を決定するための1つの例示的なルーチン700が説明される。ルーチン700は、例えば、
図1のサイドカー構成システム160によって実行され得る。一実施形態では、ルーチン700(例えば、ブロック702~706)は、オンデマンドコード実行システム110上でのタスクの作成と併せて実行される。別の実施形態では、ルーチン700のすべてまたは一部(例えば、ブロック708~716)は、オンデマンドコード実行システム110上でタスクを実行することに併せて実行され得る。ルーチン700のすべてまたは一部は、追加的または代替的に、普段は定期的(例えば、1日1回、週1回、月1回など)に、または実行指標またはリソース使用率指標が閾値外であるという検出に基づいて実行され得る。
【0065】
ルーチン700はブロック702で開始し、サイドカー構成システム160は(例えば、ユーザによって送信されるときに)タスクのコードを取得する。一実施形態では、タスクのコードは、タスクのソースコードを含む圧縮ファイルなどのコードオブジェクトとして表される。次に、ルーチン700は、ブロック704に進み、サイドカー構成システム160が、タスクのサイドカー構成を決定する。上記のように、サイドカー構成システム160は、いくつかの実施形態では、送信されたタスクコードに基づいてサイドカー構成を決定することができる。他の実施形態では、サイドカー構成システム160は、タスクコードの実行をプロファイルする要求またはタスクコードに提供される入力を検証する要求などのユーザ入力に基づいてサイドカー構成を決定することができる。いくつかの実施形態では、オンデマンドコード実行システム110のフロントエンド120または別の構成要素は、ユーザが所望のサイドカーを選択することを可能にするユーザインターフェースを提示することができる。
【0066】
ブロック706において、サイドカー構成システム160は、データストアサービス108など、データストアにタスクコードおよびサイドカー構成を格納することができる。いくつかの実施形態では、上記のように、サイドカー構成は、タスクコードを実行する仮想マシンインスタンスの構成を含み得る。他の実施形態では、サイドカー構成は、ワーカーマネージャ140によって利用される命令を含み得る。
【0067】
その後、ブロック708において、タスクコードを実行するための要求が受信されてよい。要求は、例えば、フロントエンド120、ワーカーマネージャ140、またはオンデマンドコード実行システム110上の別の構成要素によって受信され得る。いくつかの実施形態では、上記のように、タスクコードは、要求を受信することなく実行することができ、その場合、ブロック708を省略してもよい。
【0068】
ブロック710では、ワーカーマネージャ140はタスクコードを実行するために仮想マシンインスタンスをプロビジョニングする。いくつかの実施形態では、ワーカーマネージャ140は、サイドカー構成に従って仮想マシンインスタンスを構成する。例えば、ワーカーマネージャ140は、サイドカーからの入力を受け入れ、サイドカーに出力を提供し、仮想マシンの内部(例えば、スタックまたはメモリの内容)へのアクセスを提供するように仮想マシンインスタンスを構成するか、別様には、サイドカーで動作するように仮想マシンインスタンスを構成することができる。他の実施形態では、仮想マシンインスタンスは構成されなくてもよく、サイドカーとの相互作用は仮想マシンインスタンスに対して透過的であり得る。
【0069】
ブロック712では、ワーカーマネージャ140はサイドカー構成に応じて、1つまたは複数のサイドカーをプロビジョニングする。いくつかの実施形態では、上記のように、ワーカーマネージャ140は、サイドカーライブラリ130などのライブラリからサイドカー画像またはエージェントを取得し、これらの画像またはエージェントを使用してサイドカーをプロビジョニングまたは構成する。他の実施形態では、サイドカー構成は、サイドカーをユーザ仕様にプロビジョニングするための命令を含んでよく、ワーカーマネージャ140は、これらの命令を実行して、サイドカーをそれに応じてプロビジョニングすることができる。
【0070】
ブロック714では、ワーカーマネージャ140は仮想マシンインスタンスおよびサイドカーインスタンス(複数可)を実行する。いくつかの実施形態では、ワーカーマネージャ140は、
図8を参照して以下に説明するルーチン800などのルーチンを実行することによって、仮想マシンインスタンスおよびサイドカーインスタンス(複数可)のライフサイクルの管理に進む。他の実施形態では、ルーチン700は、プロビジョニングされた仮想マシンインスタンスおよびサイドカー(複数可)の実行で終了する。
【0071】
図8を参照すると、サイドカーのライフサイクルを管理するための例示的なルーチン800が説明される。ルーチン800は、例えば、
図1のサイドカーライフサイクル管理ユニット142によって実行され得る。ルーチン800は、ブロック802で開始し、ここで、サイドカーライフサイクル管理ユニット142(または、いくつかの実施形態では、ワーカーマネージャ140またはオンデマンドコード実行システム110の別の構成要素)が、仮想マシンインスタンスの実行を監視する。決定ブロック804で、仮想マシンインスタンスの実行状態に保留中の変更があるかどうかに関して決定が行われる。いくつかの実施形態では、上記のように、決定ブロック804での決定は、仮想マシンインスタンスの実行状態への変更がすでに発生したか、または進行中であるかどうかも含み得る。仮想マシンインスタンスの実行状態の変更が検出されない場合、ルーチン800はブロック802に分岐し、監視を継続する。
【0072】
決定ブロック804での決定が、仮想マシンインスタンスが実行状態を変更するというものである場合、ルーチン800はブロック806に分岐し、ここでは未処理のサイドカーが選択され得る。ブロック808では、サイドカーライフサイクル管理ユニット142は、選択されたサイドカーがその実行状態を変更すべきかどうか、変更すべきである場合、仮想マシンインスタンスに対してその実行状態をいつ変更すべきかを決定することができる。例えば、サイドカーライフサイクル管理ユニット142は、サイドカーが仮想マシンインスタンスの前、同時または後にその実行状態を変更すべきであると決定することができる。いくつかの実施形態では、サイドカーライフサイクル管理ユニット142は、他のサイドカーと比較して、選択されたサイドカーの実行状態への変更のタイミングを決定することができる。例えば、サイドカーライフサイクル管理ユニット142は、サイドカーおよび仮想マシンインスタンスの状態変更の順序付きリストを生成し、選択されたサイドカーを順序付きリストに配置することができる。他の実施形態では、サイドカーライフサイクル管理ユニット142は、選択されたサイドカーがその実行状態への変更を必要としないこと、または選択されたサイドカーが仮想マシンインスタンスとは異なる実行状態に変更されることを決定することができる。例えば、サイドカーライフサイクル管理ユニット142は、仮想マシンインスタンスがタスクコードの実行を停止した後にサイドカーをプロビジョニング解除する必要があること、または仮想マシンインスタンスがタスクコードの実行を再開する前に新しいサイドカーをプロビジョニングする必要があることを決定することができる。一実施形態では、サイドカーライフサイクル管理ユニット142は、仮想マシンインスタンス内のタスクコードの実行ごとに新しいサイドカー仮想マシンが作成されることを保証することができる。例示的には、サイドカー仮想マシンがセキュリティ機能を提供する場合、コードの実行ごとに新しいサイドカーを再作成することで、例えば、過去のコードの実行中にサイドカー仮想マシンに悪意のデータが渡されることによって、サイドカーの機能が損なわれることがないことを保証し得る。
【0073】
決定ブロック810で、サイドカーライフサイクル管理ユニット142は、サイドカーのすべてがルーチン800により処理されたかどうかを決定することができる。そうでない場合、ルーチン800はブロック806に分岐し、ここで残りの未処理のサイドカーの1つが選択されてよく、その後、ルーチン800は、すべてのサイドカーが処理されるまでブロック806~810を繰り返す。次に、ルーチン800は、ブロック812に分岐し、ここでサイドカーライフサイクル管理ユニット142は、仮想マシンインスタンスおよびサイドカーに、決定された順序で実行状態を変更させる。いくつかの実施形態では、決定された順序は、仮想マシンインスタンスの変更に関連する場合があり、サイドカー間の特定の順序を指定しない場合がある。例えば、サイドカーライフサイクル管理ユニット142は、サイドカーAとBとの両方が、仮想マシンインスタンスが変更する前にそれらの実行状態を変更するべきであるが、サイドカーAの実行状態の変更がサイドカーBの前または後に行われても問題ないと決定し得る。他の実施形態では、サイドカーライフサイクル管理ユニット142は、あるサイドカーが別のサイドカーが変更する前にその実行状態を変更すべきであることを決定し、それに応じて実行状態を変更することができる。
【0074】
上記のルーチンのブロックは、本開示の実施形態で変更し得る。例えば、いずれかのルーチンのいくつかの実装形態では、サイドカー構成システム160は、追加のサイドカーの生成および格納などの追加の機能を実装するように構成され得る。したがって、様々な実施形態によれば、ルーチンは、追加のブロックを含み得るか、またはルーチンのブロックが再配置され得る。
【0075】
上述の方法およびプロセスのすべては、1つまたは複数のコンピュータまたはプロセッサによって実行されるソフトウェアコードモジュールに実装され得るか、またはこれらを介して完全に自動化されてよい。コードモジュールは、任意の種類の非一時的なコンピュータ可読媒体または他のコンピュータ記憶デバイス内に格納され得る。本方法の一部またはすべては、代わりに専用コンピュータハードウェアで実装され得る。
【0076】
特に明記しない限り、とりわけ、「できる(can)」、「できるであろう(could)」、「可能性がある(might)」、または「してよい(may)」などの条件的言語は、他の実施形態が特定の特徴、要素および/またはステップを含まない一方で、特定の実施形態が特定の特徴、要素および/またはステップを含むことを提示するために一般的に使用される文脈内で別様に理解される。したがって、そのような条件的言語は、概して、特徴、要素および/またはステップが、1つまたは複数の実施形態に任意の方法で要求されるか、または1つまたは複数の実施形態が、ユーザ入力もしくはプロンプトを用いて、もしくは用いずに、これらの特徴、要素および/またはステップが含まれるか、もしくは任意の特定の実施形態で行われるべきであるかを決定するための論理を必ず含むことを含意することは意図していない。
【0077】
特に明記しない限り、句「X、YまたはZのうちの少なくとも1つ」などの選言的言語は、項目、用語などが、X、YもしくはZのいずれか、またはそれらの任意の組み合わせ(例えば、X、Yおよび/またはZ)であり得ることを提示するために一般に使用される文脈の中で別様に理解される。したがって、そのような選言的言語は、ある実施形態がXの少なくとも1つ、Yの少なくとも1つ、またはZの少なくとも1つがそれぞれ存在することを必要とすることを含意することを一般的に意図しておらず、意味するべきではない。
【0078】
特に明記しない限り、「a」または「an」などの冠詞は、概して、1つまたは複数の記載された項目を含むと解釈すべきである。したがって、「~するように構成されたデバイス」などの語句は、1つまたは複数の列挙されたデバイスを含むことを意図している。そのような1つまたは複数の列挙されたデバイスは、記載された列挙を実行するように集合的に構成されることもできる。例えば、「列挙A、BおよびCを実行するように構成されたプロセッサ」は、列挙BおよびCを実行するように構成された第2のプロセッサと連動して機能し、列挙Aを実行するように構成された第1のプロセッサを含む場合がある。
【0079】
本明細書に説明する、および/または添付の図面に図示するフロー図のいずれのルーチンの記述、要素、またはブロックも、ルーチンにおける特定の論理的機能または要素を実装するための1つまたは複数の実行可能な命令を含む、モジュール、セグメント、またはコードの部分を潜在的に表すものとして理解されるべきである。代替の実装は、本明細書に説明される実施形態の範囲内に含まれ、その中で要素または機能は、当業者によって理解されるであろうように、関係する機能性に応じて、実質的に同時または逆の順序を含む、示されるものまたは説明されるものとは異なる順序で削除または実行され得る。
【0080】
多くの変形形態および変更形態が上記の実施形態に対して行われ得、それらの要素が他の許容される実施例中にあるものとして理解されることが強調されるべきである。すべてのこのような変更形態および変形形態は、本明細書において、本開示の範囲内に含まれ、以下の特許請求の範囲によって保護されることが意図される。
【0081】
本開示の実施形態の例は、以下の条項を考慮して説明することができる。
【0082】
1.構成情報を格納する物理データストアと、実行可能命令で構成されるコンピューティングデバイスとを含み、前記コンピューティングデバイスは、オンデマンドコード実行システム上でユーザ送信コードを実行する要求を受信し、前記要求に少なくとも部分的に基づいて、複数の仮想マシンインスタンスを決定し、前記複数は、前記ユーザ送信コードを実行するための第1の仮想マシンインスタンスと、補助機能を実行するための第2の仮想マシンインスタンスとを含み、前記構成に従って、前記第1の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、前記構成に従って、前記第2の仮想マシンインスタンスに前記補助機能を実行させ、前記第1の仮想マシンインスタンス上で前記ユーザ送信コードの実行を監視し、前記第1の仮想マシンインスタンスの実行状態の保留中の変更を検出し、前記第1の仮想マシンインスタンスの実行状態の前記保留中の変更に少なくとも部分的に基づいて、前記第2の仮想マシンインスタンスの実行状態の変更を決定し、前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスの実行状態の変更の順序を決定し、前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスの前記実行状態を前記決定された順序で変更する、システム。
【0083】
2.前記第1の仮想マシンインスタンスの実行状態の前記保留中の変更は、前記第1の仮想マシンインスタンスのプロビジョニング、前記ユーザ送信コードの実行の開始、前記第1の仮想マシンインスタンスの停止、前記ユーザ送信コードの実行の停止、前記第1の仮想マシンインスタンスの再開、前記ユーザ送信コードの実行の再開、前記ユーザ送信コードの実行の終了、または前記第1の仮想マシンインスタンスのプロビジョニング解除のうちの1つまたは複数を含む、条項1に記載のシステム。
【0084】
3.前記コンピューティングデバイスは前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスをプロビジョニングするようにさらに構成される、条項1に記載のシステム。
【0085】
4.前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスの前記実行状態を変更する前記順序は、前記第2の仮想マシンインスタンスによって実行される前記補助機能に少なくとも部分的に基づいて決定される、条項1に記載のシステム。
【0086】
5.前記補助機能が、カプセル化、ロギング、トレース、デバッグ、スキャン、プロファイリング、入力の検証または出力の検証のうちの1つまたは複数を含む、条項1に記載のシステム。
【0087】
6.オンデマンドコード実行システム上でユーザ送信コードを実行する要求を受信し、前記ユーザ送信コードに関連付けられた構成情報、少なくとも前記ユーザ送信コードを実行するように構成された第1の仮想マシンインスタンス、および補助機能を実行するように構成された第2の仮想マシンインスタンスを指定する前記構成情報を取得し、前記構成情報に従って、前記第1の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、前記構成情報に従って、前記第2の仮想マシンインスタンスに前記補助機能を実行させ、前記第1の仮想マシンインスタンス上での前記ユーザ送信コードの実行に少なくとも部分的に基づいて、前記第1の仮想マシンインスタンスの実行状態の保留中の変更を識別し、前記第1の仮想マシンインスタンスの実行状態の前記保留中の変更に少なくとも部分的に基づいて、前記第2の仮想マシンインスタンスの実行状態の変更を決定し、少なくとも前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスの実行状態の変更の順序を決定し、前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスの前記実行状態を前記決定された順序で変更することを含む、コンピュータ実装方法。
【0088】
7.前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスのプロビジョニング順序を決定することをさらに含み、前記プロビジョニング順序に従って、前記第1の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、前記第2の仮想マシンインスタンスに前記補助機能を実行させる、条項6に記載のコンピュータ実装方法。
【0089】
8.前記実行状態を変更する前記順序は、前記第2の仮想マシンインスタンスの実行状態の前記変更が、前記第1の仮想マシンインスタンスの実行状態の前記保留中の変更に先行しなければならないことを指定する、条項6に記載のコンピュータ実装方法。
【0090】
9.前記第1の仮想マシンインスタンスの実行状態の前記保留中の変更を発生させることをさらに含む、条項6に記載のコンピュータ実装方法。
【0091】
10.前記構成情報は、第2の補助機能を実行するように構成された少なくとも第3の仮想マシンインスタンスをさらに指定し、実行状態の変更の前記決定された順序は、前記第3の仮想マシンインスタンスの実行状態の変更をさらに含む、条項6に記載のコンピュータ実装方法。
【0092】
11.前記第1の仮想マシンインスタンス、前記第2の仮想マシンインスタンスおよび前記第3の仮想マシンインスタンスの前記実行状態の変更を前記決定された順序で発生させることをさらに含む、条項10に記載のコンピュータ実装方法。
【0093】
12.前記第2の仮想マシンインスタンスと通信するように前記第1の仮想マシンインスタンスを構成することをさらに含む、条項6に記載のコンピュータ実装方法。
【0094】
13.前記第2の仮想マシンインスタンスと通信するように前記第1の仮想マシンインスタンスを構成することは、リダイレクト入力、リダイレクト出力またはパフォーマンス情報へのアクセス許可のうちの1つまたは複数を含む、条項12に記載のコンピュータ実装方法。
【0095】
14.前記第2の仮想マシンインスタンスは、指定されたユーザに関連付けられた複数の仮想マシンインスタンスに対して前記補助機能を実行するように構成される、条項6に記載のコンピュータ実装方法。
【0096】
15.前記複数の仮想マシンインスタンスのそれぞれは、異なるユーザ送信コードに関連付けられている、条項14に記載のコンピュータ実装方法。
【0097】
16.オンデマンドコード実行システム上で実行されると、前記オンデマンドコード実行システムに、オンデマンドコード実行システム上で実行可能なユーザ送信コードに関連する構成情報を取得することであって、前記構成情報は、第1の仮想マシンインスタンスに関連する第1の構成および第2の仮想マシンインスタンスに関連する第2の構成を含み、前記第1の構成に従って、前記第1の仮想マシンインスタンスに前記ユーザ送信コードを実行させ、前記第2の構成に従って、前記第2の仮想マシンインスタンスに補助機能を実行させ、前記第1の仮想マシンインスタンスの実行状態の保留中の変更に少なくとも部分的に基づいて、前記第2の仮想マシンインスタンスの実行状態の変更を決定し、前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスの実行状態を前記構成情報に少なくとも部分的に基づいて、決定された順序で変更させるコンピュータ実行可能命令を含む、非一時的なコンピュータ可読媒体。
【0098】
17.前記命令はさらに、前記オンデマンドコード実行システムに、前記ユーザ送信コードを実行するための要求を受信させる、条項16に記載の非一時的なコンピュータ可読媒体。
【0099】
18.前記命令はさらに、前記オンデマンドコード実行システムに実行状態の前記保留中の変更を識別させる、条項16に記載の非一時的なコンピュータ可読媒体。
【0100】
19.前記命令はさらに、前記オンデマンドコード実行システムに、前記第2の仮想マシンインスタンスをインスタンス化させる、条項16に記載の非一時的なコンピュータ可読媒体。
【0101】
20.前記命令はさらに、前記オンデマンドコード実行システムに、複数の事前に構成された仮想マシンインスタンスから前記第2の仮想マシンインスタンスを選択させる、条項16に記載の非一時的なコンピュータ可読媒体。
【0102】
21.構成情報を格納する物理データストアと、実行可能命令により構成されるコンピューティングデバイスとを含むシステムであって、前記実行可能命令は、オンデマンドコード実行システム上でタスクを実行する要求を受信するものであって、前記要求は、ユーザ送信コードを含み、前記ユーザ送信コードによって処理されることになる未処理データを識別し、前記要求に少なくとも部分的に基づき、第1の仮想マシンインスタンスが前記ユーザ送信コードを実行するために必要になるであろうことと、第2の仮想マシンインスタンスが前記未処理データを事前に処理するために必要になるであろうことを決定し、前記第1の仮想マシンをプロビジョニングし、前記第2の仮想マシンから処理済みデータを受信し、前記処理済みデータで前記ユーザ送信コードを実行するように前記第1の仮想マシンインスタンスを構成し、前記第2の仮想マシンインスタンスをプロビジョニングし、前記処理済みデータを形成するように前記未処理データを処理し、前記処理済みデータを前記第1の仮想マシンインスタンスに送信するように前記第2の仮想マシンインスタンスを構成し、前記ユーザ送信コードが前記第1の仮想マシンインスタンス上での実行を完了したことを決定し、前記ユーザ送信コードが実行完了したという決定に応答して、前記第1の仮想マシンインスタンスおよび前記第2の仮想マシンインスタンスをプロビジョニング解除する、前記システム。
【0103】
22.前記第2の仮想マシンインスタンスが、前記未処理データの検証、削除、前処理またはスキャンのうちの少なくとも1つを実行して、前記処理済みデータを形成する、条項21に記載のシステム。
【0104】
23.前記コンピューティングデバイスは、前記第1の仮想マシンインスタンスに、前記処理済みデータを用いて前記ユーザ送信コードを実行した結果を第3の仮想マシンインスタンスに送信させるようにさらに構成される、条項21に記載のシステム。
【0105】
24.前記コンピューティングデバイスは、前記第3の仮想マシンインスタンスに、前記結果の検証、削除、後処理またはスキャンのうちの少なくとも1つを実行させるようにさらに構成される、条項23に記載のシステム。
【0106】
25.前記コンピューティングデバイスは、前記ユーザ送信コードが実行を完了したという前記決定に応答して、前記第3の仮想マシンインスタンスをプロビジョニング解除するようにさらに構成される、条項23に記載のシステム。
【0107】
26.オンデマンドコード実行システム上でユーザ送信コードを実行するための要求を受信することと、前記要求に少なくとも部分的に基づいて、複数の仮想マシンインスタンスを識別する情報を取得することと、前記複数の仮想マシンインスタンスの第1の仮想マシンインスタンスをプロビジョニングすることと、前記ユーザ送信コードを実行させ、前記ユーザ送信コードの実行結果を前記第2の仮想マシンインスタンスに送信させるように前記第1の仮想マシンインスタンスを構成することと、前記複数の仮想マシンインスタンスの第2の仮想マシンインスタンスをプロビジョニングすることと、前記第1の仮想マシンインスタンスからの前記結果を処理して処理された結果を形成するように前記第2の仮想マシンインスタンスを構成することと、前記第1の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという決定に応答して、前記第2の仮想マシンインスタンスをプロビジョニング解除することとを含む、コンピュータ実装方法。
【0108】
27.前記第2の仮想マシンインスタンスのプロビジョニングを解除することは、前記第2の仮想マシンインスタンスが前記結果の処理を終了したという決定にさらに応答する、条項26に記載のコンピュータ実装方法。
【0109】
28.前記第1の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという前記決定に応答して、前記第1の仮想マシンインスタンスのプロビジョニングを解除することをさらに含む、条項26に記載のコンピュータ実装方法。
【0110】
29.前記第1の仮想マシンインスタンスに、前記複数の仮想マシンインスタンスの第3の仮想マシンインスタンスからの処理済みデータを受信させることをさらに含み、前記ユーザ送信コードは、前記処理済みデータで実行される、条項26に記載のコンピュータ実装方法。
【0111】
30.前記第3の仮想マシンインスタンスをプロビジョニングすることをさらに含む、条項29に記載のコンピュータ実装方法。
【0112】
31.前記第3の仮想マシンインスタンスが既存の仮想マシンインスタンスであり、前記方法は、前記処理済みデータを前記第1の仮想マシンインスタンスに送信するように前記第3の仮想マシンインスタンスを構成することをさらに含む、条項29に記載のコンピュータ実装方法。
【0113】
32.前記第1の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという前記決定に応答して、前記第3の仮想マシンインスタンスの構成を解除することをさらに含む、条項31に記載のコンピュータ実装方法。
【0114】
33.前記第1の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという決定、または前記第3の仮想マシンインスタンスが前記処理済みデータのすべてを送信したという前記決定のうちの1つまたは複数に応答して、前記第3の仮想マシンインスタンスのプロビジョニングを解除することをさらに含む、条項29に記載のコンピュータ実装方法。
【0115】
34.前記複数の仮想マシンを識別する前記情報を、前記要求に少なくとも部分的に基づいて決定することをさらに含む、条項26に記載のコンピュータ実装方法。
【0116】
35.オンデマンドコード実行システム上で実行されると、前記オンデマンドコード実行システムに、ユーザ送信コードを実行する要求を受信させ、前記要求に少なくとも部分的に基づいて、複数の仮想マシンインスタンスを識別する構成情報を取得させ、前記構成情報に従って、前記ユーザ送信コードを実行するように前記複数の仮想マシンインスタンスの第1の仮想マシンインスタンスを構成させ、前記構成情報に従って、前記第1の仮想マシンインスタンスとの間の入力の送信または出力の受信のうちの少なくとも1つを実行するように前記複数の仮想マシンインスタンスの第2の仮想マシンインスタンスを構成させ、前記第1の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという決定に応答して、前記第2の仮想マシンインスタンスのプロビジョニング解除させるコンピュータ実行可能命令を含む、非一時的なコンピュータ可読媒体。
【0117】
36.前記命令はさらに、前記オンデマンドコード実行システムに、前記第1の仮想マシンインスタンスをプロビジョニングさせる、条項35に記載の非一時的なコンピュータ可読媒体。
【0118】
37.前記命令はさらに、前記オンデマンドコード実行システムに、前記第1の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したことを決定させる、条項35に記載の非一時的なコンピュータ可読媒体。
【0119】
38.前記命令は、前記オンデマンドコード実行システムに、前記第1の仮想マシンインスタンスとの間で入力を送信し、出力を受信するように前記第2の仮想マシンインスタンスを構成させる、条項35に記載の非一時的なコンピュータ可読媒体。
【0120】
39.前記第1の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという前記決定に応答して、前記第2の仮想マシンインスタンスがデフォルト構成にリセットされる、条項35に記載の非一時的なコンピュータ可読媒体。
【0121】
40.前記第1の仮想マシンインスタンスが前記ユーザ送信コードの実行を終了したという前記決定に応答して、前記第1の仮想マシンインスタンスがデフォルト構成にリセットされる、条項35に記載の非一時的なコンピュータ可読媒体。