#はじめに
本稿はオープンストリーム Advent Calendar 2017の14日目の記事です。
Serverless Frameworkがいつの間にかWebtaskに対応していたので試してみました。執筆に際しての実行環境はVirtualBox上に構築したCentOS 7サーバですが、Node.js(npm)が使えれば環境的な差異はほとんどないと思われます。
#導入
Node.jsのインストール
sudo yum install -y nodejs
Serverless Frameworkのインストール
npm install -y serverless
webtask-nodejs
テンプレートを用いてサービスを作成
sls create --template webtasks-nodejs --path my-service
依存ライブラリのインストール
cd my-service
npm install
credentialの初期設定
sls config credentials --provider webtasks
メールアドレスまたは電話番号の入力を求められます。メールアドレスを入力するとWebtask Verification Codeという件名でメールが送信されるので、それに記載されたverification codeを入力します。(電話番号を入力した場合の挙動は未確認)
#デプロイと実行
ここまでの手順を行うとテンプレートより設定ファイル(serverless.yml
)とソースコード(handler.js
)が生成され、デプロイを行うことができるようになります。デプロイ方法は他のプロバイダと変わりはありません。
sls deploy
実行も同様です。テンプレートではmainというファンクションが定義されています。
sls invoke --function main
#設定
設定ファイルserverless.conf
に記述できるWebtaskのための設定は多くありません。
service.name
にはサービス名を指定します。生成された設定ファイルにはwebtasks-nodejs
と記載されています。sls create
時の--name
オプションを指定した場合はその値が入りそうな気がしましたがそんなことはありませんでした。この値はWebtaskのエンドポイントURLの一部となるため、公開するのであれば意識する必要があります。
provider.environment
に記述した変数群はWebtaskのSecretsとして登録されます。Lambdaの環境変数のようなものです。生成された設定ファイルではコメントアウトされているので、これを有効にすればSecretsに登録されます。
# you can define service wide environment variables here
# environment:
# variable1: value1
Lambdaのようにfunctionsに記述することでファンクションごとにSecretsが設定できるかと思いましたが、残念ながら無視されてしまいました。
#その他
以下はWebtask特有の挙動はないのでさらっとご紹介します。
##ステージ
--stage
オプションでステージを指定することができます。本番とステージングなど、複数の環境を構築する場合などに使用します。
##ログ
sls logs
でログ出力を捕捉することができます。別窓でinvoke
と併用するのが定番です。
##INFO
sls info
で諸々の情報を出力します。エンドポイントURLを知りたければこのコマンドを使用します。
##削除
sls remove
で関数(群)を削除します。
#余談
さて、いろいろ試しているうちにServerless Frameworkでデプロイした関数がwt-cliに現れないということに気付いてしまいました。CLIだけでなく、オンラインエディタにも居ません。同じメールアドレスでセットアップしたのに不可解な現象です。
結論から言うとプロファイルが分かれていて、ホスティング先が異なっていました。
$ cat ~/.webtask
{
"default": {
"url": "https://webtask.it.auth0.com",
"token": "(秘密)",
"container": "wt-00112233445566778899aabbccddeeff-0"
},
"serverless": {
"url": "https://sandbox.auth0-extend.com",
"token": "(秘密)",
"container": "wt-00112233445566778899aabbccddeeff-0"
}
}
つまりデフォルトとは別のserverless
プロファイルが作成されていて、Serverless Frameworkからはこのプロファイルが使用されていたということです。
CLIで関数一覧を取得する場合:
wt ls -p serverless
オンラインエディタを開く場合:
wt edit -p serverless
といった風に指定することで解決しました。
#所感
Webtaskは使い勝手の良いCLI(wt-cli)が提供されているため、AWS Lambdaほどの必須感はありませんが、やはりServerless Frameworkの恩恵はあると感じました。初期設定さえ済ませてしまえば他のプロバイダとの違いを意識せず画一的に操作できるのが最大の利点だと思います。