AWS Lambda にPOSTしたkintoneのレコードからThinreportsを利用してPDFファイルを生成する
AWS Lambda にPOSTしたkintoneのレコードからThinreportsを利用してPDFファイルを生成する:
これまでの記事でRubyのインストールからLambda・API Gatewayの利用、ThinreportsによるPDF生成までテストしてきましたが、最後にこれまでのまとめとして、LambdaにPOSTしたkintoneレコードを利用してPDFを生成してみたいと思います。
kintoneアプリを新規に作成します。
文字列1行フィールドを追加して次のように設定します。
アプリを作成したらレコードを登録しておきます。
kintone.proxyを利用して、レコードをAWSへPOSTします。
kintoneアプリ開発ベース〜ビルド、デプロイ、環境切り替え〜の記事を参考にして、ビルド・デプロイをしました。
API GatewayのURLは設定ファイルから読み込みます。
ThinreportsはRubyでPDFファイルを生成するソフトウェアです。rubyのライブラリとデザイナが提供されています。詳しくはhttp://www.thinreports.org/を参照してください。
今回はクイックスタートガイドのレイアウトファイルをそのまま利用します。
尚、サンプルコードとレイアウトファイルはリンク先の下の方からダウンロード出来ます。
参考にさせて頂きました。この場をお借りして感謝致します。
これまでの記事でRubyのインストールからLambda・API Gatewayの利用、ThinreportsによるPDF生成までテストしてきましたが、最後にこれまでのまとめとして、LambdaにPOSTしたkintoneレコードを利用してPDFを生成してみたいと思います。
流れ
- kintoneアプリ作成
- kintoneカスタマイズJavaScriptファイル作成
- Thinreportsレイアウトファイルを作成
- Lambdaファンクションの作成
- S3,API Gatewayの設定
- kintoneアプリから実行
- S3にPDFファイルが生成されていることを確認
kintoneアプリ作成
kintoneアプリを新規に作成します。文字列1行フィールドを追加して次のように設定します。
| フィールド名 | フィールドタイプ | フィールドコード |
|---|---|---|
| text | 文字列1行 | text |
kintoneカスタマイズJavaScriptファイル作成
kintone.proxyを利用して、レコードをAWSへPOSTします。customer.js
const url = kintoneEnv.props.url;
console.log(url);
const method = 'POST';
const headers = {'Content-Type' : 'application/json'};
kintone.events.on('app.record.detail.show', event => {
let myButton = document.createElement('button');
myButton.id = 'myButton';
myButton.innerHTML = 'Hello Ruby!!';
myButton.onclick = () => {
console.log(event);
let data = event;
kintone.proxy(url, method, headers, data, (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);
})
API GatewayのURLは設定ファイルから読み込みます。
Thinreportsレイアウトファイルを作成
ThinreportsはRubyでPDFファイルを生成するソフトウェアです。rubyのライブラリとデザイナが提供されています。詳しくはhttp://www.thinreports.org/を参照してください。今回はクイックスタートガイドのレイアウトファイルをそのまま利用します。
尚、サンプルコードとレイアウトファイルはリンク先の下の方からダウンロード出来ます。
Lambdaファンクションの作成
hello_world.rb
# coding: utf-8
require 'thinreports'
require 'json'
require 'base64'
require 'aws-sdk-s3'
def lambda_handler(event:, context:)
begin
print 'JSON.parse event.body => '
pp JSON.parse(event["body"])
event_body = JSON.parse(event["body"])
record = event_body["record"]
print 'record => '
pp record
puts '$id => ', record["$id"]["value"]
puts 'text => ', record["text"]["value"]
rescue => e
puts "#{e.class}: #{e.message}"
puts e.backtrace
end
begin
region = 'ap-northeast-1'
bucket_name = 'luck-lambda-ruby-upload-backet'
key = 'put-hello-ruby.pdf'
# S3 Backet Object init
s3 = Aws::S3::Resource.new(region: region)
obj = s3.bucket(bucket_name).object(key)
# Thinreports Object init
report = Thinreports::Report.new layout: 'hello_world'
# 1st page
report.start_new_page
report.page.item(:world).value(record["$id"]["value"])
report.page.item(:thinreports).value(record["text"]["value"])
obj.put(body: report.generate)
rescue => e
puts "#{e.class}: #{e.message}"
puts e.backtrace
end
{ statusCode: 200, body: JSON.generate('Hello Lambda! Thinreports for Ruby') }
end
これまでの記事
- AWS Lambda の Ruby サポート を受けてRubyのインストールからデプロイまでやってみたメモ
- AWS Lambda for Ruby を使って Lambda から Thinreports ライブラリで生成したPDFをS3に保存してみるメモ
- kintone から AWS API Gateway 経由で Lambda for Ruby ファンクションにリクエストを投げてみるテスト
- kintone のレコードを kintone.proxyでAWS LambdaへPOSTリクエストしてログに吐き出してみるテスト
コメント
コメントを投稿