Azure Functions에서 서버리스에 빨리 Hipchat 통지 해보기

전제 정보



이번에 해보는 것


  • Azure Fuctions를 사용하여 시간을 트리거하고 Hipchat에 메시지를 게시합니다.

    사용 사례


  • Azure Functions를 사용해보고 싶습니다
  • Chat Tool에 시간이 지나면 메시지를 알리고 싶습니다.
  • 이번에는 HipChat을 대상으로하고 있지만 Slack 등으로 대체하는 것도 그리 어렵지 않습니다.


  • 쓰지 않는 것


  • Azure에 대한 자세한 설명
  • Azure Functions에 대한 자세한 설명
  • HipChat API에 대한 자세한 설명

  • 절차



    Hipchat에서 필요한 정보를 가져옵니다.



    아래를 참고로 통보하고 싶은 Hipchat Room의 Room ID와 Token을 취득해 주세요.
  • htps : /// cc l. 이오 / 자 / 도 CS / 엔 트리 / 호 w와 / 아 rts / 히 p t

  • FunctionApp 만들기



    Azure 포털 에서 Function App 을 검색하여 만듭니다.


    필요한 정보를 입력하고 작성합니다.
    물론 ARM 템플릿을 흘려 넣어 작성하는 것도 가능하기 때문에, 특기인 분은 꼭 그쪽에서.


    잠시 후 완성입니다.


    Function 만들기



    완성된 Function App에 함수를 만듭니다.
    레프트 네비게이션 함수 옆에 있는 + 아이콘을 눌러 템플릿을 선택합니다.
    이번에는 자바 스크립트 (Node.js)에서 트리거를 Timer로 만들고 싶으므로 "TimerTrigger-JavaScript"를 선택하고 함수를 만듭니다.


    이제는 기본적으로 여기에 구현을 쓰면 OK입니다. 이 화면에서 함수를 실행하여 로그를 확인할 수도 있으므로 부담없이 코드를 작성할 수 있습니다.


    Node.js의 Request 모듈 설치



    이번에 HTTP Request를 보내고 싶으므로 Request 모듈을 설치합니다.
    Azure Function의 뒷면은 사실은 Azure WebApp과 다르지 않으므로 조금 kudu에서 넣어 버립니다.
    이전의 FunctionApp 화면에서 URL을 찾습니다.


    해당 URL의 FunctionAppName 뒤에 '.scm'을 붙여 Kudu에 액세스합니다.
    https://${FunctionAppName}.scm.azurewebsites.net/


    상단 탭에서 Debug Console > CMD를 탭합니다.


    콘솔에서 다음을 수행하여 모듈을 설치합니다.
    # 異動
    $ cd site/wwwroot
    
    # モジュールインストール
    $ npm init
    $ npm install request --save
    

    코드를 작성하고 실행



    이제 준비가 되었으므로 이전 함수 페이지에서 코드를 작성합니다.
    module.exports = function(context,myTimer) {   
      if (myTimer.isPastDue) {
        context.log('JavaScript is running late!');
      }
      var request = require('request');
      var options = {
        url:     'https://api.hipchat.com/v2/room/**RoomId**/notification?auth_token=**token**'
       ,method:  'POST'
       ,headers: 'Content-type: application/json'
       ,json: {
          "from":           "Test Bot"
         ,"message":        "I love AKB48!!"     // メッセージ本文
         ,"color":          "purple"
         ,"notify":         "true"
         ,"message_format": "text"
        }
      };
      request.post(options, function (error, response, body) {
        context.log("Response Code : "+response.statusCode);
      })
      context.done();
    }
    

    이번 사용한 API에 대해서는 Send room notification API Reference 를 참고해 주세요.

    코드를 실행하면 로그도 표시됩니다.


    단지 이것만으로, 실제로 Hipchat에게 통지를 할 수 있었습니다!!


    Timer 트리거를 조정하려면



    레프트 네비게이션 통합에서 일정을 설정할 수 있습니다.


    자세한 내용은 여기을 참조하십시오.

    감상



    Preview 시대에 Azure Function에서 연주했지만 GA를 사용하여 사용하기 쉬워졌습니다.
    이번에는 시간을 트리거로 만들었지만,
  • Azure Blob
  • Azure Queue
  • Service Bus
  • Github
  • WebHook
  • HTTP 요청

  • 등을 트리거 할 수 있으므로,
  • 대기열을 트리거하고 임의의 처리를 비동기 적으로 실행합니다.
  • Blob에 이미지가 업로드되면 미리보기 이미지를 만듭니다.
  • Github에 Push되면 Blob에 콘텐츠를 배치합니다.

    등등 여러가지 용도로 이용할 수 있을 것 같네요.
    주위의 것은 Azure Functions가 잘 해 주므로 메인 처리의 코드에 집중할 수 있을 것 같습니다.
  • 좋은 웹페이지 즐겨찾기