本日利用した Lambda 関数について

今回利用したLambda関数の設定方法、およびプログラムについて記載します。

手順

Lambda 関数のプログラム作成

今回は 「ボタンを押したらkintoneへレコード登録する」プログラムを記述します。
SORACOM LTE-M Buttonは シングルクリック / ダブルクリック / ロングクリック の3つの押し方に対応しているため、
それぞれの押し方で異なるデータが登録できるようにしています。

Node プロジェクトの準備

  1. 作業ディレクトリの作成と移動
$ mkdir my_project && cd $_
  1. Node プロジェクトの作成
$ npm init -y
  1. 必要モジュールのインストール

今回はkintoneへHTTPリクエストを送るため、requestモジュールを利用します。

$ npm i request
$ npm i request-promise

実行プログラムの作成

index.jsとして以下を記述したJavaScriptを作成します。
(一部Lambdaの環境変数を利用しています)


const request = require('request-promise');

// パラメータを作成する関数
const createParams = (TEXT, USER) => {
  return {
    url: `https://${process.env.KINTONE_DOMAIN}/k/v1/record.json`,
    method: 'POST',
    headers: {
      'X-Cybozu-API-Token': process.env.KINTONE_APITOKEN,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      app: process.env.KINTONE_APPID,
      record: {
        text: {
          value: TEXT,
        },
        user: {
          value: USER,
        }
      },
    }),
  };
};

// kintoneへレコードを登録する関数
const postRecord = (PARAMS) => {
  return request(PARAMS)
    .then(resp => resp)
    .catch(err => err);
};

// Lambdaのイベントハンドラー
exports.handler = async (event) => {
  const body = JSON.parse(event.body);
  const header = event.headers[process.env.CUSTOM_HEADER];
  let params;

  // ボタンの押し方によってパラメータを変更
  switch(body.clickType) {
    case 1: { // singleクリック
      params = createParams('single click', header);
      break;
    }
    case 2: { // doubleクリック
      params = createParams('double click', header);
      break;

    }
    case 3: { // Longクリック
      params = createParams('long click', header);
      break;
    }
  }
  // レコード登録
  await postRecord(params);
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: 'kintone Data POST Success!!',
    }),
  };
};

ポイント

プログラムのポイントだけ軽く説明します。

ボタンクリック方法の識別

Lambdaへ送られるevent.body内に clickType というプロパティで値が入っています。
clickTypeが 1 ならシングルクリック2 ならダブルクリック3 ならロングクリック(長押し) です。

kintoneのパラメータ

kintoneはオブジェクト構造でデータを格納しており、文字列(1行)フィールドの場合
record.{フィールドコード}.value の中に値を入れることでデータをはめることができます。

record: {
  text: {
    value: TEXT,
  },
  user: {
    value: USER,
  }
}

(詳しいパラメータの書き方は cybozu developer network の APIドキュメント をご覧ください)

実行ファイルのアップロード

Lambdaへアップロードするために実行ファイルをzip化します。
(-r オプションをつけて、node_module配下のものもすべてzip化します)

$ zip -r LambdaFunction.zip index.js node_module/

関数コードのコードエントリタイプを「.zipファイルをアップロード」に変更し、先ほどzip化した LambdaFunction.zip をアップロードします。

環境変数の設定

Lambdaの環境変数を設定します。ここに kintoneのURL / APIトークン / アプリID を記述します。
この環境変数を利用することで、JavaScript上で process.env.◯◯ と記述できます。
(kintoneの準備は こちら をご覧ください)




以上でLambda関数の準備は完了です。
API Gatewayの設定で生成したURLをSORACOM Beamに設定することで、
SORACOM LTE-M Button -> SORACOM Beam -> AWS Lambda -> kintone という流れが完成します。