フロー構築のベストプラクティス

ワークフローの最良のパフォーマンスを保証するため、フローを構築するときはベストプラクティスに従ってください。

APIエンドポイントの効果的な使用

Workflows APIエンドポイントにより、外部クライアントがHTTP上でフローを起動できます。これは、組み込みのコネクタライブラリーにより開始されたもの以外にもフローを拡張できる、強力な機能です。ただし、これらのフローは正常に完了したことを確認するため注目が必要です。APIエンドポイントフローの呼び出しについてを参照してください。

APIエンドポイントのタイムアウト

APIエンドポイントを使用するときの主な問題は、Workflowsエンジンにレイテンシの保証がないことです。すなわち、フローはほとんどの場合は高速に実行されますが、フローの実行時間が10倍またはそれ以上に変化する可能性があるということです。

APIエンドポイントはクライアントへの接続を60秒でクローズするため、フローがそれより長い時間を要すると失敗になります。場合によっては、APIエンドポイントフローを起動するHTTPクライアントが、デフォルトAPIタイムアウトよりさらに短い時間でタイムアウトすることもあります。たとえば、Oktaインラインフックのデフォルトタイムアウトは3秒です。

フローの非同期構造化

APIエンドポイントフローを操作するときのベストプラクティスは、フローが非同期に処理される構造にすることです。つまり、呼び出し元(HTTPクライアント)が特定の応答を待つ必要がないように設計します。

これは、Oktaフックと統合するときには特に重要です。たとえば、同期登録またはインラインフックのインポートを使用して開始される多くのフローは、非同期のUser CreatedおよびUser Okta Profiel Updatedイベントカードを使用し、Oktaイベントでフローを開始する構造に変更できます。非同期パターンへの移動は、どちらのシステムでもさらに利点があります。一般的な例は、新しいユーザーの登録とインポートを第3のシステムで記録する場合です。この操作を即時に行うことが絶対に必要でない限り、非同期パターンを使用した方がはるかに良い操作性になります。

APIコネクタのクローズカードを行の先頭に配置

タイムアウトのリスクを管理する方法の1つは、HTTP接続を可能な限り早く閉じることです。ベストプラクティスの1つは、フローの最初のカードとしてAPIコネクタのクローズカードを追加することです。これにより、Workflowsエンジンは呼び出し元(HTTPクライアント)へのHTTP接続を即座に解放できます。その後で、Workflowsエンジンはフローの残りの部分を非同期で処理します。Closeを参照してください。

別のベストプラクティスは、Call Flow AsyncとFlow Control Return Rawカードを組み合わせて使用することです。これにより、処理の動作を非同期に開始でき、HTTP応答に対して粒度の細かいコントロールが可能になります。Call Flow AsyncReturn Rawを参照してください。

同期フローを単純で高速に維持

クライアントが同期応答を必要とする場合、不要なレイテンシやタイムアウトのリスクが生まれないよう、フローのアーキテクチャに十分な注意を払ってください。

  1. 外部ネットワーク呼び出しは避けます。呼び出しには、外部のサービスタスクでデータの処理に要する時間を含めなくても、数百ミリ秒のレイテンシが発生する可能性があります。外部呼び出しはコネクタカードとHTTPカードで発生します。外部ネットワーク呼び出しを行う必要がある場合、ヘルパーフローを作成し、Call Flow Asyncカードを使用して、呼び出しを同期フローの外側に移動します。

  2. 応答の準備が整ったら、ただちに返します。フローの他の部分が処理を続けている間に、API Connector Closeカードを使用して値を返すことができます。

Workflowsエンジンの有効な利用

Workflowsエンジンでは、少数の大きなアクションより、多数の小さなアクションの方が効率的に実行されます。フローが過剰な量のメモリを使用する場合、システムリソースを保護するため制限または停止されることがあります。フローのパフォーマンスを向上し、メモリ不足、調整、実行の遅延、その他の問題を回避するための重要な技法があります。

ヘルパーフローを使用して大きな処理ジョブを多数の小さなジョブに分割

複数の非同期フローを構築するとき、Workflowsエンジンはフローが可能な限り早く完了するよう、作業をインテリジェントにスケジュールします。親フローから行う非同期作業が大量に存在する場合、Call Flow Asyncカードを使用するのがベストプラクティスです。このカードは、親フローの処理を続けながら、入力に指定されたヘルパーフローをエンジンで同時に実行します。

大量のアイテムのリストがあり、リストの各アイテムを処理する場合、List For Each - Ignore Errorsカードを使用するのがベストプラクティスです。このカードはリストを受け付け、そのリストの各アイテムについてヘルパーフローを実行し、オプションとして並列実行も行えます。このカードは「Ignore Errors」のラベルが付いていますが、これは実際には親フローの観点からのものです。ヘルパーフロー内ではエラーを処理できます。For Each - Ignore Errorsを参照してください。

大きなセットへのフィルタリング

リストのアイテムの一部だけを処理する場合、ヘルパーフローを早期に停止する代わりに、List Filterカードを使用してフィルタリングを行うのがベストプラクティスです。Filterを参照してください。

単一の大きなフローで多くの処理を行うよりも、ヘルパーフローの方が好ましい方法ですが、ヘルパーフローの作成と実行がオーバーヘッドになることに留意してください。処理を必要としないジョブではヘルパーフローの作成を避けられれば、より効率的にフローを実行できます。

ヘルパーフローにリストを渡すことを避ける

アイテムのリストについて動作を行い、For Eachカードを使用するときのベストプラクティスは、ヘルパーフローが必要とするデータのみを、With the following valuesセクションで渡すことです。個別のアイテムを取り出すインターフェイスにより、繰り返し処理を行うリストから個別のデータアイテムを取り出して、渡すことができます。たとえば、ユーザーのリストについて動作を行う場合、ヘルパーフローにはユーザーオブジェクト全体ではなく、単一ユーザーの必要なフィールドのみを渡します。

可能な限りストリーミングアクションを使用

ストリーミングアクションは結果のリストを受け取り、各アイテムについてヘルパーフローを自動的に、非同期に実行します。この処理は最適化されているため、親フローはデータをページ単位で処理し、メモリ消費量を抑えてヘルパーフローを作成できます。

ストリーミングでない結果セットのオプションを使用すると、フローメモリの使用量が増えることに留意してください。Resuts SetフィールドにStream Matching Recordsオプションがあるカードは、ストリーミングアクションをサポートしています。Oktaコネクタ用のFind Users、List Users with Search、List Users Assigned to Applicationsアクションカードはリストを返し、ストリーミングをサポートしています。ヘルパーフローでのストリーム一致オプションの設定を参照してください。

関連項目

フローの構築について

アプリケーションの接続

ユース ケース チュートリアル