このシリーズ
- Webhook as a ServiceでIoTのserverlessなバックエンド考える - Part 1: リソース
- Webhook as a ServiceでIoTのserverlessなバックエンド考える - Part 2: Webtask.ioのHello world
Webtask.io
Webtask.ioを使うとserverlessにNode.jsで書いたスニペットコードをMicroServiceとして簡単に公開することができます。
Webtaskの仕組みはIdentity-Management-as-a-Service (IdMaaS)として有名なAuth0のバックエンドとして採用されているようです。CoreOS, Docker, etcd, fleetのアーキテクチャの上で動いています。マルチテナントなMicroServicesのためのプラットフォームとしてとても参考になります。
参考
Webtask CLI
Webtask.ioのインタフェースはWebtask CLIを使います。npmのパッケージとしてwt-cli公開されています。CLIはグローバルにインストールするとwt
コマンドが使えるようになります。
$ sudo npm install wt-cli -g
メールアドレスか携帯の番号を入力してwt
コマンドの初期設定をします。指定したメールアドレスにVerification codeが届きます。
$ wt init xxx@gmail.com
Please enter the verification code we sent to xxx@gmail.com below.
Verification code:
メールで届いたコードを入力するとwt
コマンドの初期処理が終了します。
Welcome to webtasks! Create your first one as follows:
wt
コマンドで使う認証情報は~/.webtask
に記述されています。アカウントごとに専用のコンテナが作成されるようです。
{
"default": {
"url": "https://webtask.it.auth0.com",
"container": "{アカウントのコンテナ名}",
"token": "{アカウントのwebtask token}"
}
}
参考
webtaskを作成して実行する
Webtask CLIのページではアカウントを作成してwebtaskを実行するまで30秒でできると書いてあります。実際には慣れないともう少し時間がかかりますが簡単にMicroServiceを作成して実行できます。
webtaskをNode.jsの関数として作成しますwt init
コマンドの最後に作成方法も表示されるのでそのままコピーして実行します。wt create
コマンドには
$ echo "module.exports = function (cb) { cb(null, 'Hello'); }" > hello.js
$ wt create hello.js
こちらもCLIのコマンドを実行すると次の動作を教えてくれます。
Run your new webtask like so:
$ curl https://webtask.it.auth0.com/api/run/{アカウントのコンテナ名}/hello?webtask_no_cache=1
curlコマンドから作成したwebtaskのURLを実行すると"Hello"とレスポンスがあります。デフォルトではどの環境からもこのURLを実行することができます。
"Hello"
Webtask tokenにコードのurlを組み込んで実行する
webtask clusterのAPIを実行する場合は、必ずHTTPヘッダのAuthorization: Bearer
またはクエリ文字列にkey={webtask token}
としてwebtask tokenの指定が必要です。wt
コマンドはデフォルトで~/.webtask
のdefault
プロファイルのtoken
フィールドを使います。
url
webtask tokenはJWT (JSON Web Token)のクレームとして権限や制約を定義します。セキュアな情報をトークン化して使うことができます。
url
プロパティは特定のURLで指定されたwebtask codeのみ実行可能なwebtask tokenを発行するときに使います。webtask clusterはこのURLからwebtask codeをHTTP GETして実行します。この新しいwebtask tokenを使うアプリやユーザーに対して制限をかけることができます。
新しいwebtask tokenは以下のエンドポイントにHTTP POSTして発行します。
HTTPS POST /api/tokens/issue
Content-Type: application/json
curlコマンドからリクエストの認証用にwebtask token (A1)を使い、webtask codeの実行に制限をかけた新しいwebtask token (A2)を発行します。発行したwebtask tokenはRESTRICTED_TOKEN
環境変数に保存します。
export RESTRICTED_TOKEN=$(curl -s https://webtask.it.auth0.com/api/tokens/issue -H "Authorization: Bearer $RESTRICTED_TOKEN" -H "Content-Type: application/json" --data-binary '{"url":"http://bit.ly/18L4CmA"}')
リクエストはJSONで形式です。url
プロパティのhttp://bit.ly/18L4CmA
は、WT3.jsに展開されます。発行した新しいwebtask tokenのRESTRICTED_TOKEN
の権限は、以下のwebtask codeの実行だけに制限されます。
return function (context, cb) {
cb(null, "Hello, " + context.data.name);
}
すでに必要な情報はwebtask tokenに組み込まれているのでRESTRICTED_TOKEN
を使う場合はownerの情報や実行するwebtask codeの指定は不要です。
$ echo $RESTRICTED_TOKEN
eyJhxxx
curlコマンドに認証情報としてRESTRICTED_TOKENをクエリ文字列のkey={webtask token}
に追加します。
$ curl -X POST \
"https://webtask.it.auth0.com/api/run/{アカウントのコンテナ名}?name=Masato&key=eyJhxxx"
以下のレスポンスが返ります。
"Hello, Masato"
参考