WorkflowsをCloud Schedulerでスケジュール実行する

WorkflowsをCloud Schedulerでスケジュール実行する

WorkflowsをCloud Schedulerでスケジュール設定する方法を実際に試してみました。
Clock Icon2024.10.16

概要

Workflowsを起動する方法はgcloudコマンドで起動したり、Cloud Run関数で起動したり、Cloud Schedulerで起動したりなどいろいろな方法があると思います。
そんな中で今回はよくある手法と思われるCloud SchedulerからのWorkflows起動をやってみたいと思います。

やりたいこと

  • WorkflowsをCloud Schedulerで起動したい

※起動するワークフローは作成済の想定です

やってみる

準備

Cloud SchedulerがWorkflowsを起動できるようにサービスアカウントを作成します。
適当な名前でサービスアカウントを作成します。

gcloud iam service-accounts create サービスアカウント名

Workflowsを呼び出すための権限workflows.invokerを作成したサービスアカウントへ付与します。

gcloud projects add-iam-policy-binding プロジェクトID \
  --member serviceAccount:サービスアカウント名@プロジェクトID.iam.gserviceaccount.com \
  --role roles/workflows.invoker

サービスアカウントが作成できたらスケジューラ設定をします。

コマンドでスケジューラ設定する

以下のコマンドで作成します。
gcloud scheduler jobs create http
https://cloud.google.com/sdk/gcloud/reference/scheduler/jobs/create/http
最低限の設定をしたサンプルは以下となります。

gcloud scheduler jobs create http スケジュール名 \
    --schedule="20 20 * * *" \
    --uri="https://workflowexecutions.googleapis.com/v1/projects/プロジェクトID/locations/リージョン/workflows/ワークフロー名/executions" \
    --time-zone="Asia/Tokyo" \
    --oauth-service-account-email="サービスアカウント名@プロジェクトID.iam.gserviceaccount.com" \
    --location=asia-northeast1

簡単に項目の説明をします。

項目名 説明
schedule スケジュール実行タイミング。cron形式で指定。サンプルは毎日20時20分に実行
uri ワークフロ−のURI。作成済ワークフローの名前やプロジェクトIDをもとに組み立てます
time-zone タイムゾーン。日本標準時の場合はAsia/Tokyoを指定。他のタイムゾーンを指定する場合はこのリンクからTZ identifierをもとに探します
oauth-service-account-email サービスアカウントのメールアドレスを指定します
location ワークフローがデプロイされているリージョンを指定します

上記を実行するとスケジューラ設定されます。
gcloud scheduler jobs listにて一覧取得して設定が存在するか確認してみます(スケジューラ設定状況によってはさきほど設定したもの以外も出力されます)。

$ gcloud scheduler jobs list --location=asia-northeast1
ID: test
LOCATION: asia-northeast1
SCHEDULE (TZ): 20 20 * * * (Asia/Tokyo)
TARGET_TYPE: HTTP
STATE: ENABLED

意図した設定通りでした。Workflowsのワークフロー詳細 > トリガーからも確認することができます。
スクリーンショット 2024-10-16 20.43.41

Workflowsのコンソールからスケジューラ設定してみる

ワークフローの詳細の画面で編集を押下します。
スクリーンショット 2024-10-16 20.48.22

画面最下部の新しいトリガーを追加を押下します。
スクリーンショット 2024-10-16 20.50.17

Cloud Schedulerを選択します。
スクリーンショット 2024-10-16 20.51.27

スケジュール名や頻度などを設定します。。
スクリーンショット 2024-10-16 20.54.43

先ほどコマンドで設定した時と同じですので説明は割愛します。
続行を押下するとログレベルやサービスアカウントの設定になるので最初に作成したサービスアカウントを指定します。
スクリーンショット 2024-10-16 21.09.34

作成ボタンを押下するとスケジュール設定が作成されます。
スクリーンショット 2024-10-16 20.58.39

問題ない流れだと思います。

補足

Workflowsのコンソールやコマンドで作成したスケジューラ設定はCloud Schedulerのコンソールからも確認することができます。
スクリーンショット 2024-10-16 21.02.57

所感

Workflowsを起動する方法はたくさんありますが、Cloud Schedulerから起動することが多いと思います。
特に難しい内容はありませんでしたが、コマンドで作成する時タイムゾーンのデフォルトはUTCになっているようなので指定を忘れないようにしたほうがいいなと思いました。

--time-zone=TIME_ZONE; default="Etc/UTC"
Specifies the time zone to be used in interpreting --schedule. The value of this field must be a time zone name from the tz database (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
Note that some time zones include a provision for daylight savings time. The rules for daylight saving time are determined by the chosen time zone.
For UTC use the string "utc". Default is "utc".
スケジュールの解釈で使用するタイムゾーンを指定します。このフィールドの値は、tzデータベース(https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)のタイムゾーン名でなければなりません。
タイムゾーンによっては、サマータイムの規定があることに注意してください。サマータイムのルールは、選択したタイムゾーンによって決定される。
UTCの場合は文字列 「utc」を使用する。デフォルトは 「utc」です。 (DeepL翻訳)

コマンドの引数を省略したときに、意図せずデフォルト値が設定されてしまうということは障害にもつながりかねないので気をつけたいですね。

以上です。それではまた。ナマステー

参考

https://cloud.google.com/workflows/docs/schedule-workflow?hl=ja

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.