TENKitとAWS Lambdaの連携

**本記事は、[TENKit](https://tenkit.jp/) の応用的な利用について説明いたします。
事前に基礎編「 [TENKitとGoogleスプレッドシートの連携（簡単記録編）](https://qiita.com/tetotetote/items/bbacc6671b7b9f5846b3)」をご確認いただきますようお願いします。**

[TENKit](https://tenkit.jp/) （テンキット）は「テンキー」を「IoT」化するキットです。
[TENKit](https://tenkit.jp/) では、テンキーで入力された「数字」と、Googleスプレッドシートなどクラウド上のサービスを簡単に結びつけることができます。

ここでは、[TENKit](https://tenkit.jp/) の応用的な利用として、AWS Lambdaと連携する方法について説明します。
![スクリーンショット 2019-09-13 9.49.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/b28cad5d-bd79-832e-9cc8-31681f9a99cb.png)
本手順をマスターすると、[TENKit](https://tenkit.jp/) をデータベースや業務システムと連携するなど、より高度に利用することができるようになります。

# 設定前の準備

AWS Lambdaとの連携を設定する前に、以下の項目を確認してください。

**1. 基礎編をマスター**

**事前に基礎編「 [TENKitとGoogleスプレッドシートの連携（簡単記録編）](https://qiita.com/tetotetote/items/bbacc6671b7b9f5846b3)」をご確認いただき、TENKitの基本的な利用方法についてマスターしていただくようお願いします。**

**2. AWSのアカウントを用意**

[AWS](https://aws.amazon.com/jp/) のアカウントをご準備ください。
本手順では、アジアパシフィック（東京）リージョンを利用します。
また「Lambda」に加えて「API Gateway」サービスを利用しますので、事前に概要等をご確認ください。

# 連携の設定

連携の設定は、大きく以下のステップで行います。

1. Lambda関数の作成：Webhook URLが呼び出された際の動作を定義
2. API Gatewayの設定：Webhook URLの作成
3. Lambda関数の設定：API Gatewayとの紐付け
4. TENKitに作成したWebhook URLを登録

## Lambda関数の作成

まず最初に、Lambda関数を作成して、Webhook URLが呼び出された際の動作を定義します。
[AWS](https://aws.amazon.com/jp/) のコンソールにアクセスし、Lambdaの管理画面を開きます。
「関数の作成」より、以下のように情報を入力して、新しいLambda関数を作成します。

- 関数名 : TENKit
- ランタイム : Node 10.x

![スクリーンショット 2019-09-13 11.13.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/8b323c3c-4228-634a-ba75-ba8fe830f411.png)

続いて、「関数コード」部分に以下のコードを記述して保存します。

```javascript
exports.handler = async (event) => {
    var body = JSON.parse(event.body);
    var message = body.message;
    var created_at = body.created_at;

    // ログに表示
    console.log(message);
    console.log(created_at);
    
    return {
　      "isBase64Encoded" : false,
　      "statusCode" : 200,
　      "headers" : {},
　      "body" : "welcome to tenkit!"
    }
};
```
上記は、呼び出し元（TENKit --> API Gateway --> Lambda）からの情報をログに表示する最もシンプルなコードになります。

## API Gatewayの設定

次に、[AWS](https://aws.amazon.com/jp/) のコンソールより、API Gateway の管理画面を開きます。
初めてアクセスした場合は「今すぐ始める」ボタンを押してください。

API作成画面に遷移するので、以下のように入力し、「APIの作成」ボタンをクリックします。

- プロトコルを選択する : Rest
- 新しい API の作成 : 新しいAPI
- 名前と説明
    - API 名 : TENKit
    - 説明 : TENKit
    - エンドポイントタイプ : リージョン
![スクリーンショット 2019-09-13 10.07.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/e14ccd84-e4a4-903c-9640-81cdc4b48391.png)

これにより、APIのベースとなる部分が作成されました。
次に、「アクション」ボタンより「メソッドの作成」を選択して、HTTP POSTメソッドを追加します。
![スクリーンショット 2019-09-13 10.14.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/21fc464a-91df-3030-2634-b9bc8d90e1bf.png)
プルダウンで「POST」を選択し、下記のように各項目を設定して「保存」ボタンをクリックします。
Lambda関数「TENKit」が無いの警告が表示されます。
本関数は次のステップで作成します。

- 統合タイプ : Lambda
- Lambda プロキシ統合の使用 : 有効
- Lambda リージョン : ap-northeast-1
- Lambda 関数 : TENKit
- デフォルトタイムアウトの使用 : 有効

![スクリーンショット 2019-09-13 10.19.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/ff85e39c-3b1f-1b18-0884-61625070dcaf.png)

最後に、本APIをデプロイします。
「アクション」より「APIのデプロイ」を選択します。
![スクリーンショット 2019-09-13 10.22.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/1f6c69a4-5b8d-ca9b-650d-4940fcb70898.png)
デプロイされるステージに「新しいステージ」を選択し、ステージ名に「tenkit」と入力して「デプロイ」します。
![スクリーンショット 2019-09-13 10.24.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/72bf4028-fd93-189b-7707-70adde1b5a27.png)
成功すると以下のように専用のAPIが表示されます。
これがTENKitに登録するWebhook URLになるので、コピーして保管してください。
![スクリーンショット 2019-09-13 10.25.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/f1da0dd2-344b-b60e-47ec-2539e57d0ccf.png)

## Lambda関数の設定

再びLambda管理画面に移動し、作成した「TENKit」関数の設定画面に移動します。
上部「Designer」部分で「トリガーを追加」ボタンをクリックし「API Gateway」を追加します。

トリガーとなるAPI Gatewayの詳細について、以下のように設定します。

- API : TENKit
- デプロイされるステージ : tenkit
- セキュリティ : オープン

![スクリーンショット 2019-09-13 10.40.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/f039590b-888f-5bc2-42c0-aefacf9267b3.png)
「Desiner」部分に「API Gateway」が追加されました。
![スクリーンショット 2019-09-13 10.44.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/4b166635-5927-af48-0375-ac844a664a3b.png)
これにより、先ほど作成したAPIが呼び出された際に、このLambda関数が実行されるようになりました。

## TENKitへの登録と実行

最後に、API Gatewayで作成したWebhook URLを下記よりTENKitに登録します。
[![スクリーンショット 2019-09-10 17.45.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160696/0ec1a3af-ba00-8eec-a628-547b848d6dea.png)](https://tenkit.jp/webhook/register)
TENKitに接続されたテンキーを入力し、Lambdaの実行ログ（CloudWatch）に入力が表示されていれば成功です。

# 最後に
本手順では、[TENKit](https://tenkit.jp/) の応用的な利用として、AWS Lambdaと連携する方法について説明しました。
これにより、[TENKit](https://tenkit.jp/) をデータベースや業務システムと連携するなど、より高度に利用することができるようになります。

どのように利用するはかアイデア次第です。面白い使い方を是非発見してください。