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リクエストしてログに吐き出してみるテスト
コメント
コメントを投稿