定期実行でデータの同期を実現するスマートな方法 その2〜AWS Lambda編〜
はじめに
こんにちは、クローバの門屋です。
以前、次の記事で異なるドメイン間のkintoneデータを同期する方法について書かせていただきました。
定期実行でデータの同期を実現するスマートな方法 その1〜cli-kintone編〜
今回は、AWS Lambdaを使ってサーバーレスでkintoneの同期を実現する方法を紹介してみたいと思います。
なにがうれしいか
定期実行でデータの同期を実現するスマートな方法 その1〜cli-kintone編〜では、常時稼働するサーバーでcronなどのスケジューリングサービスを使用して定期実行する前提でした。
しかしわざわざそのために常時稼働のサーバーを用意するのが難しい場合もあると思います。
AWS Lambdaを使えば、サーバーを用意しなくても定期実行ができます。
アプリの準備
同期するアプリは 定期実行でデータの同期を実現するスマートな方法 その1〜cli-kintone編〜を参考に準備してください。
copy2kintone
スクリプトは前回の記事で紹介したcopy2kintoneを、Lambdaで動かすために少し修正します。
レコードのコピーと更新の処理を行うシェルスクリプトです。
ファイル名はcopy2kintone
とし、メソッド名はcopy
とします。
|
|
ファイルをzipにまとめる
プログラムをLambda上で動かすには、必要なファイルをzipにまとめる必要があります。
以下にその手順を説明します。
Linux版cli-kintoneをダウンロードする
AWS LambdaはLinuxで動作しますので、 Github から最新のcli-kintone(linux-x64.zip)をダウンロードして解凍します。
bootstrapファイルをダウンロードする
AWS Lambdaでシェルスクリプトを実行するためのbootstrapファイルを準備します。
以下のリンクをクリックしてbootstrapファイルをダウンロードしてください。
Windowsの場合は、以下のリンクを右クリックして「名前をつけて保存」を選択し、拡張子をつけずに「bootstrap」というファイル名で保存してください。
ダウンロード先
bootstrapファイルを自作したり上記のbootstrapファイルを編集をしたりする場合、bootstrapファイルにはchmod +x
を実行して実行権限を付与する必要があります。
Windowsの場合は、Linux環境を用意して実行権限を付与してください。
ファイルをすべて同じフォルダーにコピーする
ファイル名 | 説明 |
---|---|
cli-kintone | kintoneコマンドラインツール |
bootstrap | AWS Lambdaでシェルスクリプトを実行するためのファイル |
copy2kintone | 全体の処理を行うシェルスクリプト |
zipで圧縮する
ここで注意しないといけないのは、フォルダーを圧縮するのではなくファイル単位で圧縮しないといけないということです。
MacやLinux、Windowsのcygwin環境などでは以下のコマンドで圧縮できます。
Windowsのエクスプローラーの場合は、フォルダーではなくファイルを個別に複数選択して、右クリックで圧縮するとよいようです。
|
|
Lambda関数を作成する
-
AWSマネジメントコンソールからLambda関数を作成します。
-
次の図のように、関数名を「cron_clikintone」とし、ランタイムを「Amazon Linux 2023」に設定します。
-
アップロード元をクリックして、「.zipファイル」を選択します。
-
作成した「kintone-lambda.zip」をアップロードします。
-
そのまま画面内のランタイム設定の編集ボタンをクリックします。
-
ハンドラーを「copy2kintone.copy」のように、
ファイル名.メソッド名
とします。
-
設定タブから一般設定を選択します。
-
メモリを「256MB」、タイムアウトを「30秒」に設定します。
テスト
テストタブを選択し、「テスト」ボタンをクリックします。
実行が正常終了すると、「実行中の関数:成功」と表示されます。
自動実行の設定
「設定」タブから「トリガー」を選択し、「トリガーを追加」をクリックします。
次の図や表のように設定します。
設定 | 説明 |
---|---|
イベントソース | EventBridge(CloudWatch Events) |
ルール | 新規ルールを作成 |
ルール名 | ルールごとに一意の名前をつけます |
ルールタイプ | スケジュール式 |
スケジュール式 | cron(0 17 * * ? *) |
これで、毎日午前2時(日本時間)に、同期処理が実行されるようになります。
Schedule expressionの記述方法についてはAWS Lambdaデベロッパーガイド「 rateまたはcronを使用する式をスケジュールする 」を参考にしてください。
おわりに
いかがだったでしょうか。
ちょっと複雑だったかもしれませんが、サーバーを自前で用意しなくて済むのは大きな利点ではないでしょうか。
また、S3など他のAWSサービスと組み合わせることで、たとえばS3にデータがアップロードされたタイミングでそのデータを同期するといったようなことも可能です。
Lambdaを使うとOSなどの管理も不要なため、アプリケーションの運用だけに集中できます。
cli-kintoneと組み合わせることでコードの記述も最小限に抑えられますので、ぜひうまく活用してみてください。
このTipsは、2024年6月版kintoneとcli-kintone v1.10.13で動作を確認しています。