Google Cloud 스케쥴러 이용해 보기

Linux 시스템에는 Crontab 이 있다.
Kubernetes 에는 Cronjob이 있고, Node.js 에는 Node-Cron 이 있다.

모두 일정한 주기를 가지고 반복되는 작업을 하는데 사용하는 도구들이다.

많은 개발자들이 Cron 을 애용하는데, Google 에서는 그래서 Cloud 스케쥴러를 만들었다.

위와 같은 화면이다. 왼쪽에 메뉴에서 찾으면 볼 수 있다. 어쩌면 봤을지도.

작업만들기를 누르면 다음과 같은 화면이 나온다.

우선 지역을 선택해야 한다. 자신이 주로 사용하는 지역을 선택한다. ( 사실 큰 의미는 없다. 구글에서 내부적으로 어느곳에 해당 시스템을 관리권한을 줄것인가 정하는것뿐. 아마 나중에는 사라질듯 하다. )

다음을 누르면 지역 설정을 하는 화면이 나온다. 일정 시간후에 다음과 같은 화면이 나온다.

단순하다. 이름을 정하고 , 설명을 넣고, 빈도를 정한뒤에 어떤것을 할지 정하면 된다. ( 시간대가 일본인건 조금 불만 .. 변경하자 )
시간대를 변경이 가능한점은 매우 장점인게, 지역별로 다르게 해야 하는 크론을 돌려야 할 경우 매우 편리하게 사용이 가능하다. 예를들면 A크론은 한국시간 기준, B크론은 샌프란시스코 기준으로 돌리는것이 가능하다는 의미다.

대상은 크게 3가지이다. Cloud Pub/Sub을 통해서 뭔가 Broadcasting을 할때 사용하는것, 혹은 App Engine으로 보낼때 사용하는것, 그리고 마지막으로 HTTP.

게시/구독은 예를들면 Kubernetes 에서 여러 Pod 이 해당 주제(topic)을 subscribe 하고 있을 경우 구독중인 모든 pod에게 “뭔가를 해라"라고 명령을 내리기 위해서 사용하면 좋다. 그러면 해당 pod 들은 “일하라는 신호가 왔다"라는 형태로 일괄적으로 모두 동시에 일하게 된다.

App Engine 으로 하는 부분은 HTTP와 비슷하므로 패스.

HTTP는 다음과 같은 화면으로 이뤄진다.

URL을 넣고, 메소드를 선택하고 만약에 POST와 PUT의 경우에는 Payload를 넣어서 보낼 수가 있다. DELETE 와 GET은 Payload가 없다.

앞에서 설명안했던 빈도는 일반적인 Crontab의 형식이다 * * * * * 은 다음과 같다.

각각의 * 은 위와 같은 의미를 가진다. 예를들어서 매 1시간 마다 동작시키려면 0 * * * * 을 입력하면 된다.

예를들어서 단순하게 1시간마다 구글에 접속하는 스케줄러를 만들어 보자 다음과 같이 한다.

만들어진 결과는 다음과 같다.

그런데, 함정이 하나 있다. 추가/삭제는 가능한데, 수정이 안된다.

아직 베타라서…

Update : Price & Limit

현재 가격은 기본 3개의 Cron 이 무료이다. 추가 1개당 매월 0.1$가 과금된다.
특이한점은 다른 일반적인 GCP정책들과 다르게 이것은 프로젝트당이 아니라, “계정"에 종속된다. (그도 그럴것이 계정이 달라도 Cron 은 돌릴 수 있으니까.. ) 예를들면 5개의 프로젝트에 각각 2개씩의 Cron 이 있을 경우 10개 중에서 3개는 무료, 나머지 7개는 유료로 과금이 된다.

그럴리는 없지만 너무 많이 사용하게 되면 제한 조건에 걸릴 수 있다.
1분에 최대 60개의 Cron 동작이 가능하고, 일간으로는 최대 1만건의 CronJob을 동작이 가능하다. 생성은 최대 250개의 CronJob이 생성 가능하다.

만약에 이 제한 조건을 넘게 되면 동작을 하지 않으니 사전에 추가 제한 요청을 해놓자.


어제 빠르게 볼 때는 비용을 몰랐는데, 만약에 여러개를 관리 해야 한다면, 비용상의 이슈를 생각하면 Kubernetes에 있는 CronJob을 사용하는게 나을 수도 있다. 각자 자신의 조건에 맞는 상품을 찾아서 사용하는것도 하나의 방법.