Firebase RemoteConfig가 업데이트될 때 Slack에 알림 보내기 with Cloud Functions for Firebase



하고 싶은 일


  • Firebase RemoteConfig가 업데이트 될 때 Slack이 좋아하는 채널에 알리는 메커니즘을 만듭니다

  • 준비



    사전 지식



    이번에 사용하는 서비스


  • Cloud Functions for Firebase
  • htps : // 푹 빠져라. 오, ぇ. 코 m/두 cs/푼c 치온 s/? hl = 그럼
  • Firebase 기능 및 HTTPS 요청과 같은 이벤트를 트리거로 백엔드 코드를 자동으로 실행할 수있는 서비스
  • 이번에는 Firebase RemoteConfig 업데이트를 트리거로 Slack에 메시지를 POST하는 메커니즘을 만든다.
  • 트리거 htps : // 푹 빠져라. 오, ぇ. 코 m / 드 cs / 훙 c 치온 s / rc-에 ゔ ㅇ ts? hl = 그럼



  • 환경 구축


  • 전제
  • Node.js 환경
  • Firebase CLI 설치
  • npm install -g firebase-tools



  • Firebase SDK for Cloud Functions 초기화


  • firebase login
  • 로그인

  • firebase login
    ? Allow Firebase to collect anonymous CLI usage and error reporting information? Yes
    
    Visit this URL on any device to log in:
    https://accounts.google.com/o/oauth2/auth?==HOGEHOGE
    
    Waiting for authentication...
    
    ✔  Success! Logged in as ログインしたメールアドレス
    
  • firebase init functions
  • CLI에서 대화식으로 프로젝트를 설정합니다.
  • 기본적으로 사용할 firebase 프로젝트를 선택
  • 도중 언어를 선택할 수 있으므로 TypeScript 를 선택
  • 나머지는 기본 Enter 에서 OK
  • 👇 같은 프로젝트를 할 수 있습니다


  • myproject
     +- .firebaserc    # Hidden file that helps you quickly switch between
     |
     +- firebase.json  # Describes properties for your project
     |
     +- functions/     # Directory containing all your functions code
          |
          +- package.json  # npm package file describing your Cloud Functions code.
          |
          +- tsconfig.json # Config file containing compiler options.
          |
          +- tslint.json   # Optional file containing rules for TypeScript linting.
          |
          +- src/     # Directory containing TypeScript source
          |   |
          |   +- index.ts     # main source file for your Cloud Functions code
          |
          +- lib/
              |
              +- index.js     # JavaScript output from TypeScript source.
              |
              +- index.js.map # Sourcemap file for TypeScript source.
    

    편리한 npm 패키지 설치


  • cd functions
  • npm install typed-slack
  • htps : // 기주 b. 코 m / s r 호시 / type ds ぁ ck

  • npm install request-promise
  • npm install @types/request-promise

  • Firebase 결제 요금제 변경




  • Firebase의 왼쪽 하단에있는 계획을 Blaze로 변경하십시오.
  • ※무료 플랜의 경우, CloudFunctions로 HTTP/S 통신을 할 수 없다.


  • 🛠 구현


  • 환경 변수 설정
  • Slack 게시물을위한 function 만들기
  • RemoteConfig 업데이트를 트리거로 Slack에 게시 function 만들기
  • 배포

  • Slack의 WebhookURL을 firebase 환경 변수로 설정
    firebase functions:config:set slack.webhook_url="https://hooks.slack.com/services/XXXXXX/XXXXXX/XXXXXX"
    

    슬랙 게시물에 대한 기능 만들기

    src/functions/slack.ts
    import * as functions from 'firebase-functions';
    import * as Slack from 'typed-slack'
    
    export function postToSlack(sendText: string, username: string, icon_emoji: string, channel: string) {
        const webhookURL = functions.config().slack.webhook_url
        const slack = new Slack.IncomingWebhook(webhookURL)
    
        slack.send({
            text: sendText,
            username: username,
            icon_emoji: icon_emoji,
            channel: channel
        }).catch(e => {
            console.error(e)
        })
    }
    

    RemoteConfig 업데이트를 트리거하여 Slack에 사용자 지정 텍스트 게시 function 만들기

    src/functions/notifyUpdate.ts
    
    import * as functions from 'firebase-functions';
    import * as slack from './slack';
    
    export const notifyUpdateRemoteConfigToSlack = functions.remoteConfig.onUpdate(versionMetaData => {
        const currentVersion = versionMetaData.versionNumber;
        const updatedUsername = versionMetaData.updateUser.name;
        const updatedUserEmail = versionMetaData.updateUser.email;
        const message = `RemoteConfig has updated! to v${currentVersion} by ${updatedUsername}(${updatedUserEmail})`;
        slack.postToSlack(message, 'リモコン更新検知マン', ':female-police-officer::skin-tone-2:', '#notify');
    })
    
  • 마지막으로 index
    src/index.ts
    import { notifyUpdateRemoteConfigToSlack } from './functions/notifyUpdate';
    
    export {
        notifyUpdateRemoteConfigToSlack,
    }
    
  • firebase deploy 에서 배포
  • ...
    ✔  functions: functions folder uploaded successfully
    i  functions: creating Node.js 6 function notifyUpdateRemoteConfigToSlack(us-central1)...
    ✔  functions[notifyUpdateRemoteConfigToSlack(us-central1)]: Successful create operation.
    
    ✔  Deploy complete!
    ...
    

    이런 식으로 나오면 배포 성공

    동작 확인


  • 프로젝트의 RemoteConfig를 무엇이든 좋기 때문에 갱신한다
  • 알림이 있으면 성공!



  • FAQ


  • Slack에게 알림이 오지 않습니다!
  • Firebase 플랜을 Blaze로 설정 했습니까?
  • Spark 플랜 (기본값)의 경우 Firebase Cloud Functions는 인터넷 통신이 불가능하므로 업그레이드해야합니다.

  • SlackWebHook의 URL이 맞습니까?
  • 환경 변수를 설정하고 있습니까?
  • 이 정보가 오래되었을 수 있습니다.
  • RemoteConfig 업데이트 트리거가 변경되었으며 더 이상 사용되지 않습니다


  • 좋은 웹페이지 즐겨찾기