AWSとkintoneをつなぐ部品(1)
こんにちは、本橋です。
最近はkintoneとAWSを連携させるプロジェクトがいくつか進行していました。過去に作った構成を取っておいて再利用は皆さんもよくやることかと思います。主に後々の自分のためにも、部品として取り出せそうなパターンを紹介してみたいと思います。
CDKには部品クラスとしてConstructsクラスが用意されています。Constructsにしておくと取り回しやすい部品にできそうです。
まずは『SQSでバッファリングしてkintoneに一括で書き込む』という構成を部品化してみました。
今回使ったコードはgithubリポジトリに公開しています。
Q2k部品 (Queue to kintone Constructs)
ざっくりと構成図で紹介していきます。

中央のコンテナに入っている部分がQ2k部品です。
コンテナの手前のLambdaは、Queueに積むためにテスト用のシグナルを発行するLambdaです。AWSシステム内部ではなく、例えばkintoneのWebhookなど外部からシグナルを受け付けたいならAPI Gateway を繋いでもよいでしょう。
この部品ではkintoneアプリが出力先になります。kintoneアプリに書きこむために、Q2k部品には環境変数として、kintoneのドメイン、アプリID、API Tokenを渡すようにしています。適宜KMSなどに差し替えてご利用ください。
kintone側でエラーが発生したときのためにDLQを用意しています。今回は簡易的にSlack Webhookを発行するようにしました。こちらも任意の通知先に差し替えていただけたらと思います。SESとかでもよいですね。
動かしてみる
さて、lambdaから登録してみます。構成図ではコンテナの手前にあったlambdaです。
こんなメッセージをQueueに乗せてみましょう。
const testMessage = {
id: { S: `test-${Date.now()}-${i}` },
timestamp: { S: new Date().toISOString() },
string_field_01: { S: `${field1Value} ${i + 1}` },
string_field_02: { S: `${field2Value} ${i + 1}` }
};
cdkでデプロイするとlambda用のURLが発行されます。
そのURLをcurlで叩いてみます。
curl "https://xxx.lambda-url.ap-northeast-1.on.aws/?field1=abc&field2=def&field3=ghi"
kintoneアプリに登録されました。

改善ポイント
今回のサンプルにはいくつか小さな課題があります。Queueの発行時点でフィールドコードを指定しているため、kintoneアプリ側でフィールドを変更すると書きこめなくなってしまいます。これは改善したいところです。
可能であればAWSのシグナルを受け取るデータプールアプリをkintone側に用意してあげるとよいでしょう。
そのパターンもまた別途紹介してみたいと思います。
サンプルコード
今回のCDKコードはこちらにサンプルを置いてあります。
そのままcdk deployして、実行できるlambdaのURLが発行されるようにしてあります。
良かったらお試しください。
Discussion