IBM Cloud Functions alarm package의 cron seconds 필드에 대한 참고 사항

소개



IBM Cloud Functions에서 정기적으로 트리거를 하고 싶어서 alarm package를 이용했습니다.
분당 여러 번 발생하는 트리거는 강제로 중지되므로 주의하십시오.

Alarm package 문서/리포지토리



  • Using alarms to schedule triggers - IBM Cloud Docs
  • 출처

  • apache/incubator-openwhisk-package-alarms - GitHub

  • 세 종류의 feeds



    OpenWhisk alarm package에는 트리거feed의 세 가지 유형이 있습니다.
  • Interval ( /whisk.system/alarms/interval )
  • 최소 1분 간격.
  • startDate, stopDate 옵션 지정 가능.

  • Once ( /whisk.system/alarms/once )
  • 지정된 날짜와 시간.
  • deleteAfterFire 옵션 지정 가능.

  • Alarm ( /whisk.system/alarms/alarm )
  • cron 지정. 「초」필드의 지정도 가능.
  • IBM Cloud Docs는 6 필드 기법을 언급하지 않았지만 사용할 수있었습니다.

  • startDate, stopDate 옵션 지정 가능.
  • maxTriggers 옵션은 deprecated이며 곧 사용되지 않습니다. 기본값은 -1(제한 없음)
  • IBM Cloud Docs에서 maxTriggers에 대한 설명이 이미 삭제되었습니다.



  • interval 사용 또는 alarm 사용



    정기적으로 트리거를 일으키는 것은 intervalalarm feed 가 있습니다만, 분 간격 밖에 지정할 수 없는 interval 에 대해서, cron 로 유연한 지정이 가능해 초간격도 지정할 수 있어 옵션도 거의 같은 alarm 만 사용하면 부족한 것 같습니다.

    단, maxTriggers 옵션 폐지 후의 움직임은 신경이 쓰입니다. (제한 없는 사양이 계속되는지 여부)

    Alarm feed (cron)을 사용해 보았습니다 (*/20 * * * * *)



    20초 간격 트리거를 시도했습니다. (1분에 3회 발생)

    절차



    다음 샘플에서 maxTriggers 옵션을 제외하고 실행했습니다.
    최신 OpenWhisk 사양에 따르면 maxTriggers 생략하면 최대 실행 횟수 제한이 없습니다.
    $ ibmcloud fn action create handler handler.js
    $ ibmcloud fn trigger create every-20-seconds \
      --feed  /whisk.system/alarms/alarm \
      --param cron '*/20 * * * * *'
    $ ibmcloud fn rule create \
      invoke-periodically \
      every-20-seconds \
      handler
    

    결과



    트리거를 작성한 것은 2018-09-28 의 16:25 (일본 시간)이었습니다.
    $ ibmcloud fn trigger get --summary every-20-seconds | jq .response.result.status
    {
      "active": true,
      "dateChanged": 1538119522935,
      "dateChangedISO": "2018-09-28T07:25:22Z"
    }
    

    2018-09-29 의 05:45:20 (일본 시간)을 마지막으로 끝내고 있다…


    ADMIN에서 Trigger frequency is not supported로 인해 무효화되었습니다.
    $ ibmcloud fn trigger get --summary every-20-seconds | jq .response.result.status
    {
      "active": false,
      "dateChanged": 1538119522935,
      "dateChangedISO": "2018-09-28T07:25:22Z",
      "reason": {
        "kind": "ADMIN",
        "message": "Trigger frequency is not supported"
      }
    }
    

    Alarm feed (cron)을 사용해 보았습니다 (20 * * * * *)



    분당 20초에 발생하는 트리거를 시도했습니다. (1분에 1회 발생)

    절차



    트리거 이름을 every-20-second (seconds에서 변경)로 변경하고 cron20 * * * * *로 수정했습니다.
    $ ibmcloud fn action create handler handler.js
    $ ibmcloud fn trigger create every-20-second \
      --feed  /whisk.system/alarms/alarm \
      --param cron '20 * * * * *'
    $ ibmcloud fn rule create \
      invoke-periodically \
      every-20-second \
      handler
    

    결과



    트리거를 만든 것은 2018-09-29 의 23:30 (일본 시간)이었습니다.
    $ ibmcloud fn trigger get --summary every-20-second | jq .response.result.status
    {
      "active": true,
      "dateChanged": 1538231425486,
      "dateChangedISO": "2018-09-29T14:30:25Z"
    }
    

    2018-09-30 의 15:27:20 (일본 시간)에서도 제대로 움직이고 있습니다.



    고찰



    OpenWhisk는 1분에 여러 번 발생하는 트리거를 설정할 수 있는 사양입니다.
    그러나 매분 특정 초 수에 트리거를 일으킬 수 있으므로 (cron 초 필드 자체는 지원됨), 동일한 action을 여러 트리거와 연결하면 1 분에 여러 번 발생하는 것은 어렵습니다. 없는 것 같습니다.
    (예를 들어, 분당 0초, 분당 20초, 분당 40초의 각각의 트리거를 생성한다.)

    좋은 웹페이지 즐겨찾기