カスタムコンテナ関数は、Function Compute がユーザーに代わって予約するリソースに依存します。これには、コールドスタートのレイテンシーを低減するために Alibaba Cloud Container Registry (ACR) からキャッシュされるイメージが含まれます。イメージキャッシングはバックグラウンドで非同期に実行されるため、関数は作成または更新の直後に呼び出しを処理できる状態になっていない場合があります。関数の状態を確認すると、関数を呼び出せるタイミングを正確に把握できます。
関数の状態
Function Compute は、各カスタムコンテナ関数に次のいずれかの状態を割り当てます。
| 状態 | 呼び出し可否 | 説明 |
|---|---|---|
| Pending | いいえ | 関数の作成直後の初期状態です。Function Compute がリソースを予約し、イメージをキャッシュしています。イメージの準備が完了すると Active に移行します。 |
| Active | はい | リソースの予約が完了しています。関数は通常どおり呼び出しを処理します。 |
| Failed | いいえ | リソースの準備またはイメージへのアクセスでエラーが発生しました。復旧手順については、「Failed 状態」をご参照ください。 |
| Inactive | いいえ | 関数が一定時間アイドル状態だったため、Function Compute がキャッシュされたリソースを解放しました。再デプロイするか、関数をトリガーして Pending に戻します。リソースの準備に成功した場合、関数は Active に戻ります。失敗した場合、Inactive のままになります。 |
Failed 状態
関数が Failed 状態になるのは、次の 2 つのケースです:
作成または更新中のリソース準備に失敗した場合:リソースの準備中に問題が発生したため、関数を呼び出せません。
元のイメージにアクセスできなくなった場合:Function Compute はコールドスタートを高速化するためにイメージをキャッシュしますが、呼び出し中は ACR 内の元のイメージに引き続きアクセスできる必要があります。イメージが削除された場合、またはタグが別のダイジェストで上書きされた場合、関数は Failed 状態になります。有効なイメージ情報で関数を更新し、再デプロイしてください。
Function Compute は、関数の作成または更新時に選択したイメージバージョンのタグとダイジェストの両方を記録します。そのダイジェストが後から ACR で上書きされると、関数は呼び出しに失敗します。デプロイ後にイメージタグを上書きしないようにしてください。上書きした場合は、最新のイメージ情報を使用して関数を再デプロイしてください。
更新状態
関数の更新が進行中の場合、LastUpdateStatus フィールドは、関数のメインの状態とは別に更新状況を追跡します。
LastUpdateStatus | 説明 | 呼び出しのルーティング |
|---|---|---|
InProgress | Function Compute が更新のためのリソースを準備しています。 | 更新前のコードにルーティングされます |
Successful | 更新が完了しました。 | 更新後のコードにルーティングされます |
Failed | 更新のためのリソース準備に失敗しました。 | 更新前のコードにルーティングされます |
呼び出し前の状態確認
GetFunction API を呼び出して、関数の状態とイメージのダイジェストを取得できます。SDK または Serverless Devs を使用してカスタムコンテナ関数を作成または更新する場合は、呼び出し前に GetFunction API を呼び出して関数の状態を確認してください。
新規に作成した関数:状態が
Activeであることを確認してください。それ以外の状態の関数は呼び出せません。更新した関数:
LastUpdateStatusがSuccessfulであることを確認してください。
状態図
次の出力は、Pending 状態の新規作成関数に対する s info の結果です (Function Compute がリソースを予約し、イメージをキャッシュしています)。
s info
Steps for [info] of [hello-world-app]
====================
✔ [hello_world] completed (3.68s)
Result for [info] of [hello-world-app]
====================
hello_world:
region: us-east-1
codeChecksum:
codeSize: 0
cpu: 0.5
createdTime: 2023-10-27T06:56:00Z
customContainerConfig:
image: registry.us-east-1.aliyuncs.com/fxxx2/flask_xxx_ask_v001
resolvedImageUri: registry.us-east-1.aliyuncs.com/fc-dxxx_ask@shaxxx9e19867xxx23c4xxx78ffxxx4116cd9xxx9cde7370b43dd889
description: hello world by serverless devs
diskSize: 512
functionArn: acs:fc:us-east-1:143*********149:functions/start-python-xxx:3
functionId: b24c69ed-0xxx-xxx-5ff3f51c4190
functionName: start-pxxx_xilixxx_est3
handler: handler
instanceConcurrency: 1
internetAccess: true
lastModifiedTime: 2023-10-27T06:56:00Z
memorySize: 512
role:
runtime: custom-container
state: Pending
stateReason: The function is being created.
stateReasonCode: Creating
timeout: 60
A complete log of this run can be found in: /home/admin/.s/logs/1027145606次の出力は、更新中の関数 (LastUpdateStatus:InProgress) に対する s info の結果です。
admin ~/workspace/xxx/demo-3 s info
Steps for [ixxx-app]
========================
✔ [hello_world] completed (4.97s)
Result for [info] of [hello-world-app]
========================
hello_world:
region: us-east-1
codeChecksum:
codeSize: 0
cpu: 0.5
createdTime: 2023-10-27T05:45:30Z
customContainerConfig:
image: registry.us-east-1.aliyuncs.comxxx k:f k_vxxx
resolvedImageUri: registry.us-east-1.aliyuncs.com/fcxxx k@sha256:f65d0acd5xxx ab9cd923f3afxxx b9exxx 2cdxxx 99d51bbae2fe0ba
description: hello world by serverless devs
diskSize: 512
functionArn: acs:fc:us-east-1:143**********149:functions/start-pxxx xilxxx
functionId: 82597d19xxx f-9581fe2429d7
functionName: start-pythonxxx t1
handler: handler
instanceConcurrency: 1
internetAccess: true
lastModifiedTime: 2023-10-27T06:52:03Z
lastUpdateStatus: InProgress
memorySize: 512
role:
runtime: custom-container
state: Active
timeout: 60
A complete log of this run can be found in: /home/admin/.s/logs/xxx5200次の出力は、更新が成功した後の s info の結果です。lastUpdateStatus が Successful で、state が Active の場合、関数の更新は完了しており、関数は Active 状態です。
admin ~/wc xxx mo-3 s info
Steps for [info] of [hello-world-app]
====================
✔ [hello_world] completed (1.32s)
Result for [info] of [hello-world-app]
====================
hello_world:
region: us-east-1
codeChecksum:
codeSize: 0
cpu: 0.5
createdTime: 2023-10-27T05:45:30Z
customContainerConfig:
image: registry.us-east-1.aliyuncs.com,xxx/flask:flask_v001
resolvedImageUri: registry.us-east-1.aliyuncs.com,xxx/mo2/flask@sha256:9614366c50xxx4bcxxxxxxxxxxxxxxxx/cae95c74f44
description: hello world by serverless dexxx
diskSize: 512
functionArn: acs:fc:us-east-1:xxx:49:functions/start-pyxxxxxxxx
functionId: 82597d19-2bc0-41c3-92f1-xxx429d7
functionName: start-pyxxx-n-xxxxxx1
handler: handler
instanceConcurrency: 1
internetAccess: true
lastModifiedTime: 2023-10-27T05:56:10Z
lastUpdateStatus: Successful
logConfig:
enableInstanceMetrics: true
enableRequestMetrics: true
logBeginRule: DefaultRegex
logstore: function-log
project: aliyun-fc xxx0908f0a5f
memorySize: 512
role:
runtime: custom-container
state: Active
timeout: 60
A complete log of this run can be found in: /home/admin/.s/logs/xxx