API操作用のトークンIDを変数に入れてみよう


mex_icon

みなさんこんにちは。メックスです。夏が目の前ですね。夏と言えば、私は夏みかんは冬に収穫し、春に食べごろを迎える食べ物なのに、なんで夏みかんなの?という疑問を子供の頃親にぶつけ困らせた事があります。なんて可愛くない子供なんでしょう。メガトンパンチ関係なくてすみません。

さて、今回からAPI操作に関する記事を何本か書かせて頂きます。

GMOアプリクラウドのAPIを叩いてみた
GMOアプリクラウドのAPIを使ってみよう(認証編)
GMOアプリクラウドのAPIで仮想サーバー(ローカルディスクプラン)を作ってみる
GMOアプリクラウドのAPIで仮想サーバー(外部ディスクプラン)を作ってみる

APIって何の為に存在するの?という疑問の答えとしては、コマンドラインで操作出来るようにする為です。

コマンドライン操作の本質は、作業効率の向上にあると言っても過言ではありません。学習コストが発生する為、操作に慣れるまでは多少面倒かとは思いますが、一旦慣れてしまうと後戻り出来ない程の作業効率の向上を実現出来ます。

作業効率が向上する理由は色々あります。(wikipediaの記事が分かりやすいので、興味のある方はこちらからどうぞ)その中でも、自動化しやすい事が一番に上げられます。

現在Linux環境で最もメジャーな自動化の手段は、シェルスクリプトでしょう。今回は、シェルスクリプト上で記述する為に、トークン情報を変数に入れる方法を共有させて頂きたいと思います。

GMOアプリクラウドをAPIで操作する為には、認証を行う必要があります。こちらのリファレンスにある通り、認証情報は24時間で失効します。自動化スクリプトを記述する際、毎回手動で認証を行いトークン情報を目視で確認してスクリプトに入力する作業をしていたら、それは自動化とは呼びにくいものとなります。そこで、毎回手動で認証→確認→記述を行わなくても良くなるような記述の仕方を紹介致します。

今回の記述する環境は以下の通りです。尚、本記事の手順は一例であり、動作を保障するものではございませんので、お客様環境におきましては導入前に検証の上、ご利用下さい。


仮想サーバータイプ LS-0102

OS CentOS 6.7

※今回、JSON形式のデータを見やすく表示したり、データを抽出したりするコマンド jq を使用致します。標準パッケージには入っておりませんので、epelレポジトリのインストールを行い、 yum install 等でご準備をお願い致します。

yum install epel-release -y
yum install jq -y

以下のようなスクリプトファイルを作成します。

#!/bin/sh

#アカウント情報
ACCOUNT='アカウント情報'
PASSWORD='パスワード情報'
TENANTID='テナントID'

#token.JSONファイル作成
curl -i '認証エンドポイント/tokens' -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' -d "{\"auth\":{\"passwordCredentials\":{\"username\":\"$ACCOUNT\",\"password\":\"$PASSWORD\"},\"tenantId\":\"$TENANTID\"}}" > token.JSON
#token.JSONファイルからtokenIDを切り出して、変数に入れる
USERTOKEN=`sed -e '1,7d' token.JSON | jq -r '.access.token.id'`

上から順に解説します。

#!/bin/sh

シバンです。シバンの詳細はこちら(wikipedia)をご参照下さい。

#アカウント情報
ACCOUNT='アカウント情報'
PASSWORD='パスワード情報'
TENANTID='テナントID'

アカウント情報、パスワード情報、テナントIDをそれぞれACCOUNT 、PASSWORD 、 TENANTID変数に入れます。変数名は任意です。アカウント情報、パスワード情報はGMOアプリクラウドにご契約頂きました際にお渡し致している情報です。テナントIDは、GMOアプリクラウドコントロールパネルのAPI情報の項目で確認出来ます。、お使いの環境に併せて、情報を入力して下さい。

#Token.JSONファイル作成
curl -i '認証エンドポイント/tokens' -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' -d "{\"auth\":{\"passwordCredentials\":{\"username\":\"$ACCOUNT\",\"password\":\"$PASSWORD\"},\"tenantId\":\"$TENANTID\"}}" > token.JSON

認証情報の発行です。認証エンドポイントの部分は、お使いの環境に併せて情報を入力して下さい。ここでアカウント情報で入力した変数を使います。認証情報はJSON形式で出力されますので、ファイルに保存します。token.JSONのファイル名は任意です。分かりやすい名称で入力して下さい。

#token.JSONからtokenIDを切り出して、変数に入れる
USERTOKEN=`sed -e '1,7d' token.JSON | jq -r '.access.token.id'`

トークン情報をUSERTOKEN変数に入れます。ここが、今回の記事の肝ですね。細かく説明していきます。

sed -e '1,7d' token.JSON

sed コマンドはテキスト変換などのデータ処理を行う為に使用されるプログラムです。何故sedコマンドが必要なのかというと、次に使用するjqコマンドは、JSON形式以外の情報があるとエラーが出る為、整形する必要がある為です。

認証情報を保存したtoken.JSONcat等で確認してみると、1行目から7行目までがJSON形式外の情報である事が分かります。

上記通り -e の引数を渡し、表示しない行番号(‘1,7d’ )を指定すると、token.JSONファイルの1行目から7行目までの情報を削除する事が出来ます(sedコマンドは対象ファイルの中身の書き換えは行いません)。

 jq -r '.access.token.id'

jqコマンドの出番です。JSON形式の情報から必要な値を呼び出す事が出来ます。JSON形式の詳細は他のサイトで沢山紹介されていますので割愛しますが、ここでは、「 “情報名” : “値” のように情報名と値が対になって保存されている形式 」ぐらいの理解で良いでしょう。

jqコマンドで情報名を指定すると、対になる値を抽出する事が出来ます。今回欲しいのは、.access.token.idの値なので、その値を抽出します。

jqコマンドの出力は、値をそのまま出力してくれる為、「」(ダブルクオーテーション)も一緒に表示します。今回欲しいTokenIDの情報は、「”」が必要ありません。-r の引数を与えると、「」を取った状態で、値を出力してくれます。

こうして、欲しかった情報=USERTOKENを抽出する事が出来ましたので、変数に入れる事が可能になりました。

 

以上となります。今回紹介しましたスクリプトは、シェルスクリプトの先頭に記述する事で、API操作を格段に行いやすくなります。スクリプト作成の際は、是非ご活用下さい。

今回の内容は一見地味なのですが、OpenStackのAPI操作を自動化するに当たって最初の入り口となりますので、しっかり抑えておかなければと思い、記事にさせて頂きました。

カテゴリー: GMOアプリクラウド サービス・機能   タグ:   この投稿のパーマリンク

コメントは受け付けていません。