カスタムコンテナランタイムで実行される関数は、Function Computeによって予約されたリソースに依存します。 イメージはFunction Computeにキャッシュされ、関数のコールドスタートを高速化します。 Function Computeを使用すると、ユーザーはカスタムコンテナー関数のキャッシュステータスを表示し、ユーザーエクスペリエンスを向上させることができます。 このトピックでは、カスタムコンテナ関数の状態と、状態が関数の呼び出しにどのように影響するかについて説明します。
関数の状態
Function Computeは、Alibaba Cloud Container Registry (ACR) からイメージをキャッシュして、関数のコールドスタートを高速化します。 Function Computeのキャッシュプロセスは非同期です。 リソースの準備は、作成操作と更新操作が同期結果を返すかどうかに関係なく、バックグラウンドで非同期に行われます。 機能状態は、リソース準備の段階を示すために提供される。
Function Computeの関数の状態は、関数を呼び出し可能かどうかを示します。 カスタムコンテナ関数など、Function Computeがリソースを予約する必要がある関数は、次のいずれかの状態になります。
Pending: 関数の初期状態は、関数が作成された後のPendingです。 この状態では、Function Computeは関数の実行に必要なリソースの予約を試みます。 この状態で関数を呼び出すことはできません。 対応するイメージの準備ができたら、関数はアクティブ状態になります。
アクティブ: Function Computeがリソース予約を完了すると、関数はアクティブ状態になります。 アクティブ状態の関数は、期待どおりに呼び出すことができます。
Failed: リソースの準備中に問題が発生したため、この状態の関数は呼び出されません。
InActive: 関数が長時間アイドル状態になると、関数はInActive状態になります。 この場合、キャッシュされたイメージなどの機能リソースは解放されます。 InActive状態の関数は、期待どおりに呼び出すことはできません。 非アクティブ状態の関数を呼び出すには、関数を再デプロイまたはトリガーすることができます。この場合、Function Compute は、関数をPending状態に戻し、関数のリソースを準備するために再試行します。 リソースが準備されている場合、関数は再びアクティブ状態になります。 それ以外の場合、関数はInActive状態のままです。
Function Computeは、コールドスタートを加速するためにイメージをキャッシュします。 ただし、呼び出し中に元の画像が失われることはありません。 元のイメージが存在しなくなった場合、関数はFailed状態になり、呼び出すことができません。 イメージが変更されたときに、できるだけ早く関数を更新することをお勧めします。
Function Computeは、関数の作成および更新時に選択したイメージバージョンのタグとダイジェストを記録します。 イメージバージョンが別のダイジェストに更新された場合、関数は呼び出されません。 イメージが別のダイジェストによって上書きされないようにする必要があります。 イメージが上書きされた場合は、最新のイメージ情報を使用して関数を再デプロイする必要があります。
関数の更新に関する関数の状態
LastUpdateStatusフィールドは、関数が作成された後の関数の状態を示すために使用されます。
InProgress: 関数は更新中であり、function Computeはリソースを準備中です。 呼び出し要求は、更新前の関数コードに向けられる。
成功: 関数が更新されました。 呼び出し要求は、更新された関数コードに向けられる。
Failed: 関数のリソースの準備に失敗しました。 呼び出し要求は、更新前の関数コードに向けられる。
関数を呼び出すInvoke a function
GetFunction操作を呼び出して、関数の状態とイメージダイジェストを取得できます。 SDKまたはServerless Devsを使用してカスタムコンテナ関数を作成または更新する場合は、GetFunction操作を呼び出して、関数が次のいずれかの状態になっていることを確認する必要があります。
アクティブ: 新しく作成された関数の場合、それらを呼び出す前にアクティブ状態にあることを確認してください。 他の状態の関数は呼び出すことができません。
Successful: 更新された関数の場合、LastUpdateStatus値がSuccessfulであることを確認します。 LastUpdateStatus値が成功していない場合、関数を呼び出すことはできません。
更新中の関数の状態を次の図に示します。
次の図は、更新される関数の状態を示しています。