すべてのプロダクト
Search
ドキュメントセンター

Function Compute:非同期タスクのベストプラクティス

最終更新日:Nov 09, 2025

非同期タスクを使用すると、ビジネスステータスをリアルタイムで表示し、関数の実行を制御できます。アラート通知の送信や自動再試行の実行など、異常な状況をより適切に処理できます。このトピックでは、Serverless Devs と Function Compute コンソールを使用して非同期タスクを作成する方法について説明します。

背景情報

Function as a Service (FaaS) は、もともとステートレス、短期、軽量のコンピューティングをサポートしていました。例としては、API バックエンド、イメージ処理、データストリーム処理などがあります。FaaS 関数は、同期または非同期で呼び出すことができます。同期呼び出しは、関数をすぐに実行します。非同期呼び出しは、すぐに HTTP 202 状態コードを返し、呼び出しメッセージをキューに入れてバックエンドサービスで処理します。

シナリオ

ビジネスの成長に伴い、オンラインライブストリーミングなどのシナリオのユーザーは FaaS に移行しています。これらのシナリオでは、多くの場合、長い実行時間、高遅延感度、高可用性の要件が伴います。開発者は、リアルタイムのステータス情報と関数の実行に対する制御を必要とします。標準の同期呼び出しと非同期呼び出しは、これらの要件には適していません。非同期呼び出しは、遅延の影響を受けやすいアプリケーション向けに設計されておらず、同期呼び出しは、クライアントリソースを消費する不安定な長時間接続を使用します。ただし、非同期呼び出しは、大量のトラフィックバーストがあるオフラインサービスでのピーク負荷のシフトに適しています。これにより、ダウンストリームシステムへの影響を平滑化できます。このため、Function Compute は、非同期呼び出しを非同期タスクで拡張します。非同期タスクは、次のビジネスシナリオに適しています。

  • 監視可能な実行

    • 実行ステータスをリアルタイムで表示します。たとえば、メッセージがデキューされたか、関数がトリガーされたか、結果がコールバック先に送信されたかなどを表示できます。

    • ワークロードには、次の明確なタスクプロパティがあります。

      • 特定の実行のトリガーイベントとリアルタイムログを表示できます。

      • 実行名、時間、またはステータスで履歴をフィルターおよびクエリできます。

  • 操作可能な実行

    サービスには次のタスクプロパティがあります。

    • 関数が長時間実行されている場合は、手動で停止します。

    • 失敗した、または成功した以前の実行を再実行します。

詳細については、「非同期タスク」をご参照ください。

準備

手順

非同期タスクでは、次の操作を実行できます。

  • 関数が非同期実行を開始した後、Function Compute コンソールで、または SDK か API を使用して実行を表示できます。

  • 関数の実行が失敗したか、手動で停止された場合、Function Compute はメッセージを Simple Message Queue (formerly MNS) キューにプッシュします。このキューはデッドレターキューとして機能し、失敗した実行を通知して処理できるようにします。

  1. 次のコマンドを実行してプロジェクトをクローンします。

    git clone https://github.com/awesome-fc/Stateful-Async-Invocation.git
  2. 次のコマンドを実行してプロジェクトディレクトリに移動します。

    cd Stateful-Async-Invocation
  3. s.yaml ファイルを変更します。

    次のコードは、s.yaml ファイルの完全な例です。{accountid} を Alibaba Cloud アカウント ID に、{myqueue} を非同期呼び出しの宛先 Simple Message Queue (formerly MNS) キューの名前に置き換えます。

    edition: 3.0.0
    name: stateful-async-inovcation-demo
    access: default
    resources:
      fc-job:
        component: fc3
        props:
          region: cn-hangzhou
          description: this is test
          handler: index.handler
          memorySize: 128
          runtime: python3
          instanceConcurrency: 1
          timeout: 60
          internetAccess: true
          role: acs:ram::{accountid}:role/aliyunfcdefaultrole
          functionName: my-fc-job
          code: ./code
          asyncInvokeConfig:
            maxAsyncEventAgeInSeconds: 172800
            maxAsyncRetryAttempts: 1
            asyncTask: true
            qualifier: LATEST
            destinationConfig:
              onSuccess:
                destination: acs:mns:cn-hangzhou:{accountid}:/queues/{myqueue}/messages
              onFailure:
                destination: acs:mns:cn-hangzhou:{accountid}:/queues/{myqueue}/messages
  4. 宛先ディレクトリで、次のコマンドを実行して関数をデプロイします。

    sudo s deploy

    デプロイメントが成功したら、Function Compute コンソールにログインして、関数が作成され、その非同期タスク機能が有効になっていることを確認します。

結果の検証

  1. Serverless Devs を使用して、前のステップでデプロイした関数を非同期に呼び出します。次のコードは一例です。

    sudo s invoke --invocation-type Async -e '{"failure":true}'

    Function Compute コンソールで非同期呼び出しを表示および管理することもできます。詳細については、「タスク管理」をご参照ください。

    説明

    関数のログなどの詳細を表示するには、関数に Simple Log Service を設定する必要があります。詳細については、「ログの設定」をご参照ください。

  2. 関数の呼び出しが完了した後、コールバック先が設定されている場合は、宛先をチェックしてプッシュレコードを表示します。

    この例では、設定されたコールバック先は Simple Message Queue (formerly MNS) キューです。次の例に示すように、Simple Message Queue (旧称:MNS) コンソールでプッシュされたメッセージを表示できます。

    {
        "timestamp": 1728465119433,
        "requestContext": {
            "requestId": "1-670648a1-15197d0b-d07710222f9d",
            "functionArn": "acs:fc:cn-hangzhou:1034354682****:functions/my-fc-job",
            "condition": "InvocationError",
            "approximateInvokeCount": 2
        },
        "requestPayload": "{\"failure\":true}",
        "responseContext": {
            "statusCode": 200,
            "functionError": "InvocationError"
        },
        "responsePayload": "{\"errorMessage\":\"Function timed out after 60 seconds (maxMemoryUsage: 8MB)\"}"
    }
    説明

    非同期呼び出しが失敗したか、手動で停止された場合、呼び出しに関する詳細なエラーメッセージが Simple Message Queue (formerly MNS) に送信されます。