このページでは、[関数の呼び出し] コンポーネントの設定方法について説明します。このコンポーネントを使用すると、フロー内から Alibaba Cloud の Function Compute のカスタム関数を呼び出すことができます。データ処理、リモートサービスの呼び出し、メッセージ配信、データストレージなど、カスタムビジネスロジックを実装できます。
コンポーネント情報
アイコン | 名前 |
| 関数の呼び出し |
手順の概要
関数の呼び出しコンポーネントを使用するには、まず Alibaba Cloud の Function Compute サービスを有効にし、Function Compute で関数を作成する必要があります。
関数の作成と設定:Function Compute で関数を作成し、設定します。
関数の設計:Function Compute で関数を設計します。
コンポーネントの設定:フロー内で関数の呼び出しコンポーネントを設定し、Function Compute のカスタム関数を呼び出します。
前提条件
Function Compute サービスが有効になっていること。
1. 関数の作成と設定
Function Compute コンソールにログインします。 ページの上部で、リージョンを選択します。 フローと同じリージョン (たとえば、シンガポール) を選択することをお勧めします。 左側のナビゲーションペインで、 を選択して [関数] ページに移動します。
関数リスト ページで、をクリックします。
主な設定: コード セクションで、[ランタイム] に適切なランタイムタイプを選択します。このトピックでは、 を例に説明します。
Tab 1 title
Tab 1 Content
Tab 2 title
Tab 2 Content
必要に応じて、その他のパラメーターを設定します。
2. 関数の設計
提供されている関数テンプレートを使用することで、ビジネスロジックに集中し、関数を迅速にデプロイできます。
関数の詳細 ページで、コード タブをクリックし、
index.pyファイルのデフォルトのコンテンツを次のテンプレートに置き換えます。説明このコードは、フロー呼び出しロジックと互換性のある WSGI (Web サーバーゲートウェイインターフェース) ハンドラーです。カスタムビジネスロジックは含まれていません。このファイル内の関数やコンテンツを変更しないでください。
import json from my import * # DO NOT CHANGE THIS ENTIRE FILE! # about wsgi: https://wsgi.readthedocs.io/en/latest/learn.html # handle wsgi request def handler(environ, start_response): # get request_body try: request_body_size = int(environ.get('CONTENT_LENGTH', 0)) except ValueError: request_body_size = 0 request_body = environ['wsgi.input'].read(request_body_size) print(request_body) # get path_info path_info = environ['PATH_INFO'] print(path_info) # load http trigger request to json # as flow node's input args body = json.loads(request_body.decode('utf-8')) # execute custom node process if path_info == '/handle_exec': output = handle_exec(body['variables']) elif path_info == '/handle_awake': output = handle_awake( body['asyncId'], body['async_event_data'], body['variables'] ) else: raise Exception('Invalid path ' + path_info) status = '200 OK' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) return [json.dumps(output).encode('utf-8')]my.pyという名前の新しいスクリプトファイルを作成し、次のコードをmy.pyファイルにコピーします。
以下のテンプレートは、入力変数 random_number_length に基づいて指定された長さの乱数を生成し、その数値の偶奇性に基づいてフローを even または odd ブランチに分岐させ、random と type の 2 つの変数をフローに出力します。
import random
# impl: py spi handle_exec
def handle_exec(variables) -> dict:
# translate fun request
random_number_length = variables['random_number_length']
random_number = generate_random_by_length(random_number_length)
print("random generated as " + str(random_number))
if (random_number % 2) == 0:
number_type = "even"
else:
number_type = "odd"
result = {
'success': True,
'message': 'OK',
'await': False,
'outputVariables': {
'random': random_number,
'type': number_type
},
'toBranchCode': number_type
}
return result
# impl: py spi handle_awake
def handle_awake(async_id, async_event_data, variables) -> dict:
return {}
def generate_random_by_length(random_number_length) -> int:
length = int(random_number_length)
start = 10 ** (length - 1)
stop = 10 ** length
print("from " + str(start) + "(inclusive) to " + str(stop) + "(exclusive)")
return random.randrange(start, stop)
カスタムロジックに関係なく、my.py ファイルには次の 2 つの関数を含める必要があります。
これらの 2 つの関数は、それぞれフロー呼び出しとイベント処理を処理します。フローエディターで関数の呼び出しコンポーネントのイベント処理を既に設定している場合は、関数内でイベント処理ロジックを実装する必要はありません。
def handle_exec(variables) -> dictdef handle_awake(async_id, async_event_data, variables) -> dict
カスタムロジックに関係なく、両方の関数の戻り値の構造は固定されています。
success:関数呼び出しが成功したかどうかを示します。
falseに設定すると、フローはエラーで停止します。message:追加情報を提供するカスタムメッセージ。
await:フローが後続のイベント処理を待機する必要があるかどうかを示します。
falseに設定すると、フローは返されたoutputVariablesとtoBranchCodeを使用して直ちに続行します。outputVariables:フローに出力変数として渡されるキーと値のペアの辞書。後続のコンポーネントでこれらの変数を参照できます。この辞書は、
awaitがfalseの場合にのみ使用されます。toBranchCode:多分岐設定に基づいて、フローが次に進むブランチを決定するコード。このコードは、
awaitがfalseの場合にのみ使用されます。
result = {
'success': True,
'message': 'OK',
'await': False,
'outputVariables': {
'myVarExample1': 'a',
'myVarExample2': 'b'
},
'toBranchCode': 'example'
}
ファイルを変更した後、デプロイメントコード をクリックします。
3. コンポーネント設定
次の手順に従って、フロー内で関数の呼び出しコンポーネントを設定します。
前提条件
このコンポーネントを設定するには、既存のフローを使用するか、新しいフローを作成して、フローのキャンバスにアクセスしてください。
既存のフローのキャンバスに移動する
新しいフローを作成して、そのキャンバスを開きます。詳細については、「フローの作成」をご参照ください。
キャンバスで、[関数の呼び出し] コンポーネントアイコンをクリックして、右側に設定ペインを表示します。
フローエディターで、[関数の呼び出し] (FunctionComputeNode) ノードを選択します。右側に設定パネルが開きます。使用可能な変数には、
incomingMessage、wabaId、wabaPhoneNumber、customerPhoneNumber、customerNameが含まれます。[HTTP トリガー設定] セクションで、[URL] と [リージョン] (必須) を入力し、[タイムアウト (秒)] を設定します。[実行設定] セクションでは、Webhook または API を使用してノードをトリガーし、必要に応じて非同期トリガースイッチを有効にできます。設定が完了したら、[保存] をクリックします。コンポーネントのパラメーターを設定します。詳細については、「パラメーター」をご参照ください。
設定が完了したら、保存 をクリックします。表示されるダイアログボックスで、保存 をクリックします。
パラメーター
セクション | パラメーター | 説明 |
実行設定 | [非同期ウェイクアップ] | 有効にすると、コンポーネントは非同期で実行され、フローを一時停止してから「ウェイクアップ」して実行を再開できます。 |
[非同期待機タイムアウト] | 非同期待機のタイムアウト期間 (秒単位)。 | |
HTTP トリガー設定 | [URL] | URL を設定するには、Function Compute コンソールに移動します。左側のナビゲーションペインで、 を選択します。目的の関数を見つけてその名前をクリックし、関数の詳細 ページに移動します。トリガー タブをクリックし、インターネットエンドポイント アドレスをコピーします。 説明 関数の URL を入力した後、関数を呼び出す権限を付与してください。 をクリックして、1 回限りの承認を完了します。 |
[リージョン] | 関数がデプロイされているリージョン。関数の ARN の 3 番目のセグメントに対応します。 ARN を見つけるには、Function Compute コンソールに移動します。左側のナビゲーションウィンドウで、を選択します。目的の関数を見つけ、その関数の詳細ページに移動します。設定タブをクリックし、次にARN をコピーするをクリックします。 説明 たとえば、コピーされた ARN が リージョンは | |
[タイムアウト] | HTTP リクエストのタイムアウト (秒単位)。 | |
パラメーター設定 | - | 必要に応じて、関数の入力パラメーターを設定します。パラメーター名は、関数が受け取ることを想定している名前と一致している必要があります。値は、定数またはフロー変数を指定できます。 |
多分岐設定 | - | 必要に応じて、関数の出力に複数のブランチを設定します。ブランチコードは、関数が返す |
レスポンス設定 | - | 必要に応じて、関数の出力をフロー変数にマッピングします。変数名は、関数が返す |