LoginSignup
1
0

More than 5 years have passed since last update.

kintone から AWS API Gateway 経由で Lambda for Ruby ファンクションにリクエストを投げてみるテスト

Last updated at Posted at 2019-01-09

kintoneのアプリからAWSにアクセスするテストです。
とりあえず結果だけ。説明は後ほど。

テスト概要

  1. Lambda実行とCloudWatchLogsに書き込み出来るロールを作成します。
  2. Lambdaの作成と同時にAPI Gatewayも作成します。
  3. Lambdaにロールを設定します。
  4. API Gateway を作成します。
  5. kintoneアプリを新規に作成します。
  6. kintoneにAPI GatewayにPOSTするコードを作成します。
  7. kintoneアプリを実行します。
  8. CloudWatchにアクセスしてログを確認します。

1. Lambda実行とCloudWatch Logs 書き込みロールの作成

  1. IAMコンソールにてIAMロールを選択
  2. ロールの作成を選択
  3. 利用するサービスにLambdaを選択
  4. アタッチポリシーに一覧から「AmazonAPIGatewayPushToCloudWatchLogs」を選択
  5. ロール名を入力してロールを保存します

2. Lambda作成とAPI Gatewayの設定

  1. Lambdaコンソールにて関数の作成を選択
  2. 1から作成を選択
  3. Lambdaファンクション名を入力
  4. ランタイムでRuby2.5を選択
  5. 既存のロールにて前段で作成したロールをリストから選択
  6. 関数の作成を押下
  7. 保存押下
  8. トリガーの追加からAPI Gatewayを選択
  9. 新規APIの作成を選択
  10. セキュリティを選択
  11. 追加を押下
  12. 保存を押下してAPI Gatewayをデプロイ
  13. APIエンドポイントの生成を確認
  14. テストを選択
  15. テストイベントを保存
  16. テスト実行
  17. CloudWatchコンソールからログを選択
  18. ログを確認

Lambdaファンクション

myHelloRubyTest1

require 'json'

def lambda_handler(event:, context:)
    # TODO implement
    pp event
    pp context 
    { statusCode: 200, body: JSON.generate('Hello from Lambda! powerd by Ruby2.5') }
end

kintone JavaScript

(function() {
    "use strict";

    const url = 'API GatewayのAPI エンドポイント';
    const method = 'POST';
    const headers = {'Content-Type' : 'application/x-www-form-urlencoded'};
    const data = 'myName=Kazu&myJob=SE';

    var myIndexButton = document.createElement('button');
    myIndexButton.id = 'my_index_button';
    myIndexButton.innerHTML = 'Hello Ruby!!';
    myIndexButton.onclick = function() {
        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.events.on("app.record.detail.show", function(event) {
        kintone.app.record.getHeaderMenuSpaceElement().appendChild(myIndexButton);
    });
})();

CloudWatch Logs

一部抜粋

"body"=>"myName=Kazu&myJob=SE",
#<LambdaContext:0x000055a4a4f96d90
@function_name="myHelloRubyTest1",

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0