App EngineのCronの設定と注意点

こんにちはGMOアドマーケティングのy.yです。

 

App EngineのCronの設定と注意点の記事になります

 

引用参考URL

https://cloud.google.com/appengine/docs/standard/go/scheduling-jobs-with-cron-yaml?hl=ja

https://cloud.google.com/sdk/gcloud/reference/app/deploy?hl=ja

 

概要

  • タスク上限について
  • タスク設定について
  • App Engineからのリクエスト検証について
  • gcloud app deployのFlagについて
  • 注意点

 

タスク設定上限

  • 無料アプリケーション:最大20個
  • 有料アプリケーション:最大250個

 

タスク設定

App Engineのタスクスケジュールはcron.yamlファイルを使用して構成され、Cronサービスの呼び出しはHTTP GET リクエストで実行されます

 

各ブロックの説明

  • url
    • 必須
    • ジョブの実行URL
  • schedule
    • ジョブの実行スケジュール
    • 書式
      • schedule: [TYPE] [INTERVAL_VALUE] [INTERVAL_SCOPE]
  • deccription
    • ジョブの説明
  • timezone
    • ジョブスケジュールに使用するタイムゾーン
  • target
    • アプリ内の具体的なサービス名
  • retry_parameters
    • 再試行の指定
      • job_retry_limit
        • 再試行回数の最大値。最小値0最大値5
      • job_age_limit
        • 再試行する制限時間。単位はsが秒mが分hが時間dが日
      • min_backouff_seconds
        • 再試行するまでの最小待機時間(秒)
      • max_backouff_seconds
        • 再試行するまでの最大待機時間(秒)
      • max_doublings
        • 再試行されるまでの感覚が埋蔵する最大回数

 

Cronサービスのスケジューリング例

  • 毎分実行の例
    • 毎日0:00に実行を開始し1分間隔で実行
      • schedule: every 1 minutes
    • 毎日10:00〜14:00に5分間隔で実行
      • schedule: every 5 minutes from 10:00 to 14:00
  • 毎時実行の例
    • 毎日0:00〜23:00に1時間ごとに実行
      • schedule: every 1 hours from 00:00 to 23:00
    • 毎日0:00を起点に1時間ごとに実行
      • schedule: every 1 hours synchronized
  • 日時実行の例
    • 毎日1:00に実行
      • schedule: every day 01:00
  • 曜日実行の例
    • 毎週月曜1:00に実行
      • schedule: every monday 01:00
      • 曜日指定
        • monday or mon
        • tuesday or tue
        • wednesday or wed
        • thursday or thu
        • friday or fri
        • saturday or sat
        • sunday or sun
        • 全ての曜日を指定するにはdayを使用
  • 月実行の例
    • 9、10、11月の最初の1週の月曜日の09:00に1回ずつ実行
      • schedule: 1st monday of sep,oct,nov 09:00
      • 月指定
        • january or jan
        • february or feb
        • march or mar
        • april or apr
        • may
        • june or jun
        • july or jul
        • august or aug
        • september or sep
        • october or oct
        • november or nov
        • december or dec
  • その他例
    • 毎日00:00に実行
      • schedule: every day 00:00
    • 毎週月曜日の09:00に実行
      • schedule: every monday 09:00
    • 3月の第2水曜日の17:00に1回だけ実行
      • schedule: 2nd wednesday of march 17:00
    • 5月の最初の2週の月曜日、水曜日、金曜日の10:00に1回ずつ、合計で6回実行
      • schedule: 1st,second mon,wed,fri of may 10:00
    • 1週間に1回実行する。毎月1日を起点として7日ごとの09:00に1回実行
      • schedule: 1,8,15,22 of month 09:00
    • 隔週で実行する。毎月第1および第3月曜日の04:00に1回実行
      • schedule: 1st,third monday of month 04:00
    • 毎年3回実行する。9月、10月、11月の第1月曜日の09:00に1回実行
      • schedule: 1st monday of sep,oct,nov 09:00
    • 四半期ごとに1回実行。1月、4月、7月、10月の初日の00:00に1回実行
      • schedule: 1 of jan,april,july,oct 00:00

 

cronリクエストの検証

URLに対するリクエストがApp Engineから発生したものであることを確認する場合、HTTPヘッダーと送信元IPアドレスで検証することができます

  • HTTPヘッダー
    • X-Appengine-Cron: true※クライアントがこのヘッダーを送信するとリクエストから削除されます
  • IP
    • 0.1.0.2
    • 10.0.0.1

example(golang)

 

gcloud app deployのFlag

  • –appyaml=APPYAML
    • 特定のapp.yamlを指定
  • –bucket=BUCKET
    • デプロイに関連付けられたファイルをステージングするために使用されるGoogleCloudStorageバケット
  • –no-cache
    • ビルドステップ中にキャッシュされた依存関係を使用しない
  • –ignore-file=IGNORE_FILE
    • 指定されたignorefileを使用
  • –image-url=IMAGE_URL
    • 特定のDocker imageを指定
  • –promote
    • デプロイされたバージョンをプロモートして、すべてのトラフィックを受信
  • –stop-previous-version
    • すべてのトラフィックを受信する新しいバージョンを展開するときは、以前に実行していたバージョンを停止
  • –nostop-previous-version
    • すべてのトラフィックを受信する新しいバージョンを展開するときは、以前に実行していたバージョンを停止しない
  • –version=VERSION
    • このデプロイメントによって作成または置換されるアプリのバージョン

 

注意点

  • ジョブの開始時刻に前のジョブが未完了の場合スキップされる
  • deploy時に実行中のジョブは停止される。但し、–no-stop-previous-version flagをつけgcloud app deploy することによって停止させないことが可能
  • ステータスコード200〜299以外を返した場合ジョブが失敗したものとされる
  • リトライはretry_parametersブロックでジョブを再試行。デフォルトではリトライはされない