2023年版 アジア(Tokyo)に最適なAuth0リージョンを探してみる #Auth0

2023.10.24

現在Auth0のパブリックリージョンは 日本、アメリカ、イギリス、ヨーロッパ、オーストラリア の5つから選択できます。

東京にあるデータセンターからAuth0にアクセスする場合、どのリージョンを選べばいいのか、ログインにかかる時間をもとに考えていきたいと思います。

本ブログは2020年公開の下記ブログの最新版(2023年)となります。当時はアメリカ、ヨーロッパ、オーストラリアの3つのリージョンのみ選択可能でした。

結論

東京にあるデータセンターからは 地理的に近い日本リージョン を選択するのが良さそうです

やってみる

前提条件

前回記事と同じく以下の条件で計測します。

  • New Relic
    • Synthetic Monitoring
  • Auth0 Authentication API
    • Get token(POST /oauth/token)
    • Get a user(GET /users/{id})

トークンを取得しログインユーザーの情報を取得するスクリプトの総実行時間(Duration)をSyntheticsで取得し可視化します。TOKEN取得は Client Credentials Flow を利用しました。

Auth0の設定

  • 検証用の M2M Application を新規作成します

  • Auth0 Management API を選択しPermissionは All を選択(検証用)
  • 正確には read:usersread:current_userread:user_idp_tokens を選択するようにしてください 参考

  • 検証用ユーザーを作成し user_id を控える

この設定を 日本、アメリカ、イギリス、ヨーロッパ、オーストラリア の各テナントで行います。

New Relicの設定

  • Synthetics Monitorを作成します
  • Endpoint Availability を選択します

  • Configure monitor で Period を 1min を設定します
  • 間隔が短いほど料金がかかるので注意しましょう

  • Select locations は Tokyo, JP を選択します

  • Write Script は以下のように作成します
var assert = require('assert');

const domain = '' // M2MApp > Setting > Domain
const clientId = '' // M2MApp > Setting > Client ID
const clientSecret = '' // M2MApp > Setting > Client Secret
const audience = `https://${domain}/api/v2/`
const userId = '' // user_id

$http.post(`https://${domain}/oauth/token`,
    {
        json: {
            client_id: clientId,
            client_secret: clientSecret,
            audience: audience,
            grant_type: 'client_credentials'
        }
    },
    function (err, response, body) {
        assert.equal(response.statusCode, 200, 'Expected a 200 OK response');

        var token = body.access_token;
        console.log('Token:', token);

        $http.get(`https://${domain}/api/v2/users/${userId}`,
            {
                headers: {
                    'Authorization': 'Bearer ' + token
                }
            },
            function (err, response, body) {
                assert.equal(response.statusCode, 200, 'Expected a 200 OK response');

                console.log('Response:', body);
                // Auth0でUser登録したemailをアサーション
                assert.equal(body.email, 'xxxxxxxxx@xxxxxxxxx', 'Expected the correct email');
            }
        );
    }
);

Save Monitor を押して登録完了です。これを5つのリージョンごとに作成します。

可視化

  • Synthetics Monitor → Summary で様々なメトリクスを確認できます

日本リージョン

アメリカリージョン

この2つを比較すると日本リージョンの方が早くレスポンスしていることがわかります。

前回の記事に倣って Networking timings も比較してみましょう。

日本

アメリカ

オーストラリア

ヨーロッパ

イギリス

最後にデータエクスプローラーで、各リージョンのDurationを統合して見てみましょう。

特定の時間から、5分毎のduration(応答時間)平均をモニターごとに表示するクエリ

SELECT average(duration) FROM SyntheticCheck FACET monitorName TIMESERIES 5 minute since 1698059700

特定の時間から、5分毎のdurationの50パーセンタイルをモニターごとに表示するクエリ

SELECT percentile(duration,50) FROM SyntheticCheck FACET monitorName TIMESERIES 5 minute since 1698059700

特定の時間から、durationの最大、最小、平均,50パーセンタイルをモニターごとに表示するクエリ

SELECT max(duration),min(duration),average(duration),percentile(duration,50) FROM SyntheticCheck FACET monitorName  since 1698059700

3つ目のクエリでは日本リージョンの Max Duration が一番高くなっていますが、これは1つ目のクエリを見てみると、日本リージョンの Duration が跳ねてしまっている部分を示しています。この原因はわかりませんが、頻発はしていないので一時的な事象と考えていいと思います。
3つ目クエリに戻り Avg Duration を見てみると、日本リージョンが一番低くなっています。このことから 地理的に近い日本リージョンが一番早い と結論できると思います。

まとめ

日本から1分ごとにAuth0の各リージョンのエンドポイントにアクセスし、24時間の平均実行時間を見た限りでは 日本リージョン が一番早いと言えます。(次点でアメリカリージョン)

平均やパーセンタイルからみて、安定性においても日本リージョンが一番安定しているので、日本からAuth0を利用する際は、日本リージョンのテナントで構築するのが良いと思います。