定期実行でデータの同期を実現するスマートな方法 その2〜AWS Lambda 編〜
警告
この記事では ver. 0.x.x の cli-kintone を使って説明しています。
ver.1.0.0 以降の cli-kintone の使い方は、次のページを参照してください。
kintone コマンドラインツール(cli-kintone)
はじめに
こんにちは、クローバの門屋です。
以前、次の記事で異なるドメイン間の kintone データを同期する方法について書かせていただきました。
定期実行でデータの同期を実現するスマートな方法 その1〜cli-kintone編〜
今回は、AWS Lambda を使ってサーバーレスで kintone の同期を実現する方法を紹介してみたいと思います。
なにがうれしいか
定期実行でデータの同期を実現するスマートな方法 その1〜cli-kintone編〜 では、常時稼働するサーバーで cron などのスケジューリングサービスを使用して定期実行する前提でした。
しかしわざわざそのために常時稼働のサーバーを用意するのが難しい場合もあると思います。
AWS Lambda を使えば、サーバーを用意しなくても定期実行ができます。
おさらい
同期するアプリは
定期実行でデータの同期を実現するスマートな方法 その1〜cli-kintone編〜 を参考に準備してください。
作成したスクリプトは以下の 2 つでした。
conv_csv.py
cli-kintone によって生成された CSV を加工するスクリプトです。
|
|
copy2kintone
全体の処理を行うシェルスクリプトです。
|
|
Lambda 上で動作するスクリプトの作成
今回はさらに、Lambda 上でこれらを動作させるためのスクリプトを作成します。
今回は Node.js でスクリプトを記述することにします。
index.js
|
|
ファイルを zip にまとめる
プログラムを Lambda 上で動かすには、ファイルを zip にまとめる必要があります。
以下にその手順を説明します。
Linux 版 cli-kintone をダウンロードする
AWS Lambda は Linux で動作しますので、 Github から最新の cli-kintone(linux-x64.zip)をダウンロードして解凍します。
ファイルをすべて同じフォルダーにコピーする
ファイル名 | 説明 |
---|---|
cli-kintone | kintone コマンドラインツール |
copy2kintone | 全体の処理を行うシェルスクリプト |
conv_csv.py | CSVを加工するスクリプト |
index.js | Lambdaのメイン関数 |
zip で圧縮する
ここで注意しないといけないのは、フォルダーを圧縮するのではなくファイル単位で圧縮しないといけないということです。
Mac や Linux、Windows の cygwin 環境などでは以下のコマンドで圧縮できます。
Windows のエクスプローラーの場合は、フォルダーではなくファイルを個別に複数選択して、右クリックで圧縮するとよいようです。
|
|
Lambda 関数を作成する
AWS の Web コンソールから、Lambda 関数を作成します。
Blueprint の選択
「Create a Lambda Function」ボタンを押して関数を作成します。
最初に使用するランタイム言語と Blueprint を選択します。
ランタイム言語は Node.js 4.3 とします。
Blueprint は何を選んでもかまいません。
環境設定
以下のように環境を設定します。
設定 | 説明 |
---|---|
Triggers | あとで設定するのでいったん空欄にしておきます |
Name | cron_clikintone |
Runtime | Node.js 4.3 |
Code entry type | Upload a .ZIP file |
Handler | index.handler |
Role | Lambda用のロールがなければ新規作成してください |
Memory | 128MB |
Timeout | 5 min |
Code entry type のところで Zip ファイルを選択すると、アップロードボタンが表示されますので、さきほど作成した zip ファイルをアップロードします。
設定が終わったら、「Create Function」をクリックして作成を完了します。
テスト
「Test」ボタンをクリックすると動作確認を行うことができます。
デフォルトの Hello World イベントで問題ありません。
実行が正常終了すると、「Execution result: succeeded」と表示されます。
自動実行の設定
「Triggers」タブから、「Add trigger」をクリックしてトリガーを追加します。
イベントソースとして、「CloudWatch Events - Schedule」を選択します。
設定 | 説明 |
---|---|
Rule name | ルールごとに一意の名前をつけます |
Schedule expression | cron(0 17 * * ? *) |
これで、毎日午前 2 時(日本時間)に、同期処理が実行されるようになります。
Schedule expression の記述方法については AWS Lambda デベロッパーガイド「 rate または cron を使用する式をスケジュールする 」を参考にしてください。
おわりに
いかがだったでしょうか。
ちょっと複雑だったかもしれませんが、サーバーを自前で用意しなくて済むのは大きな利点ではないでしょうか。
また、S3 など他の AWS サービスと組み合わせることで、たとえば S3 にデータがアップロードされたタイミングでそのデータを同期するといったようなことも可能です。
Lambda を使うと OS などの管理も不要なため、アプリケーションの運用だけに集中できます。
cli-kintone と組み合わせることでコードの記述も最小限に抑えられますので、ぜひうまく活用してみてください。