このトピックでは、Function Compute の関数作成プロセスに関連する主要な用語について説明します。関数の作成方法の詳細については、「Alibaba Cloud サービスからのイベントを処理するためのイベント関数の使用」をご参照ください。
FC 関数の作成プロセス
Function Compute (FC) 関数は、Function Compute におけるリソーススケジューリングと実行の基本単位です。FC 関数は、機能コードと関数の構成で構成されています。次の図は、関数作成プロセスに関連する概念を示しています。
関数の作成
関数を作成する際、関数タイプと対応するランタイム環境を選択できます。その後、関数コードを Function Compute にアップロードします。必要に応じて、後から他のパラメーターを設定できます。
技術選定ガイド
イベント関数
OSS トリガー、Kafka トリガー、SLS トリガーなどのイベントトリガーを選択できます。Function Compute が定義したインターフェイスに基づいてプログラムを作成できます。詳細については、「イベントトリガー関数の作成」をご参照ください。
Web 関数
Flask、ThinkPHP、Express、SpringBoot などの一般的な Web フレームワークを選択できます。フレームワークが定義したインターフェイスに基づいてプログラムを作成できます。詳細については、「Web 関数の作成」をご参照ください。
タスク関数
タスクモードを選択して非同期リクエストを処理できます。各タスクのステータスが追跡され、手動でタスクを開始または停止できます。このモードは、定期タスク、オーディオ・ビデオ処理、データ処理などのオフラインシナリオに推奨されます。詳細については、「タスク関数の作成」をご参照ください。
GPU 関数
Stable Diffusion WebUI、ComfyUI、RAG、TensorRT などの一般的な AI プロジェクトを選択できます。これらのプロジェクトをイメージとして Function Compute にデプロイすることを推奨します。詳細については、「GPU アクセラレーション関数の作成」をご参照ください。
ランタイム環境
ビルトインランタイム
事前定義済みランタイムは、Function Compute プラットフォームによって事前定義されたランタイム環境です。Function Compute が定義したインターフェイスに基づいてリクエストハンドラーを作成する必要があります。事前定義済みランタイムは、インスタンスごとの複数の同時リクエストをサポートしませんが、最速のコールドスタートを提供します。このランタイムは、OSS、Kafka、または SLS トリガーを使用するイベントトリガーのシナリオに適しています。詳細については、「Function Compute のランタイム」をご参照ください。
イベント (
event)イベントデータは、JSON ドキュメントとして関数に渡されます。ランタイムはイベントをオブジェクトに変換し、関数ハンドラーの
eventパラメーターに渡します。イベントが別の Alibaba Cloud サービスによって生成された場合、イベント形式はそのサービスに依存します。詳細については、「トリガーイベントの形式」をご参照ください。コンテキスト (
context)Function Compute が関数を実行すると、コンテキストオブジェクトが関数ハンドラーの
contextパラメーターに渡されます。このオブジェクトには、呼び出し、サービス、関数、および実行環境に関する情報が含まれます。詳細については、「コンテキスト」をご参照ください。
カスタムランタイム
カスタムランタイムは、Flask、ThinkPHP、Express、SpringBoot などの主要な Web フレームワークをサポートします。フレームワークが定義したインターフェイスに基づいてプログラムを作成するだけで済みます。カスタムランタイムの場合、コードファイルの ZIP パッケージは HTTP サーバープログラムです。関数設定で [起動コマンド] と [起動引数] を設定するだけで HTTP サーバーを起動できます。詳細については、「仕組み」をご参照ください。
カスタムイメージ
Function Compute はカスタムイメージ機能を提供しており、コンテナイメージを関数の配信アーティファクトとして使用できます。カスタムイメージを ACR にアップロードして使用するか、サンプルイメージを使用できます。詳細については、「カスタムイメージを使用する関数の作成」をご参照ください。
Function Compute では、GPU 関数の作成はカスタムイメージのみがサポートしています。
プロビジョニング済みインスタンス
プロビジョニング済みリソースプールを購入した後、関数を作成する際に GPU 関数にバインドできます。その後、「プロビジョニング済みインスタンスの割り当て」を行い、リクエストを処理できます。
プロビジョニング済みリソースプールは GPU 関数でのみ利用可能で、月額サブスクリプションの課金方法を採用しています。この方法により、希少な GPU リソースを事前に確保し、安定したビジネス運用を保証し、リソース不足による中断を防ぐことができます。
弾性インスタンス
弾性インスタンスは、Function Compute が関数の呼び出し数に基づいて自動的にスケーリングするインスタンスです。Function Compute は、呼び出し数が増加するとインスタンスを作成し、リクエスト数が減少するとインスタンスを破棄します。このプロセス中、リクエストは自動的にインスタンスの作成をトリガーします。最初の呼び出しは、インスタンスがコールドスタートするのを待つ必要があります。
弾性インスタンス (ライトハイバネーション (旧アイドル))
最小インスタンス数を 1 以上に設定する場合、ライトハイバネーション (旧アイドル) モードを有効にすることを推奨します。このモードでは、インスタンスがアイドル状態でリクエストがない場合、システムは自動的にそのリソースの一部をフリーズします。課金されるのは、最小限のキープアライブ料金のみです。リクエストが到着すると、インスタンスはアクティブになります。ライトハイバネーション中にフリーズされたリソースは迅速に復元されます。ホットスタートプロセスは、通常、モデルサイズに応じて 2 秒以上かかります。
以下のシナリオの弾性インスタンスは、自動的に弾性インスタンス (ライトハイバネーション (旧アイドル)) の課金状態になります:
最小インスタンス数を 1 以上に設定し、ライトハイバネーション (旧称: アイドル) スイッチを有効にすると、エラスティックインスタンスはアイドル状態になります。
セッション維持のシナリオで、弾性インスタンスがキープアライブ期間にある場合。
バックグラウンドタスクのシナリオで、弾性インスタンスがバックグラウンドタスクを処理していない場合。
弾性インスタンス (アクティブ)
以下のシナリオの弾性インスタンスは、自動的に弾性インスタンス (アクティブ) の課金状態になります:
最小インスタンス数が設定されていない (デフォルトで 0 にスケールダウン) 場合に、リクエストによって弾性インスタンスが自動的に起動された場合。
最小インスタンス数を 1 以上に設定した後、ライトハイバネーション (旧アイドル) スイッチが有効かどうかにかかわらず、弾性インスタンスがリクエストを処理するためにアクティブになった場合。
セッション維持のシナリオで、弾性インスタンスがリクエストを処理している場合。
バックグラウンドタスクのシナリオで、弾性インスタンスがバックグラウンドタスクを処理している場合。
最小インスタンス数
最小インスタンス数を 1 以上に設定すると、弾性インスタンスが処理する最初のリクエストのコールドスタート問題を解決するのに役立ちます。また、弾性リソースを確保して配信を保証することもできます。WebSocket や gRPC など、セッション維持に強く依存するサービスの場合、最小インスタンス数を 1 以上に設定すると、セッション維持スケジューリングと持続的接続が可能になり、リアルタイムインタラクションの安定性が確保されます。
また、スケジュールベースおよびメトリックベースのスケーリングを設定して、最小インスタンス数を動的に調整することもできます。システムは、指定された時間帯やメトリックが特定のしきい値に達したときに最小インスタンス数を増やしてピーク負荷を処理し、負荷が指定された値に低下したときに最小インスタンス数を減らしてリソース使用率を最大化できます。詳細については、「インスタンスのスケーリング制限と弾性ポリシー」をご参照ください。
関数の設定
関数を作成した後、必要に応じて以下の設定項目を調整する必要がある場合があります。
基本設定
インスタンスタイプ
Function Compute は、さまざまな関数インスタンスタイプを提供しています。必要に応じて異なる仕様を選択できます。詳細については、「インスタンスタイプ」をご参照ください。
一時ディスク
各関数インスタンスは、インスタンスのルートディレクトリにマウントされる一時ストレージディスクを提供します。このディスク上のデータは、インスタンスが回収されるときに自動的にクリアされます。ファイルシステムの永続化には、「NAS ファイルシステムの設定」や「OSS ファイルシステムの設定」などのストレージソリューションを使用することを推奨します。これにより、システムの再起動や障害後もデータが保持され、簡単に管理およびスケーリングできます。
説明フルカードの Function Compute GPU インスタンスタイプ (Tesla シリーズは 16 GB、Ada シリーズは 48 GB) では、30 GB または 60 GB のディスクサイズを設定できます。他のインスタンスタイプは、512 MB または 10 GB のディスクサイズのみをサポートします。512 MB のディスクサイズは無料です。
トリガー
一部の Alibaba Cloud サービスは、トリガーを使用して FC 関数を直接呼び出すことができます。これらのサービスは、特定のイベントが発生すると、イベントを Function Compute にプッシュし、関数を即座に呼び出します。詳細については、「トリガーの概要」をご参照ください。
1 つの関数に複数のトリガーを設定できます。各トリガーは、関数を呼び出す独立したクライアントとして機能できます。Function Compute が関数に渡す各イベントには、1 つのトリガーからのデータのみが含まれます。Function Compute は、イベントドキュメントをオブジェクトに変換し、そのオブジェクトを関数ハンドラーに渡します。
ランタイム
Function Compute は、ランタイムを使用して複数の言語をサポートします。ランタイムは、実行環境で実行される言語固有の環境を提供します。ランタイムは、呼び出しイベント、コンテキスト情報、および応答を Function Compute と関数の間で中継します。詳細については、「ランタイムの概要」をご参照ください。
環境変数
環境変数は、関数設定の一部として文字列のキーと値のペアとして保存されます。異なる関数は独立した環境変数を持っています。環境変数を使用して、コードを更新することなく関数の動作を調整できます。詳細については、「環境変数の設定」をご参照ください。
レイヤー
レイヤーは、追加のコードやその他のコンテンツを含むことができる
.zipファイルです。レイヤーには通常、ライブラリ、カスタムランタイム、データ、または設定ファイルが含まれます。Function Compute は、使用できる公式パブリックレイヤーを提供し、カスタムレイヤーの作成もサポートしています。レイヤーを使用すると、次の利点があります:デプロイパッケージのサイズを削減。
すべての関数の依存関係をレイヤーに配置することで、関数コードのデプロイパッケージのサイズを削減し、コードのデプロイを高速化できます。
コアとなる関数ロジックと依存関係を分離。
レイヤーを使用すると、関数コードを更新せずに関数の依存関係を更新でき、その逆も可能です。これにより、2 つを分離し、関数ロジックに集中できます。
複数の関数間で依存関係を共有。
共通の関数や依存関係をレイヤーに配置し、アカウント内の任意の数の関数にそのレイヤーを追加できます。レイヤーがない場合、各デプロイパッケージに同じ依存関係を含める必要があります。
説明カスタムイメージ (Custom Container) を使用する関数は、レイヤーの追加をサポートしていません。カスタムイメージを使用する関数を作成する際に、お好みのランタイム、ライブラリ、その他の依存関係をコンテナイメージにパッケージ化できます。
権限
関数ロールを設定することで、関数の権限を設定できます。Function Compute プラットフォームは、この RAM ロールを使用して Alibaba Cloud リソースにアクセスするための一時キーを生成し、それをコードに渡します。詳細については、「関数ロールを使用して他の Alibaba Cloud サービスへのアクセス権限を関数に付与する」をご参照ください。
ログ
Function Compute は Simple Log Service (SLS) と統合されています。関数のロギングを設定すると、Function Compute は自動的にログを収集し、指定された Logstore に配信します。詳細については、「ロギング機能の設定」をご参照ください。
ネットワーク
デフォルトでは、関数はインターネットにアクセスできますが、VPC 内のリソースにはアクセスできません。関数が VPC 内のリソースにアクセスする必要がある場合、または指定された VPC が関数を呼び出すことを許可する必要がある場合は、その関数のネットワークと権限を手動で設定する必要があります。詳細については、「ネットワーク設定の構成」をご参照ください。
ストレージ
Function Compute は、NAS ファイルシステムと OSS のマウントをサポートしています。詳細については、「NAS ファイルシステムの設定」および「OSS アクセスの設定」をご参照ください。
非同期設定
Function Compute は、タスクモードでの非同期リクエストの実行をサポートしています。タスクモードでは、Function Compute システムはさまざまな段階での各タスクの実行ステータスを記録します。タスクステータスのクエリ、タスクキューのメトリック、タスクの重複排除、およびタスクの積極的な終了などの機能を提供します。非同期タスクは、長時間実行されるタスクに適しています。非同期リクエストの処理が遅延に敏感で、100 ミリ秒未満の応答時間が必要な場合、または毎秒数千以上のタスクを継続的に送信する必要がある場合、タスクモードは適していません。詳細については、「非同期呼び出し」をご参照ください。
ライフサイクル
関数インスタンスは、リアルタイムのリクエスト量に基づいて動的に作成または破棄されます。各関数インスタンスのライフサイクルには、作成、呼び出し、破棄の 3 つの段階が含まれます。詳細については、「インスタンスライフサイクルフックの設定」をご参照ください。
ヘルスチェック
Function Compute は、Web 関数および GPU 関数インスタンスの定期的なヘルスチェックをサポートしています。この機能は、リクエストが異常なインスタンスに割り当てられるのを防ぎ、リクエストの失敗を防ぐのに役立ちます。詳細については、「インスタンスのヘルスチェックの設定」をご参照ください。
DNS
カスタム DNS 機能は、サイトアクセスを高速化するなどのシナリオに適しており、事前定義済みランタイムとカスタムランタイムのみをサポートします。詳細については、「カスタム DNS の設定」をご参照ください。
カスタムドメイン名
カスタムドメイン名を関数またはアプリケーションにバインドして、固定ドメイン名を通じて関数またはアプリケーションにアクセスできます。また、設定したカスタムドメイン名をオリジンドメイン名として使用し、CDN 高速化ドメイン名を追加することもできます。この設定により、ユーザーはコンテンツをより速く取得でき、アクセス遅延を削減し、サービス品質を向上させることができます。詳細については、「カスタムドメイン名の設定」をご参照ください。
関数の呼び出し
FC 関数をデプロイした後、複数の方法で呼び出すことができます。たとえば、Function Compute コンソールでテストイベントをすばやく作成して関数を呼び出したり、SDK を使用して関数を呼び出したり、API を呼び出して直接関数を呼び出したり、関数の URL HTTP または HTTPS エンドポイントを使用したり、イベントソースからトリガーしたりできます。以下のセクションでは、関数の呼び出しに関連する概念について説明します。
同期呼び出し
関数がイベントを処理した直後に結果が返されます。詳細については、「同期呼び出し」をご参照ください。
非同期呼び出し
イベントが正常にトリガーされた直後に応答が返され、バックグラウンドタスクの完了を待ちません。Function Compute システムはメッセージを確実に処理しますが、具体的な呼び出し詳細や関数の実行ステータスは返しません。非同期呼び出しの結果を取得したい場合は、非同期呼び出しの宛先を設定する必要があります。詳細については、「機能概要」をご参照ください。
呼び出し分析
呼び出し分析機能は、リクエストレベルでの実行ステータスの概要を提供します。この機能を有効にすると、システムは各関数実行のメトリック情報を収集します。詳細については、「リクエストレベルのメトリックログ」をご参照ください。
最大インスタンス数
このパラメーターは、現在の関数の最大インスタンス数を指定します。単一リージョンにおける Alibaba Cloud アカウントのデフォルトの最大インスタンス数は 100 です。実際の値は、Quota Center に表示されるクォータが適用されます。この制限を引き上げるには、Quota Center に移動して申請を送信してください。
インスタンスごとの同時実行数
インスタンスごとの同時実行数とは、1 つの関数インスタンスが同時に処理できるリクエストの数を指します。カスタムランタイムまたはコンテナイメージを使用して関数を作成する場合、インスタンスごとの複数の同時リクエストを設定して、実行時間を短縮し、インスタンスの総数を減らし、リソース使用率を向上させることができます。詳細については、「同時実行数の設定」をご参照ください。
その他の関連概念
バージョン
バージョンを公開すると、現在のコードと設定が不変のベースラインバージョンとして保存されます。このベースラインには、関数コードと設定が含まれますが、トリガー、非同期タスク設定、弾性ポリシーなどのリソースプロパティは含まれません。バージョンは
Gitのcommitに似ています。commitには、1 つ以上のコードファイルの変更とその設定が含まれ、現在のリポジトリのスナップショットを表します。詳細については、「バージョン管理」をご参照ください。エイリアス
エイリアスは、特定の関数バージョンへのポインターです。エイリアスを使用して関数にアクセスすると、Function Compute はエイリアスが指すバージョンに解決します。呼び出し元は、エイリアスがどの特定のバージョンを指しているかを知る必要はありません。エイリアスを使用して、公開、ロールバック、カナリアリリースなどの機能を簡単に実装できます。エイリアスは
Gitのtagに似ています。現在のcommitにtagを付けて、それをreleaseしてビジネスの反復を示すことができます。詳細については、「エイリアス管理」をご参照ください。タグ
タグを使用してサービスリソースを分類し、検索やリソースの集約を容易にすることができます。また、タグ機能を使用してサービスをグループ化し、異なるロールに異なるサービスグループに対する異なる操作権限を付与することもできます。詳細については、「タグの設定」をご参照ください。