定期実行でデータの同期を実現するスマートな方法 その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と組み合わせることでコードの記述も最小限に抑えられますので、ぜひうまく活用してみてください。