DataWorks で Function Compute ノードを使用して、カスタムコードを実行できます。これらのノードは定期スケジューリングをサポートしているため、スケジュールされたタスクに最適です。また、Function Compute ノードを DataWorks の他のノードタイプと組み合わせて、完全なデータ処理ワークフローを構築することもできます。このトピックでは、Function Compute ノードの作成方法と使用方法について説明します。
前提条件
使用する RAM ユーザーがワークスペースに追加されていること。
RAM ユーザーを使用してタスクを開発する場合、RAM ユーザーをメンバーとしてワークスペースに追加し、[開発] ロールまたは [ワークスペース管理者] ロールを RAM ユーザーに割り当てる必要があります。 ワークスペース管理者ロールには、必要以上の権限があります。 ワークスペース管理者ロールを割り当てる場合は注意してください。 メンバーを追加してロールを割り当てる方法の詳細については、「ワークスペースメンバーを追加してロールを割り当てる」をご参照ください。
-
サーバーレス リソースグループがワークスペースに関連付けられていること。 詳細については、「サーバーレス リソースグループを使用する」ディレクトリのトピックをご参照ください。
-
Function Compute ノードが作成されていること。詳細については、「スケジューリングワークフロー用のノードの作成」をご参照ください。
制限事項
-
DataWorks はイベント関数の呼び出しのみをサポートしています。HTTP 関数を呼び出すことはできません。そのため、DataWorks で関数を定期的にスケジュールするには、イベントリクエストを処理するイベント関数を作成する必要があります。関数タイプの詳細については、「関数タイプの選択」をご参照ください。
-
Function Compute ノードは、中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (深セン)、中国 (香港)、シンガポール、英国 (ロンドン)、米国 (シリコンバレー)、米国 (バージニア)、ドイツ (フランクフルト)、オーストラリア (シドニー) のリージョンにあるワークスペースでのみ使用できます。
注意事項
-
Function Compute ノードを使用する場合、既存のサービスからイベント関数を呼び出します。サービスのリストが利用できない場合は、以下の原因が考えられます。
-
アカウントに料金滞納があります。アカウントに入金し、ノード設定ページを更新してから再試行してください。
-
現在のユーザーにサービスリストを取得する権限がありません。Alibaba Cloud アカウントの所有者に連絡して、RAM ユーザーに [fc:ListServices] 権限を付与するか、 [AliyunFCFullAccess] システムポリシーを割り当ててください。権限を付与した後、ノード設定ページを更新してから再試行してください。認可の詳細については、「RAM ポリシーによる製品およびコンソールアクセスの制御」をご参照ください。
-
-
DataWorks の Function Compute ノード内の関数が 1 時間を超えて実行されることが予想される場合は、非同期呼び出しを使用する必要があります。Function Compute における非同期呼び出しの詳細については、「機能の概要」をご参照ください。
-
RAM ユーザーを使用して Function Compute ノードを開発する場合は、システムポリシーまたはカスタムポリシーを使用して、RAM ユーザーに必要な権限を付与する必要があります。
ポリシータイプ
説明
システムポリシー
システムポリシーを使用する場合は、ユーザーに
AliyunFCFullAccess、AliyunFCReadOnlyAccess、AliyunFCInvocationAccessポリシーを付与します。カスタムポリシー
Function Compute でカスタムポリシーを使用する場合は、以下の一般的な権限を付与します。
-
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 の権限ポリシーの詳細については、以下のドキュメントをご参照ください。
-
ノードの開発
-
Function Compute ノードを作成した後、ノードを開きます。ノード設定タブで、呼び出す関数を選択し、その呼び出し方法と変数を設定します。
パラメータ
説明
[バージョンまたはエイリアスの選択]
関数呼び出しに使用するサービスバージョンまたはエイリアスを選択します。デフォルトのバージョンは [LATEST] です。
-
サービスバージョン
Function Compute のサービスレベルのバージョン管理により、サービスの 1 つ以上のバージョンを公開できます。バージョンを公開すると、Function Compute はサービスのスナップショットを作成します。このスナップショットには、サービス設定と、サービス内の関数のコードおよび設定が含まれますが、トリガーは除外されます。システムは、将来の使用のためにスナップショットにバージョン番号を自動的に割り当てます。バージョンの公開の詳細については、「バージョンの管理」をご参照ください。
-
バージョンエイリアス
Function Compute では、サービスバージョンのエイリアスを作成できます。エイリアスは特定のバージョンを指します。エイリアスを使用して、デプロイ、ロールバック、カナリアリリースなどの機能を実装できます。エイリアスは、サービスとバージョンに関連付けられている必要があります。エイリアスを使用してサービスまたは関数にアクセスすると、Function Compute はエイリアスが指すバージョンに解決します。呼び出し元は特定のバージョンを知る必要はありません。エイリアスの作成の詳細については、「エイリアスの管理」をご参照ください。
[関数の選択]
呼び出す関数を選択します。関数が利用できない場合は、関数を作成する必要があります。詳細については、「関数の管理」をご参照ください。
説明DataWorks はイベント関数の呼び出しのみをサポートしています。HTTP 関数を呼び出すことはできません。そのため、DataWorks で関数を定期的にスケジュールするには、イベントリクエストを処理するイベント関数を作成する必要があります。関数タイプの詳細については、「関数タイプの選択」をご参照ください。
この例では、
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 コンソールの関数詳細ページで [テスト機能]>[テストパラメーターの設定] を選択して表示される パネルの内容に対応します。
この例では、以下のパラメータを
para_service_01_by_time_triggers関数に渡します。${}構文は、値の割り当てが必要なbizdateという名前の変数を定義します。{ "payload": "payload1", "triggerTime": "${bizdate}", "triggerName": "triggerName1" } -
-
Function Compute ノードの開発が完了したら、そのスケジューリングプロパティを設定して、定期実行を有効にします。詳細については、「ノードのスケジューリングプロパティの設定」をご参照ください。
デプロイと管理
-
スケジューリングプロパティを設定した後、Function Compute ノードを本番環境にデプロイできます。詳細については、「ノードまたはワークフローのデプロイ」をご参照ください。
-
ノードがデプロイされると、スケジューリング設定に基づいて定期的に実行されます。 で、デプロイされたノードの表示と O&M 操作を実行できます。詳細については、「運用センターの使用を開始する」をご参照ください。