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

Function Compute:概要

最終更新日:Sep 06, 2024

このトピックでは、非同期呼び出しの背景情報と、非同期呼び出しを使用できるシナリオについて説明します。 このトピックでは、関数の呼び出しを延期する方法についても説明します。

背景

Function Computeが非同期呼び出しリクエストを受信すると、レスポンスが返される前にリクエストが実行されるのを待つのではなく、リクエストが永続化された後すぐにレスポンスを返します。 Function Computeは、リクエストが少なくとも1回実行されるようにします。 非同期呼び出しの結果を取得する場合は、非同期呼び出しの宛先サービスを設定できます。 詳細については、「Result callback」をご参照ください。 非同期リクエストの各ステージのステータスを取得する場合は、タスクモードを有効にできます。 詳細については、「概要」をご参照ください。

シナリオ

関数に時間がかかる、リソースがかかる、またはエラーが発生しやすいロジックが含まれている場合は、非同期呼び出しを使用して、プログラムがより効率的で信頼性の高い方法でトラフィックの急増に対応できるようにすることができます。 次の項目は、シナリオの例を示します。

  • ユーザ登録システムでは、新しいユーザが登録要求を送信する。 登録が完了すると、システムはユーザーに電子メール通知を送信します。 メール送信のアクションは、登録プロセスから分離して、非同期で実行することができます。

  • ファイルをアップロードするとき、形式変換、インポート、エクスポートなどのアクションは、データのアップロード処理とは分離して、非同期で実行できます。

説明

HTTP関数は、同期モードと非同期モードで呼び出すことができます。 詳細については、「呼び出しメソッド」をご参照ください。

遅延呼び出し

一部のシナリオでは、非同期呼び出しリクエストを送信した後、Function Computeで関数の実行を延期することができます。 この場合、Function Compute APIまたはSDKを使用して、関数の実行を延期できます。

HTTPリクエストヘッダーx-fc-async-delayをコードに追加します。 有効な値: [0,3600] 。 単位は秒です。 Function Computeは、x-fc-async-delayで指定された期間が経過すると、関数を呼び出します。

次のコードは、Function Compute SDK for Goを使用して関数の実行を延期する方法の例を示しています。

package main

import (
    "fmt"
    "os"
    "github.com/aliyun/fc-go-sdk"
)
func main() {
      /*
        The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in Function Compute is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. 
        We recommend that you do not save the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources in your account may be compromised. 
        In this example, the AccessKey pair is saved in environment variables for authentication. 
        Configure the ALIBABA_CLOUD_ACCESS_KEY_ID ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables in your on-premises environment before you run the sample code. 
        In runtimes of Function Compute, the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables are automatically configured after you configure execution permissions. 
      */
    fcClient, err := fc.NewClient(fmt.Sprintf("%s.cn-shanghai.fc.aliyuncs.com", os.Getenv("ACCOUNT_ID")),
        "2016-08-15", os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
    if err != nil {
        panic(err)
    }

    // invoke function with delay
    invokeInput := fc.NewInvokeFunctionInput({ServiceName}, {FunctionName}).WithPayload({payload})
    invokeInput = invokeInput.WithAsyncInvocation().WithHeader("x-fc-async-delay", "200")
    _, err := FCClient.InvokeFunction(invokeInput)
    if err != nil {
        panic(err)
    }
}
重要

前述の方法を使用して延期される呼び出しは、一部のシナリオでは正確でない場合があります。 より正確な遅延実行を設定する場合は、タイムトリガーを使用します。 詳細については、「Time triggers」をご参照ください。

通常の機能

非同期呼び出しの一般的な機能については、次のトピックを参照してください。