mBaaSから定期的にデータを取得したり、逆にデータを載せたいといった要望を聞くことがあります。今のところ定期実行させるような機能はないのですが、Herokuを使うことで同様の操作を簡単に行えるようになります。
Herokuに配置するスクリプトについて
Herokuにデプロイするコードですが、次のようになります。今回は簡単なスクリプトなので index.js のみがソースファイルになります。
.gitignore index.js node_modules package.json Procfile
index.jsの内容は次のようになります。Herokuの環境設定を使っているので、アプリケーションキーとクライアントキーは隠蔽できます。
var NCMB = require('ncmb'); var application_key = process.env.APPLICATION_KEY; var client_key = process.env.CLIENT_KEY; var ncmb = new NCMB(application_key, client_key); var Heroku = ncmb.DataStore('Heroku'); var heroku = new Heroku; heroku.set('text', 'Hello, from heroku.'); heroku.save() .then(function(o) { console.log(o) });
Procfileは次のようになります。
cron: node index.js
今回はJavaScript SDKを使っていますので、npmを使ってインストールします。
npm init npm install ncmb --save
.gitignoreは次のようになります。
node_modules/
これで準備完了です。
Herokuにデプロイする
Herokuへのデプロイはソースコードをプッシュするだけです。
git push origin master
その後でアプリケーションキーとクライアントキーを環境変数として設定します。
heroku config:set APPLICATION_KEY=d2...c0 heroku config:set CLIENT_KEY=f9...cc
次にスケジューラーをインストールします。そして、そのままスケジューラーの設定画面を開きます。
heroku addons:create scheduler:standard heroku addons:open scheduler
設定する内容は次の通りで、 node index.js
を10分ごとに実行とします。
最後にWeb側のプロセスを消します。Cronだけにすれば課金もされないので安心です(実行時間が長いと課金されます)。
heroku ps:scale web=0
管理画面で確認する
mBaaSの管理画面に入るとデータストアにデータが追加されているのが分かります。
データの作成時間を見ると分かりますが、10分ごとの実行と指定してもかなりばらつきがあります。正確に10分単位という訳にはいかないので注意が必要です。ただ、1日1回のバッチ処理などであれば、Herokuを使ってデータを取得して外部ストレージに保存するといった処理もできるでしょう。
ぜひお試しください!