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