Function Compute ノードを使用すると、カスタムのイベント関数を定期的なスケジュールで実行し、DataWorks のデータ処理ワークフローに統合できます。本トピックでは、Function Compute ノードの構成、デプロイメント、およびモニタリング方法について説明します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
-
ワークスペースに [開発] または [ワークスペース管理者] ロールで追加された RAM ユーザー。 ワークスペース管理者ロールには、必要以上の権限が含まれています。 ワークスペース管理者ロールを割り当てる際には、十分ご注意ください。 詳細については、「ワークスペースにメンバーを追加してロールを割り当てる」をご参照ください。
-
お使いのワークスペースに関連付けられたサーバーレス リソースグループです。詳細については、「サーバーレス リソースグループの使用」をご参照ください。
-
DataWorks IDE で Function Compute ノードが作成済みであること。詳細については、「タスクノードの作成」をご参照ください。
サポートされるリージョン
Function Compute ノードは、以下のリージョンで作成されたワークスペースでのみ利用可能です:中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (深セン)、中国 (香港)、シンガポール、イギリス (ロンドン)、米国 (シリコンバレー)、米国 (バージニア)、ドイツ (フランクフルト)、オーストラリア (シドニー)、インド (ムンバイ)。
制限事項
DataWorks はイベント関数のみ呼び出します。関数を定期的にスケジュール実行する場合は、HTTP 関数ではなくイベント関数を作成してください。詳細については、「関数タイプの選択」をご参照ください。
RAM ユーザーの権限
RAM ユーザーとして Function Compute ノードを開発する場合、RAM ユーザーに以下のポリシーをアタッチしてください。
| ポリシーの種類 | アタッチするポリシー |
|---|---|
| システムポリシー | AliyunFCFullAccess、AliyunFCReadOnlyAccess、および AliyunFCInvocationAccess。詳細については、「システムポリシー」をご参照ください。 |
| カスタムポリシー(Function Compute 3.0) | fc:GetAsyncTask、fc:StopAsyncTask、fc:GetService、fc:ListServices、fc:GetFunction、fc:InvokeFunction、fc:ListFunctions、fc:GetFunctionAsyncInvokeConfig、fc:ListServiceVersions、fc:ListAliases、fc:GetAlias、fc:ListFunctionAsyncInvokeConfigs、fc:GetStatefulAsyncInvocation、fc:StopStatefulAsyncInvocation。詳細については、「カスタムポリシー」をご参照ください。 |
| カスタムポリシー(Function Compute 2.0) | Function Compute 3.0 と同様ですが、fc:GetAsyncTask および fc:StopAsyncTask は不要です。 |
その他のポリシー例については、「ポリシーおよびサンプルポリシー」および「サンプルポリシー」をご参照ください。
Function Compute ノードの構成
Function Compute ノードの構成タブで、以下のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| [バージョンまたはエイリアスの選択] | 関数呼び出しに使用するサービスのバージョンまたはエイリアスです。[デフォルトバージョン] を選択すると、バージョンパラメーターが表示され、その値は LATEST に固定されます。選択肢は次のとおりです:リリース済みのサービスバージョン(トリガー情報は含まない、設定および関数コードを含むサービスのスナップショットで、ロールバックをサポート)またはバージョンエイリアス(特定のバージョンを指し、カナリアリリースおよびロールバックをサポート)。詳細については、「バージョンの管理」および「エイリアスの管理」をご参照ください。 |
| [関数の選択] | 呼び出すイベント関数です。DataWorks はイベント関数のみをサポートしており、HTTP 関数はサポートしていません。利用可能な関数がない場合は、事前に作成してください。「関数の管理」および「関数タイプの選択」をご参照ください。 |
| [呼び出し方法] | DataWorks が関数を呼び出す方法です。選択肢は Synchronous Invocation または Asynchronous Invocation です。詳細については、下記の「呼び出し方法の選択」をご参照ください。 |
| [変数] | イベント入力として関数に渡される JSON ペイロードです。DataWorks のスケジューリング変数を参照するには、${} フォーマットを使用します(例:"triggerTime": "${bizdate}")。これは、Function Compute コンソールの [コード] タブで [関数のテスト] > [テストパラメーターの設定] を選択して表示される [テストパラメーターの設定] パネル内の [新しいテストイベントの作成] タブの内容に対応しています。 |
呼び出し方法の選択
| 同期呼び出し | 非同期呼び出し | |
|---|---|---|
| 動作の仕組み | DataWorks は関数の実行完了を待機し、実行結果を返します。 | DataWorks はリクエストの永続化後すぐに応答を返し、関数はバックグラウンドで実行されます。 |
| 使用するタイミング | 関数は 1 時間以内に完了します。 | 関数の実行時間が長く、リソースを多く消費する、または 1 時間を超える場合。 |
例:スケジューリング時刻にトリガーされる関数
以下の例では、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
変数の構成 (ノード構成タブの [変数] フィールドで設定):
{
"payload": "payload1",
"triggerTime": "${bizdate}",
"triggerName": "triggerName1"
}
${bizdate} は、実行時にビジネス日付に解決される DataWorks のスケジューリング変数です。その他の関数コード例については、「サンプルコード」をご参照ください。
スケジューリングの構成とデプロイメント
-
ノードを構成した後、スケジューリングプロパティを設定して、DataWorks が自動実行するタイミングを定義します。 詳細については、「スケジューリング構成」をご参照ください。
-
ノードを本番環境にデプロイします。詳細については、「ノードまたはワークフローのデプロイメント」をご参照ください。
-
デプロイメント後、[オペレーションセンター] > [自動トリガーノード] に移動して、デプロイされたノードを表示し、その実行を監視します。 詳細については、「オペレーションセンターの使用開始」をご参照ください。
トラブルシューティング
サービス一覧が表示されない:ノードの構成時に作成済みのサービス一覧が表示されない場合、以下の 2 つの原因を確認してください。
-
ご利用のアカウントに支払い遅延がある。アカウントをチャージし、ノード構成ページをリフレッシュしてください。
-
ご利用のアカウントに fc:ListServices 権限がありません。Alibaba Cloud アカウントの所有者に連絡し、fc:ListServices 権限を付与するか、AliyunFCFullAccess ポリシーをアタッチした後、ページをリフレッシュしてください。詳細については、「RAM ポリシーを使用した DataWorks サービスおよび DataWorks コンソール内のエンティティに対する権限管理」をご参照ください。