LoginSignup
7
8

More than 5 years have passed since last update.

kintoneをAWS Lambdaでバッチ処理してみました(はじめてのキントーン)

Last updated at Posted at 2015-12-04

免責

本投稿は、個人の意見で、所属する企業や団体は関係ありません。

対象

はじめてkintone / AWS Lambdaを触る方に向けのレベルです。

前提 & はじめに

IoTハンズオンで使われたkintoneデータがあったので、集計処理をしてみるlambdaを作ってみます。私の前提ですが、
・初めてkintoneを触ります
・nodejs初めて書きます(Lambda用)
・Qiitaへの投稿も初めてです
という状態、かつ、残り時間1日しかないぎりぎりでやってました(汗

狙い

Lambdaのスケジュールイベントでバッチ処理ができるようになったので、データ統計を日/月で統計データが作れるかなといった感じです。
IoTのデータベースで正規化しにくいDBだったのでレポート作成してみようと思った次第。

IoTの話は、ToshiakiEnamiのこのあたりの記事をご参照ください。

構成

やっぱりサーバレスでやりたいですよね!
Lambdaのみです。
イメージ.JPG

元のデータ
多くのセンサー(ハンズオン受講者数分)とセンサータイプ(気温と湿度)、値、作成日時があります。

data-source.JPG

LambdaでkintoneAPI

一括のレコード取得方法、まずはまりました。 
テストで一件取得をやったがために、URIの違いに気が付かず。。

url: "https://" + YOURDOMAIN + ".cybozu.com/k/v1/record.json",
url: "https://" + YOURDOMAIN + ".cybozu.com/k/v1/records.json",

複数件取得の場合、record.json -> record[s].jsonに変わる。なまじ一件が動いてしまい、はげるほど悩む。。
queryパターンで日付などはkintoneのAPI側で関数が用意されています。便利。
kintone API getについてはこちら

今回の取得クエリ例

    request({
            method: 'GET',
            url: "https://" + YOURDOMAIN + ".cybozu.com/k/v1/records.json",
            headers: {
                    'X-Cybozu-Authorization': 'hoge',
                    'Authorization': 'Basic hoge',
                    'Content-Type': 'application/json'
            },
            json: {
                    'app': APP_ID,
                    'query': 'SensorType = ' KIND '
                    'fields': ['DeviceID', 'Value', 'Datetime']
            }

一括取得時には制限にお気を付けください。上記kintone apiより抜粋

一度に取得できるレコードは 500件までです。
リクエスト時にクエリで指定できる fields の添字は、0~99の範囲になります。
リクエスト時にボディで指定できる fields数は 1000個までです。

Lambda zip ケアレスミス

nodejsはzip圧縮でLambdaへ。ここでもZipの方法を間違えて悩む。
スクラッチからLambdaの利用でど忘れでした。

開発環境
kintone
├── main.js
└── node_modules
としてましたが、 kintoneの階層から zipしたために、module not found。ありがちですので、皆様気を付けてー
正しくは、 kintoneディレクトリで

zip -r kintone.zip main.js node_modules

としてzipファイル配下はフラットな構造である必要があります。

コード自体は、データソースに対して一括GET取得し、reportスペースにGETで登録とシンプルなコードです。
ここまででコードを書くのと、はまるのを含めて3時間ちょい位です。
非常に簡単です。

Lambdaスケジューラーの設定例

毎日時刻1:00(JST)に起動する例
cron(0 16 * * ? *)
schedule.JPG

振り返り

データ取得、投入は比較的容易にできました!
個人的には投入したデータをAPIでグラフ化、出力までできるようになると運用レポートが自動作成できていいのではないかなと思いました。
見落としていたらすみません、なのですが、グラフ作成、出力のAPIが欲しいですー

本当にやりたかったこと

時間があればデータは一度S3にputして、再度 Lambda起動後にreportスペースに入れたかったです。
意図としては、
・S3に残すことでバックアップ及びバルクでデータ投入が楽になる(はず)
・データ解析としてredshiftとかに用途を変更するとかフレキシビリティが上がる
かなと考えてました。

こんな感じです
image2.JPG

kintone要素少な目ですみませんー

7
8
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
7
8