DataWorks は、カスタムコードを使用してさまざまなビジネス要件を実装できる Function Compute ノードを提供します。 Function Compute ノードは定期的なスケジューリングをサポートしています。 これにより、スケジュールされたタスクの実行が容易になります。 さらに、Function Compute ノードは他のタイプのノードと連携して動作し、完全なデータ処理プロセスを構築するのに役立ちます。 このトピックでは、Function Compute ノードを作成および使用する方法について説明します。
前提条件
使用する RAM ユーザーがワークスペースに追加されています。
RAM ユーザーを使用してタスクを開発する場合、RAM ユーザーをメンバーとしてワークスペースに追加し、[開発] ロールまたは [ワークスペース管理者] ロールを RAM ユーザーに割り当てる必要があります。 ワークスペース管理者ロールには、必要以上の権限があります。 ワークスペース管理者ロールを割り当てる場合は注意してください。 メンバーを追加してロールをメンバーに割り当てる方法の詳細については、「ワークスペースメンバーを追加し、ロールを割り当てる」をご参照ください。
サーバーレス リソースグループがワークスペースに関連付けられています。 詳細については、「サーバーレス リソースグループを使用する」ディレクトリのトピックをご参照ください。
ノードでタスクを開発する前に、Function Compute ノードが作成されます。 詳細については、「タスクノードを作成する」をご参照ください。
制限
機能の制限:DataWorks では、イベント関数のみを呼び出すことができます。 DataWorks でイベント処理関数を定期的にスケジュールする場合、Function Compute でイベントリクエストを処理するために HTTP 関数ではなくイベント関数を作成する必要があります。 その他の関数タイプの詳細については、「関数の種類を選択する」をご参照ください。
リージョンの制限:Function Compute が提供する機能は、中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (深圳)、中国 (香港)、シンガポール、英国 (ロンドン)、米国 (シリコンバレー)、米国 (バージニア)、ドイツ (フランクフルト)、オーストラリア (シドニー)、インド (ムンバイ) のリージョンで作成されたワークスペースでのみ使用できます。
注意事項
Function Compute ノードを使用する場合、作成したサービスに基づいて実行されるイベント関数を呼び出す必要があります。 サービスを選択するときに、作成済みサービスのリストを取得できない場合があります。 この問題は、次のいずれかの理由で発生する可能性があります。
現在のアカウントの支払いが遅延しています。 この場合は、アカウントにチャージし、ノードの構成ページを更新して再試行してください。
アカウントに必要な権限がないため、サービスリストを取得できません。 この場合は、Alibaba Cloud アカウントに連絡して [fc:ListServices] 権限を付与するか、[AliyunFCFullAccess] ポリシーをアカウントにアタッチしてください。 承認が完了したら、ノードの構成ページを更新して再試行してください。 詳細については、「RAM ポリシーを使用して DataWorks サービスおよび DataWorks コンソール内のエンティティに対する権限を管理する」をご参照ください。
DataWorks で関数を呼び出して Function Compute ノードを実行する場合、ノードの実行時間が 1 時間を超える場合は、ノードの「呼び出し方法」パラメーターを「非同期呼び出し」に設定します。 非同期呼び出しの詳細については、「概要」をご参照ください。
RAM ユーザーとして Function Compute ノードを開発する場合、次のシステムポリシーまたはカスタムポリシーを RAM ユーザーにアタッチする必要があります。
ポリシータイプ
説明
システムポリシー
AliyunFCFullAccess、AliyunFCReadOnlyAccess、およびAliyunFCInvocationAccessポリシーを RAM ユーザーにアタッチします。 システムポリシーの詳細については、「システムポリシー」をご参照ください。カスタムポリシー
Function Compute 3.0 を使用する場合、カスタムポリシーを使用して、RAM ユーザーに次のすべての権限を付与します。
fc:GetAsyncTaskfc:StopAsyncTaskfc:GetServicefc:ListServicesfc:GetFunctionfc:InvokeFunctionfc:ListFunctionsfc:GetFunctionAsyncInvokeConfigfc:ListServiceVersionsfc:ListAliasesfc:GetAliasfc:ListFunctionAsyncInvokeConfigsfc:GetStatefulAsyncInvocationfc:StopStatefulAsyncInvocation
Function Compute 2.0 を使用する場合、カスタムポリシーを使用して
fc:GetAsyncTaskおよびfc:StopAsyncTaskカスタムポリシー 権限を RAM ユーザーに付与する必要はありません。説明Function Compute のその他のポリシーとサンプルポリシーの詳細については、次のトピックまたはセクションをご参照ください。
1. Function Compute ノードを使用してタスクを開発する
Function Compute ノードの構成タブで、次の表に示すパラメーターを構成します。

パラメーター
説明
[バージョンまたはエイリアスを選択]
後続の関数呼び出しに使用するサービスのバージョンまたはエイリアスを選択します。 デフォルトバージョンを選択すると、「バージョン」パラメーターが表示され、「バージョン」パラメーターの値は [LATEST] に固定されます。
サービスバージョン
Function Compute は、サービスレベルのバージョン管理機能を提供します。これにより、サービスの 1 つ以上のバージョンをリリースできます。 バージョンは、サービス設定、サービスに属する関数のコードと設定などの情報を含むサービス スナップショットに似ています。 バージョンにはトリガー情報は含まれていません。 バージョンをリリースすると、システムはサービスのスナップショットを生成し、後で使用するスナップショットに関連付けられたバージョン番号を割り当てます。 バージョンのリリース方法の詳細については、「バージョンの管理」をご参照ください。
バージョンエイリアス
Function Compute では、サービスバージョンのエイリアスを作成できます。 エイリアスは、サービスの特定のバージョンを指します。 エイリアスを使用して、バージョンのリリース、ロールバック、またはカナリアリリースを簡単に行うことができます。 エイリアスは、サービスまたはバージョンに依存します。 エイリアスを使用してサービスまたは関数にアクセスすると、Function Compute はエイリアスをエイリアスが指すバージョンに解析します。 これにより、呼び出し側はエイリアスが指す特定のバージョンを知る必要がなくなります。 エイリアスの作成方法については、「エイリアスの管理」をご参照ください。
[関数を選択]
Function Compute ノードを実行するために呼び出す関数を選択します。 使用可能な関数がない場合は、関数を作成します。 詳細については、「関数の管理」をご参照ください。
説明DataWorks では、イベント関数のみを呼び出すことができます。 DataWorks でイベント処理関数を定期的にスケジュールする場合、Function Compute でイベントリクエストを処理するために HTTP 関数ではなくイベント関数を作成する必要があります。 その他の関数タイプの詳細については、「関数の種類を選択する」をご参照ください。
この例では、
para_service_01_by_time_triggers関数が選択されています。 このような関数を作成する場合は、[スケジュールされた時刻に関数をトリガーする] ためのサンプルコードを使用します。 コードロジック:import json import logging logger = logging.getLogger() // イベントとコンテキストを受け取るハンドラ関数 def handler(event, context): logger.info('event: %s', event) // JSON を解析する evt = json.loads(event) triggerName = evt["triggerName"] triggerTime = evt["triggerTime"] payload = evt["payload"] logger.info('triggerName: %s', triggerName) logger.info("triggerTime: %s", triggerTime) logger.info("payload: %s", payload) return 'Timer Payload: ' + payload他の関数のサンプルコードの詳細については、「サンプルコード」をご参照ください。
[呼び出し方法]
関数を呼び出す方法。 有効な値:
同期呼び出し:関数を同期的に呼び出すと、イベントが関数を直接トリガーし、Function Compute は関数を実行して応答を待ちます。 関数が呼び出されると、Function Compute は関数の結果を返します。
非同期呼び出し:関数を非同期的に呼び出すと、Function Compute はリクエストの実行が完了した後ではなく、リクエストが永続化された直後に応答を返します。
関数のロジックに時間がかかり、リソースを消費し、エラーが発生しやすい場合は、この方法を使用して、プログラムがトラフィックの急増に効率的かつ確実に対応できるようにします。
実行時間が 1 時間を超える Function Compute タスクには、この方法を使用することをお勧めします。
[変数]
ビジネス要件に基づいて、関数の変数に値を割り当てます。 このフィールドのデータは、Function Compute コンソールの関数の「新しいテストイベントの作成」タブの「テストパラメーターの構成」パネルの内容に対応しています。 「テストパラメーターの構成」パネルに移動するには、Function Compute コンソールの関数の詳細ページに移動し、「コード」タブで を選択します。
この例では、
para_service_01_by_time_triggers関数の値として、次のパラメーターを変数に割り当てます。${}形式は、bizdate変数を定義するために使用されます。 変数に値を割り当てる必要があります。{ "payload": "payload1", // bizdate変数の値を設定してください "triggerTime": "${bizdate}", "triggerName": "triggerName1" }Function Compute ノードに基づいてタスクを開発した後、システムがタスクを定期的にスケジュールできるように、ノードのスケジューリングプロパティを構成します。 詳細については、「スケジューリング構成」をご参照ください。
2. Function Compute ノードをデプロイし、O&M 操作を実行する
ノードコードとスケジューリングプロパティを構成した後、Function Compute ノードを本番環境にデプロイします。 詳細については、「ノードまたはワークフローのデプロイ」をご参照ください。
デプロイメントが完了したら、[オペレーションセンター] の [自動トリガーノード] ページに移動して、デプロイされているノードを表示し、ノードで O&M 操作を実行します。 システムは、構成したスケジューリングプロパティに基づいてノードを定期的に実行します。 詳細については、「オペレーションセンターの概要」をご参照ください。