Alibaba Function Compute로 kintone 정기 실행

kintone의 정기 실행을 Alibaba Function Compute (node.js)에서 시도했습니다.
이번은 1시간마다 kintone 앱의 레코드 건수를 취득하는 처리입니다.
기본적인 구조는 Azure Functions와 같은 다른 서버리스와 마찬가지로 쉽게 정기적으로 실행할 수 있습니다.

개발 환경



kintone 협력의 Alibaba Function 개발 메모 과 같습니다.

kintone API 토큰



kintone 앱 설정 화면에서 REST API에서 사용할 API 토큰을 발행합니다.
평가할 API를 통해 액세스 권한을 설정할 수 있습니다.



Function Compute 구성



이번에는 정기 실행을 하기 위해 타임 트리거를 정의합니다.

  • 지역 : 도쿄, 상하이 등이 선택 가능
  • 서비스: Function Compute 리소스를 관리하기 위한 단위
  • 함수: 시스템 스케줄링 및 조작 단위
  • 트리거 : 시간 트리거는 여기에 정의




  • 만든 함수 개요



    kintone 의 레코드수가 적으면, 메모리 128 MB, 타임 아웃 60 초로 충분합니다.



    타임 트리거



    설정 시에는 간격 60분을 지정했지만, 저장 후에 보면 Cron 식으로 변환되고 있었습니다.


    환경 변수



    환경 변수를 설정하여 함수 내에서 사용할 수 있습니다.
    kintone URL, APPID, API 토큰 등을 환경 변수로 설정하여 사용합니다.

    node 참조 예
    process.env['KINTONE_URL']

    코드



    request, request-promise 를 사용하여 kintone REST API 을 호출합니다.

    f_check_records.js
    /*
     * Alibaba Function : kintone get records 
     * 2018.10.30 by rex0220
     */
    'use strict';
    const rp = require('request-promise')
    module.exports.handler = function(event, context, callback) {
    
        // get kintone records
        var getRecords = function(query) {
            var req = {
                "method": "GET",
                "url": process.env['KINTONE_URL'] + '/k/v1/records.json',
                "headers": {
                    "X-Cybozu-API-Token": process.env['KINTONE_API_KEY']
                },
                "qs": {
                    app: process.env['KINTONE_APPID'],
                    query: query,
                    totalCount: true
                },
                "json": true,
            };
            // console.log('get record req: ', JSON.stringify(req));
            return req;
        };
    
        // main
        rp(getRecords('対応日時 >= "2018-06-01" limit 1')).then(function(resp) {
            console.log('get record done: ', JSON.stringify(resp));
            callback(null, 'records count: ' + resp.totalCount);
        }).catch(function(error) {
            console.log('error: ' + error.message);
            callback('Error get kintone records, ' + err.message, null);
        });
    };
    

    실행 결과



    1시간마다의 정기 실행이라면, 무료 프레임 내에서 끝난 것 같습니다.

    청구된 시간 300ms
    최대 사용 메모리 128MB
    메모리 30.71 MB



    참고 URL



    kintone REST API의 공통 사양
    Function Compute 개요

    후기



    kintone 으로 정기 실행하는 구조를 간단하게 JavaScript 로 구축할 수 있는 것은 기쁘네요.

    좋은 웹페이지 즐겨찾기