関数ワークロード

関数とは、 HTTP のリクエストによって呼び出されるたびにタスクを実行する、ステートレスなコードスニペットのことです。 IBM の Code Engine 関数を利用すれば、ビジネスロジックをスケーラブルかつサーバーレスな方法で実行できます。 IBM Code Engine これらの機能は、低遅延および迅速なスケールアウトのシナリオに対応するための、最適化された実行環境を提供します。 関数コードは、特定のバージョンの Node.js または Python を含むマネージドランタイムで記述することができます。

コード・バンドルは、関数コードを表すファイルの集合です。 このコード・バンドルは、ランタイム・コンテナーに注入されます。 コード・バンドルは Code Engine によって作成され、コンテナー・レジストリーに保管されるか、関数とともにインラインで保管されます。 コード・バンドルは、Open Container Initiative (OCI) 標準コンテナー・イメージではありません。

関数インスタンスのライフサイクル

関数が呼び出される (開始される) と、対応する関数インスタンスが、構成されたランタイム・コンテナーおよびリソース・パラメーターを使用して初期化されます。 最初の初期設定のプロセスは、 コールド・スタートと呼ばれます。

コールド・スタートの待ち時間を削減するために、 Code Engine は、特定の CPU とメモリーの構成で特定のランタイムを事前にウォーミングすることによって、呼び出しを最適化します。 関数用のプリウォームドコンビネーションには、 Node.js と Python のランタイムと、ファンクション用のデフォルトのCPUとメモリの組み合わせ( 0.25 vCPU x メモリ1GB)がある。 さらに、システムは、既に初期化されている関数インスタンスの再使用を改善するように設計されています。 したがって、関数インスタンスは、呼び出しの完了後に存続し、同じインスタンスを再利用し、最後の呼び出しが完了したときにインスタンスの状態を再利用することにより、後続の呼び出しを可能にします。 関数インスタンスの再利用は保証されません。

機能を操作する際の主な特徴は何ですか?

IBM Code Engine Functions の操作について詳しくは、以下のトピックを参照してください。

分離

Code Engine は、リージョン別のマルチテナント・サービスであり、複数のテナントが同じネットワークとコンピュート・インフラストラクチャーを共有します。 特に、ネットワークとコンピュート・インフラストラクチャーは共有リソースであり、一部の管理コンポーネントはすべてのテナントに共通です。 ただし、テナントとそのワークロードは、 Code Engine プロジェクトを使用して相互に分離されます。 Code Engine は、プロジェクト間の通信を防止し、アプリケーション、バッチ・ジョブ、および機能を組み込むことができるマルチテナント環境内でアプリケーションを分離します。 さらに、リソース・レベルで実行されるアクセス制御もあります。これにより、許可されたユーザーのみが、関数やその他の Code Engine ワークロードなどのプロジェクト・リソースに対して特定の操作を実行できます。

ワークロードの分離について詳しくは、 Code Engine ワークロードの分離 を参照してください。

ロギング

関数コードは、IBM Cloud Logsインスタンスにキャプチャされ転送される'stdout と'stderr ログを書くことができます。IBM Cloud Logsは、ログのインデックスを作成するために設定することができるプラットフォームログインスタンスです。 詳しくは、ログの表示を参照してください。

ランタイム

Code Engine には、関数に使用できる 管理対象ランタイム が含まれています。

管理対象ランタイムには、 Node.js と Python のバージョン、および特定の CPU とメモリーの組み合わせが含まれます。 これらのランタイムは、高速始動用に最適化されています。 これらのランタイムは事前にウォーム状態になっているため、コンテナー・イメージをプルしてコンテナーとプロセスを開始するオーバーヘッドを回避できます。 既に実行中のコンテナーにコードが注入されます。

詳しくは、 ランタイム を参照してください。

関数の実行

コードがローカルファイル内のソースコードとして存在する場合でも、 Git リポジトリ内にある場合でも、あるいはパブリックまたはプライベートのレジストリにあるコンテナイメージである場合でも、 Code Engine を使えば、コードを関数として実行するための効率的な方法が提供されます。

以下の方法で、 Code Engine で関数を作成して呼び出すことができます。

  • 既存のコード・バンドルから実行します。

  • 既存のソース・コードから実行します。 Git リポジトリーまたはローカル・ワークステーションにあるソース・コードから開始する場合は、ソースの場所を指すことができ、 Code Engine によってイメージの作成が行われます。

関数の作成および呼び出しについて詳しくは、 Code Engineでの関数の処理 を参照してください。

セキュリティー

Code Engine お客様の関数に対して、即座にDDoS対策を提供します。 Code Engine のDDoS対策は、 Cloud Internet Services (CIS) によって提供されており、追加費用は一切かかりません。 DDoS この保護機能は、OSIモデル第3層および第4層( TCP/IP )のプロトコル攻撃を防御しますが、第7層( HTTP )の攻撃は防御しません。 「 DDoS 」の保護機能 については、こちらをご覧ください。

Code Engine また、そのネットワーク層を利用するためのサービスメッシュも提供しており、これにより関数間のトランスポート層セキュリティ( TLS )通信が可能となり、 サービス間およびユーザーとサービス間の通信のセキュリティが確保されます。

セキュリティーについて詳しくは、 Code Engine とセキュリティー を参照してください。

関数インスタンスの呼び出しの並行性とスケーリング

複数の関数が同時に呼び出されると、 Code Engine は、呼び出しごとに新しい関数インスタンスを初期化しますが、同時に再利用を最大化しようとします。 一時点で関数インスタンスによって処理される関数呼び出しは 1 つだけです。 Node.jsの場合、複数の呼び出しを単一の関数インスタンスで処理できるように、 concurrency > 0 を使用して関数を構成できます。

関数のソース・コードのパッケージ化

関数は、3 つの異なる方法でパッケージ化できます。

  • 単一ファイルとして
  • 複数のファイルとして (フォルダー構造と従属モジュールを使用)
  • コンテナー・イメージとして

関数の使用を開始するにはどうすればよいですか?

hello-world サンプル・イメージを使用して単純な Code Engine アプリケーションをデプロイするには、 Running IBM Code Engine Functions チュートリアルを参照してください。

関数の操作について詳しくは、 Code Engine を参照してください。