前回はkintoneからAWS Lambdaを実行してみました。
今回は、kintoneのレコードをLambdaに渡し、それをログに出力してみます。
流れ
- kintone.proxyを利用して、レコード詳細画面からkintoneレコードをLambdaにPOSTするコードを作成
- LambdaにてkintoneからPOSTしたデータを取得してログに表示する
kintone.poxyを利用したkintoneレコードのPOST
(function() {
"use strict";
const url = 'APIエンドポイントURL';
const method = 'POST';
const headers = {'Content-Type' : 'application/json'};
kintone.events.on("app.record.detail.show", function(event) {
let myButton = document.createElement('button');
myButton.id = 'myButton';
myButton.innerHTML = 'Hello Ruby!!';
myButton.onclick = function() {
console.log(event);
let data = event;
kintone.proxy(url, method, headers, data, function(body, status, headers) {
console.log(status, body);
if(status >= 200 && status < 300) {
console.log("Success");
}else{
console.log("Error");
}
});
return event;
};
kintone.app.record.getHeaderMenuSpaceElement().appendChild(myButton);
});
})();
上記の場合、kintoneのレコードは eventコールバック変数にJSON形式でセットされていますので、kintone.proxyを使ってPOSTする際に、'application/json' を指定します。
kintoneレコードはkintone.proxyのdata変数にそのままセットします。
Lambda for Ruby2.5
LambdaファンクションをRubyで書きます。
require 'json'
def lambda_handler(event:, context:)
# TODO implement
print 'event["body"] =>'
pp event["body"]
print 'event =>'
pp event
print 'JSON.parse => '
pp JSON.parse(event["body"])
print 'context:'
pp context
{ statusCode: 200, body: JSON.generate('Hello from Lambda! powerd by Ruby2.5') }
end
LambdaにPOSTされたデータは プロキシ統合のための Lambda 関数の出力形式 の形式で渡されます。
kintoneからPOSTされたデータの中のkintoneレコードは JSONの"body" にセットされているので、JSON.parseして取り出します。
実行結果の確認
実行結果が CloudWatch Logs に出力されるので、確認します。
"body"=>
"{\"type\":\"app.record.detail.show\",\"appId\":219,\"recordId\":1,\"record\":{\"レコード番号\":{\"type\":\"RECORD_NUMBER\",\"value\":\"1\"},\"更新者\":{\"type\":\"MODIFIER\",\"value\":{\"code\":\"20170701\",\"name\":\"アプリ管理者\"}},\"作成者\":{\"type\":\"CREATOR\",\"value\":{\"code\":\"20170701\",\"name\":\"アプリ管理者\"}},\"更新日時\":{\"type\":\"UPDATED_TIME\",\"value\":\"2019-01-12T01:04:00Z\"},\"作成日時\":{\"type\":\"CREATED_TIME\",\"value\":\"2019-01-09T13:57:00Z\"},\"text\":{\"type\":\"SINGLE_LINE_TEXT\",\"value\":\"Hello Lambda for Ruby!!\"},\"$revision\":{\"type\":\"__REVISION__\",\"value\":\"2\"},\"$id\":{\"type\":\"__ID__\",\"value\":\"1\"}}}",
JSON.parse => {"type"=>"app.record.detail.show",
"appId"=>219,
"recordId"=>1,
"record"=>
{"レコード番号"=>{"type"=>"RECORD_NUMBER", "value"=>"1"},
"更新者"=>
{"type"=>"MODIFIER", "value"=>{"code"=>"20170701", "name"=>"アプリ管理者"}},
"作成者"=>{"type"=>"CREATOR", "value"=>{"code"=>"20170701", "name"=>"アプリ管理者"}},
"更新日時"=>{"type"=>"UPDATED_TIME", "value"=>"2019-01-12T01:04:00Z"},
"作成日時"=>{"type"=>"CREATED_TIME", "value"=>"2019-01-09T13:57:00Z"},
"text"=>{"type"=>"SINGLE_LINE_TEXT", "value"=>"Hello Lambda for Ruby!!"},
"$revision"=>{"type"=>"__REVISION__", "value"=>"2"},
"$id"=>{"type"=>"__ID__", "value"=>"1"}}
綺麗にパースされてRubyで扱うことの出来るオブジェクトに変換されました。
次はkintoneからPOSTされたレコードの内容を使って、ThinreportsでPDF出力してみます。
参考リンク
- プロキシ統合のための Lambda 関数の入力形式 https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format
- プロキシ統合のための Lambda 関数の出力形式 https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-output-format
- Introducing JSON https://www.json.org/index.html
- module JSON https://docs.ruby-lang.org/ja/latest/class/JSON.html
- Ruby による Lambda 関数のビルド https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-ruby.html