App Engine Cron Service를 사용하면 지정된 시간이나 주기적인 간격으로 작동하는 정기 예약 태스크를 구성할 수 있습니다. 이러한 태스크를 일반적으로 크론 작업이라고 합니다. 이러한 크론 작업은 App Engine Cron Service에 의해 자동으로 트리거됩니다. 예를 들어 크론 작업을 사용하여 일일 보고 이메일을 보내거나 10분마다 캐시된 일부 데이터를 업데이트하거나 매시간 요약 정보를 업데이트할 수 있습니다.
크론 작업은 크론 작업이 구성된 동일한 앱의 지정된 엔드포인트에 대해 예약된 HTTP GET
요청을 수행합니다. 이 엔드포인트의 핸들러는 호출 시 로직을 실행합니다.
App Engine Cron Service는 App Engine 호스트 앱 외부의 웹 엔드포인트를 호출하는 데 사용할 수 없습니다. 호스트 앱 이외의 다른 앱에서 App Engine 엔드포인트를 호출하는 데 사용할 수 없습니다.
크론 작업 요청에는 push 태스크 큐의 경우와 동일한 제한이 적용됩니다.
시작하기 전에
일정을 배포하거나 업데이트하려면 계정에 다음 IAM 역할 중 하나가 필요합니다.
- 소유자
- 편집자
Google Cloud 콘솔의 IAM 페이지에서 권한을 설정할 수 있습니다.
크론 작업 만들기
- 애플리케이션의 루트 디렉터리에 (
app.yaml
과 함께)cron.yaml
파일을 만듭니다. 파일에 하나 이상의
<cron>
항목을 추가하고 필수<url>
및<schedule>
요소를 포함하여 작업에 필요한 요소를 정의합니다.cron.yaml
파일의 요소에 대한 자세한 내용은 cron.yaml 구문 및 옵션을 검토하세요.다음은 매일 실행되는 기본 크론 작업을 만드는 예입니다.
cron: - description: "daily summary job" url: /tasks/summary target: beta schedule: every 24 hours
타겟팅 사양은 선택사항이며 서비스/버전 이름입니다. 해당되는 경우 타겟이 앱의 호스트 이름 앞에 추가되어 작업 경로가 해당 서비스/버전으로 지정됩니다. 타겟을 지정하지 않으면 작업이 트래픽용으로 구성된
default
서비스의 버전에서 실행됩니다.크론 작업 URL의 핸들러를 만듭니다. 이 핸들러는 예약하려는 모든 작업을 실행합니다. 핸들러는 200~299(경계 포함) 범위의 HTTP 상태 코드로 응답하여 성공을 표시합니다. 다른 상태 코드도 반환될 수 있으며 이 코드는 크론 작업을 다시 시도하는 데 사용됩니다.
개발 서버에서 크론 작업 테스트
로컬 개발 서버는 크론 작업을 자동으로 실행하지 않습니다. 기능을 테스트하도록 사용자가 크론 작업의 URL에 직접 요청할 수 있습니다. 로컬 크론 또는 예약된 태스크 인터페이스를 사용하여 curl 또는 유사한 도구로 작업의 URL을 트리거할 수 있습니다.
로컬 개발 서버의 관리자 인터페이스를 사용하여 http://localhost:8000/cron
에서 크론 작업을 볼 수 있습니다.
실패한 크론 작업 다시 시도
크론 작업의 요청 핸들러가 200~299(경계 포함) 범위를 벗어나는 상태 코드를 반환하면 App Engine은 작업이 실패한 것으로 간주합니다. 기본적으로 실패한 작업은 503 상태 코드가 반환되지 않는 한 다시 시도되지 않습니다. 503 상태 코드가 반환된 경우에는 성공하거나 200~299 상태 코드가 반환될 때까지 매분마다 실패한 작업이 다시 시도됩니다.
실패한 작업을 다시 시도하도록 설정하려면 다음 안내를 따르세요.
cron.yaml
파일에retry_parameters
블록을 포함합니다.retry_parameters
블록에서 retry 매개변수를 선택 및 설정합니다.예를 들어 이 샘플
cron.yaml
파일에는 재시도 횟수 최대 5회(기본값, 처음에는 2.5초로 시작하여 매회 두 배로 증가하는 백오프)로 구성된 단일 크론 작업이 있습니다.cron: - description: "retry demo" url: /retry schedule: every 10 mins retry_parameters: min_backoff_seconds: 2.5 max_doublings: 5
크론 작업 배포
cron.yaml
구성 파일에 지정된 크론 작업을 배포하려면 다음 명령어를 실행합니다.
gcloud app deploy cron.yaml
모든 크론 작업 삭제
모든 크론 작업을 삭제하려면 다음 안내를 따르세요.
cron.yaml
파일의 콘텐츠를 다음과 같이 수정합니다.cron:
cron.yaml
파일을 App Engine에 배포합니다.
크론용 URL 보호
크론 핸들러는 app.yaml
에 정의된 일반 핸들러에 지나지 않습니다. 관리자 계정에 대한 액세스를 제한하여 사용자가 예약된 태스크에서 사용되는 URL에 액세스하지 못하도록 할 수 있습니다. 예약된 태스크는 관리자 전용 URL에 액세스할 수 있습니다. app.yaml
의 핸들러 구성에 login: admin
을 추가하여 URL을 제한할 수 있습니다.
app.yaml
에서의 예시는 다음과 같습니다.
runtime: python27
api_version: 1
handlers:
- url: /report/weekly
script: reports.app
login: admin
자세한 내용은 app.yaml 참조에서 로그인 또는 관리자 상태 요구 방법을 확인하세요.
크론 작업을 테스트하려면 관리자로 로그인하고 브라우저에서 핸들러 URL을 방문합니다.
Cron Service에서 보내는 요청에는 HTTP 헤더가 포함됩니다.
X-Appengine-Cron: true
X-Appengine-Cron
헤더는 App Engine에 의해 내부적으로 설정됩니다. 요청 핸들러가 이 헤더를 발견하면 요청이 크론 요청임을 신뢰할 수 있습니다. 앱에 대한 외부 사용자 요청에 있는 헤더는 삭제됩니다. 단, 테스트용으로 헤더를 설정할 수 있는 로그인한 애플리케이션 관리자의 요청인 경우에는 헤더가 삭제되지 않습니다.
App Engine은 IP 주소 0.1.0.2
에서 크론 요청을 보냅니다. 이전 gcloud 버전(326.0.0 이전)으로 생성된 크론 작업의 경우 0.1.0.1
에서 크론 요청이 발생합니다.
Google Cloud Endpoints 호출
크론 작업의 url
필드에는 Google Cloud Endpoint를 지정할 수 없습니다.
크론 작업이 Google Cloud Endpoint를 호출하도록 하려면 앱에서 핸들러가 제공하는 타겟으로 요청을 보내고 핸들러 코드에서 엔드포인트 클래스와 메서드를 호출합니다.
Google Cloud 콘솔에서 크론 작업 보기
Cloud Scheduler의 App Engine 크론 작업 탭에서 예약된 크론 작업을 볼 수 있습니다.
로그를 확인하여 크론 작업이 추가되거나 삭제된 시기를 확인할 수도 있습니다.
자세히 알아보기
크론 작업 정의에 대한 자세한 내용은 cron.yaml 참조에서 확인하세요.