kintoneのアプリからAWSにアクセスするテストです。
とりあえず結果だけ。説明は後ほど。
テスト概要
- Lambda実行とCloudWatchLogsに書き込み出来るロールを作成します。
- Lambdaの作成と同時にAPI Gatewayも作成します。
- Lambdaにロールを設定します。
- API Gateway を作成します。
- kintoneアプリを新規に作成します。
- kintoneにAPI GatewayにPOSTするコードを作成します。
- kintoneアプリを実行します。
- CloudWatchにアクセスしてログを確認します。
1. Lambda実行とCloudWatch Logs 書き込みロールの作成
- IAMコンソールにてIAMロールを選択
- ロールの作成を選択
- 利用するサービスにLambdaを選択
- アタッチポリシーに一覧から「AmazonAPIGatewayPushToCloudWatchLogs」を選択
- ロール名を入力してロールを保存します
2. Lambda作成とAPI Gatewayの設定
- Lambdaコンソールにて関数の作成を選択
- 1から作成を選択
- Lambdaファンクション名を入力
- ランタイムでRuby2.5を選択
- 既存のロールにて前段で作成したロールをリストから選択
- 関数の作成を押下
- 保存押下
- トリガーの追加からAPI Gatewayを選択
- 新規APIの作成を選択
- セキュリティを選択
- 追加を押下
- 保存を押下してAPI Gatewayをデプロイ
- APIエンドポイントの生成を確認
- テストを選択
- テストイベントを保存
- テスト実行
- CloudWatchコンソールからログを選択
- ログを確認
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",