移行を計画する
デプロイ済みのActionsは有効なHooksの後に実行されるため、Hooksを1つずつAuth0 Dashboardで変換することも、 を使用して一括で変換することもできます。 コードを変換した後、Actionを有効化し、Hookを無効化する必要があります。Actionの有効化とHookの無効化はすぐ続けて実行できますが、順序によっては、短時間だけ両方が実行されたり、どちらも実行されなかったりする可能性があります。 そのため、パイプラインは段階的に移行することをお勧めします。Hooksのコードを部分ごとにActionのコードへ変換し、ステージング環境でテストしてから、1つずつ本番環境に反映してください。有効なHooksはデプロイ済みのActionsより先に実行されるため、Actionsで別のロジックを構築・テストしている間も、一部のロジックはHooksに残しておけます。移行を計画する際のヒント
- コストの高い処理や一度しか実行してはならない処理が重複しないよう、フラグを使用してください。
- 変更は、影響とトラフィックが最も少ない時間帯に実施してください。
- Auth0 Deploy CLI を使用して、移行全体を一括または段階的にスクリプト化し、テストして、すばやく実装することを検討してください。
制限事項を理解する
Actions は Hooks でできることの大半に対応していますが、移行を始める前に、いくつかの制限事項を把握しておく必要があります。 (注意: 移行中は Hooks と Actions の両方を同時に実行できます。)- Actions では、 や API レスポンスのようなデータを、実行間で保持することはできません。
- Actions では、Hooks のように Management API 用のアクセストークン や グローバル
auth0オブジェクトへのアクセス は利用できません。
コードを変換する
Hook を Action に変換するには、Hook 固有のコードを Actions のコードに置き換える必要があります。このセクションでは、動作中の Hook を対応する Action に変換するために必要な作業について説明します。コード変換時のヒント
- 基本的には、Hooks 関数に渡されるオブジェクトの読み取り専用プロパティに相当するものを、Actions の
eventオブジェクトで探してください。 - コードの作成には Auth0 Dashboard の Actions Code Editor を使用してください。エラーのハイライト表示や自動補完候補の提示に役立ちます。
- 本番環境に移行する前に、新しい Actions を十分にテストし、ステージング環境またはテスト環境 で入念に確認してください。
Hook のコードを新しい Action にコピーする
Hook のコードを新しい Action にコピーし、Auth0 Dashboard の Actions Code Editor を使用することをお勧めします。これにより、コードに残っている問題を特定しやすくなります。
- 本番テナントにログインし、変換したい Hook からコードをコピーします。
- 非本番テナントに切り替え、Auth0 Dashboard > Actions > Library に移動します。
-
Build Custom を選択し、次の操作を行います。
- 変換する Hook の名前と一致する Action の Name を入力します。
-
Trigger で、適切なトリガーを選択します**:**
- Runtime で Node 18 を選択します。
- Create を選択します。
- Actions Code Editor のコードブロックで、変換したい Hook のコードを export された関数の下に貼り付けます。
-
コードを関数内に移しながら、この記事の残りの部分で説明されている変更を加えます。
また、新しい Actions のトリガーに関連付けられた
eventオブジェクトについても確認してください。このガイドの後半にある データへのアクセス方法を変更する セクションに進むと、関連ドキュメントへのリンクが表示されます。
関数宣言を変更する
フックの関数はデフォルトエクスポートでエクスポートされますが、Actions の関数は名前付きエクスポートを使用します。変換する Hook の種類に応じて、使用する名前付きエクスポートも変わります。対応は次のとおりです。
変更前
依存関係を移行する
フックとActionsでは、依存関係はほぼ同じ方法で扱います。どちらも、依存関係をUIまたはManagement APIから個別に追加し、コード内で使用します。また、どちらでもnpm Registryで利用可能な任意のパッケージをrequireできます。
npmモジュールが最新バージョンでない場合は、今がアップデートの絶好の機会です。- Hookコード内の
require文を検索します。 - バージョン番号を削除し、その番号はメモしておきます。
- 依存関係がNodeJSのコアモジュールでない場合は、Write Your First Action の「Add a Dependency」セクションの手順に従って追加します。コアモジュールであれば、追加する必要はありません。
- 見つかった
require文をfunction宣言の外に移動します。
シークレットを変換する
Hooks と Actions では、シークレットはほぼ同じように扱われます。どちらも、Secrets は UI または Management API を使って Hook/Action ごとに追加し、コード内で利用します。 Hooks のシークレットを Actions に変換するには、次の手順を実行します。- 作業中の Action に必要な値を控えておきます。
- Action 内からアクセスする値ごとに Secret を追加します。追加方法については、Write Your First Action の Add a Secret セクションを参照してください。
- コードを変換します。
データへのアクセス方法を変更する
フックでは、ユーザー、クライアント、リクエスト、そのほかのコンテキストデータに関する情報は、フック関数に渡される複数の引数に格納されています。Actions では、これらのデータは再構成され、event オブジェクトに移されています。多くのプロパティはそのまま移行されていますが、わかりやすくするために統合されたものもあります。
変換するフックの種類によって、event オブジェクトの内容は異なります。
- Client Credentials Exchange - Actions イベントオブジェクト
- Post-Change Password - Actions イベントオブジェクト
- Post-User Registration - Actions イベントオブジェクト
- Pre-User Registration - Actions イベントオブジェクト
- Send Phone Message - Actions イベントオブジェクト
フックの
context オブジェクトとは異なり、event オブジェクトのプロパティに保存または変更されたデータは、後続の Actions には引き継がれません。フックでこれらのプロパティにデータを設定してコア機能をトリガーしている場合は、Actions 間でデータを保持するために、Machine to Machine および Pre User Registration の Actions Flows で利用できる api インターフェースを使用する必要があります。コールバックを変換する
Hook での処理が完了したら、実行を完了するためにcallback() 関数を呼び出す必要があります。一方、Actions ではコールバックの仕組みを使用しないため、Actions 関数から callback() の呼び出しをすべて削除する必要があります。
以前、Client Credentials Exchange または Pre User Registration Hook で、リクエストを失敗させたりユーザーを更新したりするために callback() 関数を使用していた場合でも、Actions では新しい api インターフェースを通じて引き続きこれを行えます。