はじめに
こんにちは。クローバの門屋です。AWS Lambdaの登場以来、サーバーレスなアーキテクチャを使ったシステムの構築が注目されています。
kintone でサーバーレスの恩恵を受けやすいのはやはり他のサービスとの連携ではないでしょうか。
LambdaとAPI Gatewayを使えば、常時稼働するサーバーいらずで kintone との連携サービスをつくることができます。
ただやってみるとわかるのですが、複数のLambda関数やAPIを開発する場合に都度、LambdaやAPI Gatewayの設定を手作業で行うのはわりと面倒くさいものです。
Serverless Frameworkとserverless-kintoneプラグインを使えば、煩わしい設定を極力行わずにサーバーレスなシステムを構築することができます。
Serverless Frameworkとは?
Serverless Frameworkは今非常に注目されているサーバーレスなアーキテクチャをかんたんに作成できるオープンソースのフレームワークです。
AWS Lambdaだけでなく、Azure Functions、Google CloudFunctionsなどに対応しており、2017年3月現在でバージョン1.8が提供されています。
公式サイト
Github
https://github.com/serverless/serverless
serverless-kintone とは?
serverless-kintone とは、Serverless Frameworkで kintone を扱うためのプラグインです。
設定ファイルにkintoneの設定を記述するだけで、かんたんにkintoneの操作を行うことができます。
Github
https://github.com/kintone-samples/serverless-kintone
事前準備
必要なもの
- kintoneアカウント
- AWS アカウント
- AWS コマンドラインインターフェイス
- node.js及びnpm
AWS コマンドラインインターフェイスは事前にaws configureコマンドでセットアップを行ってください。
詳しくはAWSのドキュメントを参照してください。
kintone アプリの作成とAPI トークンの取得
詳しい方法は省略します。APIトークンの取得については過去の記事を参考にしてください。
Serverless Frameworkのインストール
Serverless Frameworkはnpmで提供されており、以下のコマンドでインストールできます。
gオプションをつけてグローバル環境でインストールします。
アプリケーションの初期化
新しくディレクトリを作って、Serverless Frameworkの初期化コマンドを実行します。
作成されるファイルについて説明します。
- handler.js: Lambda関数を実装するJSファイル
- serverless.yml: フレームワークの設定ファイル
package.jsonの初期化
なにはともあれnpm initを実行してpackage.jsonを初期化します。いろいろ聞かれますがとりあえずすべてデフォルトで大丈夫です。
serverless-kintone プラグインのインストール
現時点ではまだserverless-kintone は npm のレジストリに登録されていないため、直接 Githubからインストールします。
APIトークンの暗号化
serverless-kintoneでは、APIトークンとパスワード認証に対応しており、APIトークンとパスワードはどちらも暗号化してAWSにアップロードすることができます。
運用環境では必ず暗号化を行うようにしてください。事前にAWSにてKMSのキーを作成しておく必要があります。とりあえず試すだけなら、この章は省略しても構いません。
KMSキーの作成
AWSのドキュメントを参考にしてキーの作成を行ってください。
あとで作成されるLambda関数の実行アカウントに、このキーのkms:Decrypt権限を与える必要があります(Lambda関数の作成後に設定します)。
暗号化
コマンドラインで以下のコマンドを実行します(AWS コマンドラインインターフェイスが必要です)。
表示される暗号化されたキー(CiphertextBlobの値)をメモしておいてください。
これで事前準備ができました!
アプリケーションの開発
serverless.ymlの編集
serverless.ymlを以下のように編集します。kintone の情報はご利用のものに置き換えてください。
詳しい設定方法については、Serverlessのドキュメントを参照してください。
暗号化を行わない場合は、encryptedの行を削除して、api_tokenに暗号化されていない値を設定してください。
handler.jsの編集
handler.jsを以下のように編集します。今回は単純に、kintoneの特定のアプリからレコード情報を返すだけのAPIを作成してみることにします。
複数のLambda関数を作成することもできます。アプリケーションが大きくなるとフォルダを作成してファイルを整理することもあると思いますが、
アプリケーション直下に"kintone"という名前のフォルダを作成するとserverless-kintoneに上書きされてしまうので注意してください。
デプロイ
以下のコマンドで、アプリケーションをAWSにデプロイします。
デプロイには少し時間がかかります。Lambda関数を修正した場合などは、deploy functionコマンドを使って関数だけを更新することもできます。
APIの実行
デプロイ時に表示されたURLにcurlコマンドやブラウザでアクセスしてみます。
APIトークンを暗号化した場合は、トークンが復号化できないためにエラーが発生します。
Serverless Frameworkによって作成されたIAM Roleに、復号化するためのkms:Decrypt権限を付与すると実行できるようになります。
詳しくはAWSのドキュメントの、「キーユーザーに CMK の使用を許可する」を参照してください。
kintoneからデータが取得できています!
おわりに
いかがだったでしょうか。暗号化のところが少し複雑でしたが、キーの作成ははじめに一度行うだけでよく、
自前で暗号化の仕組みを作成することと比べると遥かに簡単にセキュアなサーバレスアプリケーションを構築することができます。
LambdaやAPI Gateway、DynamoDB等の設定が設定ファイルで管理できるため、ちょっとAPIを作ってみたいというケースから大規模な開発まで対応できます。
Serverless Frameworkは開発のスピードが早いため、最新情報をキャッチアップしていく必要がありますが、
使いこなせば強力なツールになることは間違いありません。ぜひ試してみてください。
注意事項
本プログラムは、動作を保証するものではありません。
ソースコードの変更および再配布、商用利用等はライセンスに従ってご利用可能です。
このTipsは、2019年8月版 kintoneで確認したものになります。
記事に関するフィードバック
記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。