kintone WebhookとAWS Lambdaの連携方法をより詳しく説明する！

# はじめに
業務でFormBridgeからkintoneに対してデータを登録した際に、条件によってメールを通知するというシステムを作りました。FormBridgeからメール通知のシステムに対してAPIの呼び出しができなかったため、kintone WebhookとAWS Lambdaを連携するようシステムの構築を行いました。
今回はkintone WebhookとAWS Lambdaの連携方法についてより詳細に説明していきます！
※メール通知はSendGridを使用しました。ここでは紹介しません。

こんなイメージです！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700107/16a89f8e-e451-9ba3-7d6e-d905562e1912.png)


# Lambdaの環境準備
## 関数の作成
1. Lambda＞関数から関数の作成ボタンを押下する。
2. 以下内容を入力し、関数の作成ボタンを押下する。

| 項目 | 値 |
| ------------- | ------------- |
| オプション | 一から作成 |
| 関数名|任意 |
| ランタイム|使用言語|
| アクセス権限|既存のロールを使用する |

## レイヤーの作成
### ■初回作成時
1. Lambda＞レイヤーからレイヤーの作成ボタンを押下する。
2. 以下内容を入力し、作成ボタンを押下する。

| 項目 | 値 |
| ------------- | ------------- |
| 名前| 任意 |
| 説明|任意 |
| ファイル|.zipファイルをアップロード|
| 互換性のあるランタイム|使用言語 |
| ライセンス|任意 |

※【ファイル】実行する処理を記述したファイル
※ 今回はNode.jsを使用しました

### ■2回目以降
1、Lambda>レイヤー>対象のレイヤー画面のバージョンの作成ボタンを押下する。
2、初回作成時と同様の内容を入力し、作成ボタンを押下する。

### 関数とレイヤーの紐づけ
### ■初回作成時
1、Lambda>関数>対象の関数のレイヤーのレイヤーの追加ボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700107/d4adacfc-1dda-576c-9b6c-0882804db5a5.png)


2、以下の内容を入力し、追加ボタンを押下する。

| 項目 | 値 |
| ------------- | ------------- |
| | カスタムレイヤー|
| お客様のレイヤー|上記で作成したレイヤー |
| バージョン|1 |

### ■2回目以降
1、Lambda>関数>対象の関数のレイヤーのレイヤーの追加ボタンを押下する。
2、以下の内容を入力し、追加ボタンを押下する。

| 項目 | 値 |
| ------------- | ------------- |
| | カスタムレイヤー|
| お客様のレイヤー|上記で作成したレイヤー |
| バージョン|1番新しい番号 |

※バージョンは作成されるたびに上がっていく

## API Gatewayの環境準備
### APIの作成
1、API Gateway>APIを作成作成ボタンを押下する。
2、以下の内容を入力し、作成ボタンを押下する。

| 項目 | 値 |
| ------------- | ------------- |
| ロググループ名 | 任意|
| 保持期間の設定| 任意|

### その他設定
1、API Gateway>API>リソース>アクション>リソースの作成を押下する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700107/f4f7b52c-1063-854a-6aae-33a809701a05.png)

2、作成したリソースを押下し、アクション>メソッドの作成を押下しPOSTを選択する
3、以下の内容を入力し、保存ボタンを押下する

| 項目 | 値 |
| ------------- | ------------- |
| 統合タイプ | Lambda関数|
| Lambdaプロキシ統合の使用| ✔ |
| Lambdaリージョン| ap-northeast-1 |
| Lambda関数| 上記で作成したLambda関数名 |
| デフォルトタイムアウトの使用| ✔ |

4、アクション>APIのデプロイ

| 項目 | 値 |
| ------------- | ------------- |
| デプロイされるステージ | 新しいステージ|
| ステージ名| 任意 |

※同様にOPTIONSメソッドも以下内容を入力し作成する

| 項目 | 値 |
| ------------- | ------------- |
| 統合タイプ | Mock|

## CloudWatchの環境準備
### ロググループの作成
1、CloudWatch>ロググループからロググループを作成ボタンを押下する。
2、以下の内容を入力し、作成ボタンを押下する。

| 項目 | 値 |
| ------------- | ------------- |
| ロググループ名 | /aws/Lambda/上記で作成したLambda関数名|
| 保持期間の設定| 任意|


## kintone webhookの設定
1.アプリの設定タブからWebhookを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700107/67f71bde-866e-d858-bd3d-4e0cd029eeb4.png)
2.以下の値を入力する。

| 項目 | 値 |
| ------------- | ------------- |
| WebhookURL | 作成したLambda関数に紐付けた API Gateway の エンドポイント/API Gatewayで作成したステージ名/API Gatewayで作成したリソース名|
| 通知する条件| 任意|
| 有効化| ✔|


※私は通知する条件はレコードの編集のときのみ✔を入れました。今回はkViewerのMyページURLを生成する必要があり、初回はkintoneにデータを登録する際に2回処理が走るためです。

### kintone webhookからログの確認
1．対象のアプリの設定画面からWebhookの画面に遷移する。
2．ログを確認を押下し、確認画面に遷移する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700107/59e2eb28-f19b-ed43-efc2-2f8ebe626578.png)

遷移すると今までのログの確認が行えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700107/fe1884ca-9055-bace-1db7-0818e3689d6c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700107/746c6611-6a8f-074c-c86a-407705a7be45.png)
通知に成功したことを表します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700107/5a404f27-d6e1-baac-99bb-5de98f10a59f.png)
通知に失敗したことを表します。

※CloudWatchのログも並行して確認します。

# さいごに
今回、WebhookやAWSなど慣れないシステムを使用したため、自分にできるかと不安でした。しかし、やってみると案外簡単に構築できるということが分かり苦手意識が少し克服できました！