[Firebase] 예약 함수 (Schedule functions) 사용법
Firebase cloudFunctions 관련 내용은 몇 번 봤는데, schedule functions 관련은 자료를 많이 찾지 못해서 겸사겸사 기록용으로...
참고한 건 firebase 공식 문서.
함수 예약 | Firebase Documentation
Join Firebase at Google I/O online May 11-12, 2022. Register now 의견 보내기 함수 예약 지정된 시간에 함수를 실행하도록 예약하려면 functions.pubsub.schedule().onRun()을 사용하세요. 이 간편한 메서드는 Pub/Sub 주제
firebase.google.com
문서에 따르면, 예약 함수(Schedule functions)란 사용자가 정한 일정에 따라 실행되도록 만든 함수를 말한다고 한다. 매일 정오에 함수가 실행되게 한다든지, 매분 실행되게 한다든지, 매달 특정 날짜에 실행되게 한다든지... 등의 작업을 할 수 있다.
이하 Firebase Functions 작업을 위한 기본 환경이 갖춰져 있다는 전제 하에 작성한다.
1. 환경 설정
특별히 해줄 환경 설정은 없다. 배포 방법도 Firebase Functions 배포하던 방법대로 하면 되고, 작성 역시 다른 functions와 함께 index.js에 작성하면 된다.
2. 함수 format
firebase 공식 문서에 적힌 그대로 사용해도 문제는 없겠지만, 그렇게 작성하면 설정 변경으로 번거로워질 여지가 있어서...
exports.test = functions.region('asia-northeast3')
.runWith({ timeoutSeconds: 300 }) // timeout
.pubsub
.schedule('0 1 * * *') // 실행 주기
.timeZone('Asia/Seoul') // timezone
.onRun((context) => {
console.log('Hello world');
return null;
});
pubsub를 제외하면 차례대로 Region, Timeout 설정, Schedule(실행 주기), TimeZone 설정이다.
- Timeout: 설정된 시간이 지나도록 함수가 종료되지 않으면, Firebase 차원에서 강제로 종료시킨다. 설정해두지 않으면 기본으로 1분이 적용되며, 최대 9분(540초)까지 설정할 수 있다.
- Schedule: 함수를 실행시킬 작업 일정. 정해진 시간이 되면 onRun에 작성한 함수가 실행된다. 문서 예시대로 every 5 minutes, every 1 hours 등으로도 적을 수 있지만 보다 정확한 시각을 정하려면 아래 링크의 양식을 참고한다. 위 코드에서 정한 작업 일정은 매일 새벽 1시가 된다.
크론 작업 일정 구성 | Cloud Scheduler 문서 | Google Cloud
의견 보내기 크론 작업 일정 구성 이 페이지에서는 일정 설명을 위해 unix-cron 형식 사용에 대해 간단히 설명합니다. 또한 기존 App Engine 크론 구문을 사용하여 일정을 설명할 수 있습니다. 작업 일
cloud.google.com
3. 배포 및 디버그
- 디버깅은 현재 function ignored because the pubsub emulator does not exist or is not running.에러와 함께 계속 실패하기만 해서 패스...
- 대신 함수를 배포해가며 테스트했다.
firebase deploy --only functions
firebase hosting:channel:deploy test
firebase deploy --only functions:test,functions:test2
4. Google Cloud console
- 배포한 함수는 Firebase Functions 탭에서 확인할 수 있는데, 예약 함수가 아닌 다른 함수들과 마찬가지로 Google Cloud console의 Cloud Functions 탭에서도 확인할 수 있다.
'공통 개념, 기타 작업' 카테고리의 다른 글
loop break (0) | 2022.03.17 |
---|---|
[AWS lamda] response 양식 및 encoding 문제 (0) | 2022.03.17 |