本日利用した Lambda 関数について
今回利用したLambda関数の設定方法、およびプログラムについて記載します。
手順
Lambda 関数のプログラム作成
今回は 「ボタンを押したらkintoneへレコード登録する」プログラムを記述します。
SORACOM LTE-M Buttonは シングルクリック / ダブルクリック / ロングクリック の3つの押し方に対応しているため、
それぞれの押し方で異なるデータが登録できるようにしています。
Node プロジェクトの準備
- 作業ディレクトリの作成と移動
$ mkdir my_project && cd $_
- Node プロジェクトの作成
$ npm init -y
- 必要モジュールのインストール
今回は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
という流れが完成します。