[Auth0] Parameter Storeに格納した情報を使用してDeploy CLI Toolを実行するNode.jsスクリプトを作ってみた

余談:Auth0の新しいロゴがリリースされました!
2021.07.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部の若槻です。

認証管理プラットフォーム[Auth0]では、テナントの管理をCLIで実施することができるAuth0 Deploy CLI Toolが公式提供されています。

このAuth0 Deploy CLI Toolでは、Deploy用M2Mアプリの接続情報やそのほか環境毎に異なる情報の指定や管理はローカルの環境変数やconfig.jsonにより行うことが可能ですが、これら情報を別途安全なパラメータストアで管理してDeploy毎にロードしたい場合があります。

今回は、AWS Systems Managerパラメータストアに格納した情報を使用してAuth0 Deploy CLI Toolを実行するNode.jsスクリプトを作ってみました。

やってみた

前提

未導入の場合はauth0-deploy-cliaws-sdkをインストールします。

% npm i -g auth0-deploy-cli
% npm i aws-sdk

Auth0 Deploy CLI Toolが使用するM2Mアプリの作成は完了しているものとします。まだの場合は以下を参考に作成します。

パラメータストアへの情報登録

AWS Systems Manager パラメータストアへDeploy用M2Mアプリの下記情報を登録します。

  • Domain
  • Client ID
  • Client Secret
% ENV=dev
% REGION=us-east-1
% DESCRIPTION=https://manage.auth0.com/dashboard/xxxxxxx/applications/xxxxxxxxxxxxxxxxxxxxx/settings

% AUTH0_DOMAIN=xxxxxxx.auth0.com
% aws ssm put-parameter \
  --name /${ENV}/auth0/domain \
  --type String  \
  --description ${DESCRIPTION} \
  --value ${AUTH0_DOMAIN} \
  --region ${REGION}

% CLIENT_ID=xxxxxxxxxxxxxxxxxxxxx
% aws ssm put-parameter \
  --name /${ENV}/auth0/deploy-app-client-id \
  --type String  \
  --description ${DESCRIPTION} \
  --value ${CLIENT_ID} \
  --region ${REGION}

% CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
% aws ssm put-parameter \
  --name /${ENV}/auth0/deploy-app-client-secret \
  --type String  \
  --description ${DESCRIPTION} \
  --value ${CLIENT_SECRET} \
  --region ${REGION}

Regionをus-east-1としているのは、AWS Serverless Architectureで構築したアプリケーションでAuth0の認証を利用する場合に、Auth0の情報がus-east-1で管理されていると何かと便利なためです。

Descriptionに指定しているのは、Deploy用M2Mアプリの詳細ページのURLです。登録されているのがどこから取得した値であるかを分かるようにしています。

パラメータストア名のパスを/${ENV}で切り、環境ごと(dev/stg/prd)の情報を登録できるようにしています。

デプロイスクリプト

deploy.js

const auth0 = require('auth0-deploy-cli')
const AWS = require('aws-sdk')

const main = async () => {

  AWS.config.update({ region: 'us-east-1' });
  const ssm = new AWS.SSM()

  // 環境名(dev/stg/prd)の指定
  const stageName = process.argv[2]

  var response = await ssm.getParameter({
    Name: `/${stageName}/auth0/domain`
  }).promise();
  const auth0Domain = response.Parameter.Value

  var response = await ssm.getParameter({
    Name: `/${stageName}/auth0/deploy-app-client-id`
  }).promise();
  const auth0DeployAppCliendId = response.Parameter.Value

  var response = await ssm.getParameter({
    Name: `/${stageName}/auth0/deploy-app-client-secret`
  }).promise();
  const auth0DeployAppClientSecret = response.Parameter.Value

  const config = {
    AUTH0_DOMAIN: auth0Domain,
    AUTH0_CLIENT_ID: auth0DeployAppCliendId,
    AUTH0_CLIENT_SECRET: auth0DeployAppClientSecret,
    AUTH0_ALLOW_DELETE: true
  };

  auth0.deploy({
    input_file: 'src/tenant.yaml',
    config,
    env: process.env,
  })
    .then(() => console.log('yey deploy was successful'))
    .catch(err => console.log(`Oh no, something went wrong. Error: ${err}`))

}

main()

スクリプトを実行してデプロイを行います。引数に環境名を指定します。今回はdevです。

% ENV=dev
% node deploy.js ${ENV}

スクリプトがエラーなく実行され、プロンプトにImport Successfulおよびyey deploy was successfulが最後に表示されればデプロイは成功です。

...
2021-07-02T14:18:58.264Z - info: Import Successful
yey deploy was successful

おわりに

AWS Systems Manager パラメータストアに格納した情報を使用してAuth0 Deploy CLI Toolを実行するNode.jsスクリプトを作ってみました。

余談ですがAuth0の新しいロゴがリリースされたのでアイキャッチに早速利用しました。シンプルで堅牢なイメージのデザインになっていますね。

参考

以上