カテゴリー内の他の記事

定期実行でデータの同期を実現するスマートな方法 その2〜AWS Lambda編〜

フォローする

(著者:クローバ株式会社 門屋 亮

はじめに

こんにちは。クローバの門屋です。以前、定期実行でデータの同期を実現するスマートな方法 その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
files1.png

Lambda関数を作成する

AWSのWebコンソールから、Lambda関数を作成します。

Blueprintの選択

「Create a Lambda Function」ボタンを押して関数を作成します。最初に使用するランタイム言語とBlueprintを選択します。ランタイム言語はNode.js 4.3とします。Blueprintは何を選んでも構いません。

lambda_blueprint.png

環境設定

以下のように環境設定を行います。

設定 説明
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ファイルをアップロードします。

lambda_settings.png

設定が終わったら、「Create Function」をクリックして作成を完了します。

テスト

「Test」ボタンをクリックすると動作確認を行うことができます。デフォルトのHello Worldイベントで問題ありません。実行が正常終了すると、「Execution result: succeeded」と表示されます。 
lambda_test.png

自動実行の設定

「Triggers」タブから、「Add trigger」をクリックしてトリガーを追加します。イベントソースとして、「CloudWatch Events - Schedule」を選択します。
設定 説明
Rule name ルールごとに一意の名前をつけます
Schedule expression cron(0 17 * * ? *)

これで、毎日午前2時(日本時間)に、同期処理が実行されるようになります。

Schedule expressionの記述方法についてはこちらを参考にしてください。

おわりに

いかがだったでしょうか。ちょっと複雑だったかもしれませんが、サーバを自前で用意しなくて済むのは大きな利点ではないでしょうか。また、S3など他のAWS サービスと組み合わせることで、例えばS3にデータがアップロードされたタイミングでそのデータを同期するといったようなことも可能です。Lambdaを使うとOSなどの管理も不要なため、アプリケーションの運用だけに集中することができます。cli-kintoneと組み合わせることでコードの記述も最小限に抑えられますので、ぜひうまく活用してみてください。

記事に関するフィードバック

直接的に記事と関連がないご質問はcybozu developer コミュニティをご活用ください。

ログインしてコメントを残してください。
Powered by Zendesk