Serverless Framework を使って AWS でお手軽 kintone REST API を実行してみよう
はじめに
こんにちは。クローバの門屋です。
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 が提供されています。
- 公式サイト: https://serverless.com/
- GitHub: https://github.com/serverless/serverless
serverless-kintone とは?
serverless-kintone とは、Serverless Framework で kintone を扱うためのプラグインです。
設定ファイルに kintone の設定を記述するだけで、簡単に kintone を操作できます。
下準備
必要なもの
- kintone アカウント
- AWS アカウント
- AWS コマンドラインインターフェース
- node.js および npm
AWS CLI のセットアップ
AWS コマンドラインインターフェースは事前に aws configure コマンドでセットアップを行ってください。
詳しくは
AWS CLI のインストールと設定
を参照してください。
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 キーの作成
Creating keys
を参考にしてキーを作成してください。
あとで作成される 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 権限を付与すると実行できます。
詳しくは
Key policies in AWS KMS
の、「キーユーザーに CMK の使用を許可する」を参照してください。
|
|
kintone からデータが取得できています!
おわりに
いかがだったでしょうか。
暗号化のところが少し複雑でしたが、キーの作成はじめに一度行うだけでよく、自前で暗号化のしくみを作成することと比べると、とても簡単にセキュアなサーバーレスアプリケーションを構築できます。
Lambda や API Gateway、DynamoDB 等の設定が設定ファイルで管理できるため、ちょっと API を作ってみたいというケースから大規模な開発まで対応できます。
Serverless Framework は開発のスピードが早いため、最新情報をキャッチアップしていく必要がありますが、使いこなせば強力なツールになることは間違いありません。
ぜひ試してみてください。
注意事項
ソースコードの変更および再配布、商用利用等はライセンスにしたがってご利用可能です。
この Tips は、2019 年 8 月版 kintone で動作を確認しています。