今回のブログでは、指定された日時が来たら自動でユーザーが作成、削除されるフローの作成を解説します。多くの企業では、月初や4月1日に多くの新入社員を迎えたり、契約期間が決められている契約社員の受け入れ対応のために、予めユーザー情報を準備し、業務の開始や終了に合わせてアカウントを確実に作製・削除する必要があるかと思います。始業日以前にアカウントがあるのも問題ですし、始業日にないのも業務の支障となります。また、契約社員の場合は、契約終了日に確実にアカウントが削除(もしくは停止)されている必要があります。 Workflowsを用いることで、表形式のデータから日時指定でアカウントの作製・削除の処理を行うことができます。 本ブログでは、日付を指定したユーザーの自動作成と削除処理の実装概要を解説したいと思います。実利用の際はエラーハンドリングなどが必要になりますが、ここでは本質的な処理に絞って実装を解説します。 フローの実装概要 ユーザー情報はWorkflowsのTablesを用いて定義します。ユーザー作成(入社用)とユーザー削除(退社用)でそれぞれ1組のメインフローとヘルパーフローが、テーブルから日付の条件を満たすユーザー情報を取り込み、プロビジョニング処理を行います。 1. ユーザー情報テーブル 各カラムと用途は下記の表の通りです。Start Date, End Dateをユーザー作製メインフロー、ユーザー削除メインフローが参照し、アカウントの作成、削除を行います。 カラム名 フィールドタイプ 用途 rowId(auto) - Workflowsが自動挿入する行番号(Row ID) updated(auto) - Workflowsが自動挿入する更新日時 Start Date Date ユーザーを作成する日(例 入社日) End Date Date ユーザーを削除する日(例 退社日) Created Date Date ユーザーの作成日。ユーザー作成処理時に挿入します。 Removed Date Date ユーザーの削除日。ユーザー削除処理時に挿入します。 User Name, Email, First Name, Last Name Text Oktaユーザーの必須4属性 User ID Text 内部ユーザーID。ユーザー作成処理後に挿入します。 ユーザー情報として入力が必要なのは、Start Date、End Date、ユーザーの必須属性(User Name, Email, First Name, Last Name)です。この実装例では、必要最低限の属性しか扱ってませんが、実際の運用で必要となる他の属性も追加可能です。 Start DateとEnd Dateはmm/dd/yy形式で入力できますが、UTCで12 amに設定されます。そこで、日本時間に合うようにカード(Workflowsの処理単位)で時差の補正を行います。 2. Oktaへの接続(Connection) Oktaのユーザーに対する処理を行うため、WorkflowsがOkta本体のAPIをコールできるよう接続(Connection)を予め作成します。WorkflowsからOkta APIのアクセスにはOAuthを使います。Okta側のOAuthアプリケーションとして、Applicaions配下にある”Okta Workflows OAuth”が予め用意されています。このアプリケーションに登録されているClient IDとSecretによりWorkflowsから接続を行います。なお、”Okta Workflows”アプリは、Workflowsの管理コンソールがOktaと連携するためのアプリケーションです。 3. ユーザー作成用メインフロー ユーザー作成フローは、5つのカード(Workflowsの処理単位)から構成しています。左から順番に解説します。 スケジュールによるフローの定期実行 フローを指定した周期で自動起動することができます。日に一度、週に一度など指定した時刻に定期的に自動起動できます。ユーザー情報の投入の周期に合わせて本フローの実行スケジュールを設定が可能です。 Scheduled Flowの設定の仕方や基本的なフローの構成の仕方は、はじめてのOkta Workflowsシリーズ 第2回 Hello Workflows編に解説があるので是非ご参照ください。 利用カード: Okta AppsのSchedule (新規にフローを作成し、Add Eventで Okta AppsのScheduleを選択) 現在の時刻の取得 現在の時刻を取得し、プロビジョニングの日時を迎えたデータを取得します。 利用カード: Date&TimeのNow UTCへの時差変換 テーブルにmm/dd/yy形式で入力したStart Dateは、特に修正しなければUTCの12 amでの設定となるため、日本時間と時差が生じます。そこで、現在時刻(UTC)に9時間を足して補正します。 利用カード: Date&TimeのAdd ユーザー情報テーブルの検索 Start Dateが4で時差補正した現在時刻以降のもの、すなわちプロビジョニングを行うべきデータを検索し取得します。 テーブルの検索には、Where Expressionで条件を指定することができます。条件として、Start Dateが3で生成した日時(現在日時)がStart Date以降になっていることと、Created Dateが01/01/00以前になっているかを条件としています。2つ目の条件は、一度プロビジョニング処理した行を除外するために、Created Dateに日時が入っている行を除外するために設定しています。(日時が空欄だと、”大きさ”としては最小になります。) 利用カード: TablesのSearch Row 各行の処理 テーブルの検索から得られた各行ごとにプロビジョニング処理を行う必要があります。このようなケースで、Workflowsではヘルパーフロー(Helper Flow)と呼ばれる”子フロー”を呼び出し、各行のデータを順次処理することができます。プログラミング言語に例えると、for each文で関数を呼び出すイメージですが、Workflowsでも正に”For Each"というカードが用意されています。ヘルパーフローを呼び出すには、予めヘルパーフローを作成しておく必要があるため、親フローの作成を一旦中断し、(3)で解説するユーザー作成処理のためのヘルパーフローを作成します。 ”For Each”カードの使い方を少し解説します。まず、インプットとして、テーブルを検索して得られる行データ”Rows"を割り当てます。”Helper Flow"には、(4)で作成するヘルパーフローを選択します。ヘルパーフローを選択すると、ヘルパーフローで定義される変数(引数)の一覧が表示されるので、Rowsに含まれるテーブルのカラム名を選択して割り当てます。これにより各行のデータをヘルパーフローに渡します。 利用カード: ListのFor Each 4. ユーザー作成処理(Helper Flow) ユーザー作成ヘルパー・フローは、3つのカードから構成しています。 親フローからの呼び出し用カード 親フローから受け取る変数を定義(username, firstname, lastname, email, rowid)します。rowidはテーブルに行が追加された時に自動挿入される”行番号”を意味するIDです。該当する行のデータを更新するために必要となります。親フローがヘルパーフローを呼び出す時、ここで定義した変数を割当て先の変数としてマッピングします。 利用カード: Okta AppsのHelper Flow。(新規にフローを作成し、Add Eventで Okta.