현재 진행중인 프로젝트에서 지정된 시간에 알림을 보내야하는 필요가 생겼다. 그래서 지정된 시간에 함수를 실행할 수 있도록 예약 함수를 지원하는 cloud function을 사용했고 그 내용을 정리하려한다. 자세한 내용은 공식문서 를 참고하자
프로젝트에서 cloud functions 를 사용하려면 firebase, functions 세팅이 필요하다. [Firebase] Cloud Functions 세팅 글을 참고하거나 구글링을 통해 세팅을 완료하고 다음으로 넘어가야한다.
코드는 공식문서 참고했습니다.
exports.scheduledFunction = functions.pubsub.schedule('every 5 minutes').onRun((context) => {
console.log('5분 지남')
return null
});
'every 5 minutes' -> 함수 배포 시간 기준 5분 반복 실행
'every 1 hours' -> 함수 배포 시간 기준 1시간 반복 실행
만약 'every 5 minutes' 함수를 13시 07분에 배포했으면 다음 함수는 13시 12분, 13시 17분 ... 이렇게 실행이 된다.
exports.scheduledFunctionCrontab = functions.region("asia-northeast3").pubsub.schedule('* * * * *').timeZone("Asia/Seoul").onRun((context) => {
console.log('1분 마다 실행');
return null;
});
Unix Crontab 및 App Engine 구문을 이용해서 특정 시간대를 선택할 수도 있다. Crontab 페이지에서 자신이 원하는 시간 구문을 확인 및 테스트 할 수 있다.
예시로 몇개만 적어보면
* * * * * -> 매분 실행
*/5 * * * * -> 5분 기준으로 실행 (5분 10분 15분 20분 ...)
5,40 * * * * -> 5분, 40분 마다 실행
15 14 1 3 * -> 3월 1일 14시 15분에 실행
timezone을 따로 설정안해주면 default가 America/Los_Angeles로 되어있어서 원하는 시간에 제대로 실행이 안될수도 있으니 꼭 timezone 설정을 해주자. (추가로 region 설정을 안해주니 실행이 안되어서 region도 수정했다..)
터미널에서 functions 폴더로 이동하고 firebase deploy --only "functions:functionName" 를 입력하면 함수가 추가된다.