LoginSignup
14
10

More than 5 years have passed since last update.

Webhook as a ServiceでIoTのserverlessなバックエンド考える - Part 2: Webtask.ioのHello world

Last updated at Posted at 2015-12-25

このシリーズ

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に記述されています。アカウントごとに専用のコンテナが作成されるようです。

~/.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コマンドはデフォルトで~/.webtaskdefaultプロファイルの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の実行だけに制限されます。

WT3.js
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"

参考

14
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
10