このチュートリアルでは、Cloud Scheduler を使用してワークフローを自動的に実行し、ワークローが特定のスケジュール(この場合は 5 分ごと)で実行されるようにする方法について説明します。
目標
- ランタイム引数を受け取ることができるワークフローを作成してデプロイします。
- ワークフローをトリガーし、正しい形式の JSON 引数を渡して 5 分ごとにワークフローを実行する Cloud Scheduler ジョブを作成します。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- App Engine アプリの作成など、Cloud Scheduler 用に環境を設定します。
-
Enable the Workflows API.
- このチュートリアルで使用するデフォルトのロケーションを設定します。
gcloud config set workflows/location REGION
REGION
は、サポートされている Workflows のロケーションに置き換えます。 - ワークフローが使用するサービス アカウントを作成します。例:
sa-name
gcloud iam service-accounts create sa-name
- アカウントがワークフローをトリガーする権限を持つよう、サービス アカウントに
workflows.invoker
のロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/workflows.invoker"
- サービス アカウントに
logging.logWriter
ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/logging.logWriter"
PROJECT_ID
は、Google Cloud プロジェクト ID に置き換えます。
ランタイム引数を受け取るワークフローを作成する
ワークフローは、Workflows 構文で記述された一連のステップで構成され、YAML 形式または JSON 形式のいずれでも記述できます。ワークフローを作成したら、デプロイして実行できるようにします。
Console
Google Cloud コンソールで、[ワークフロー] ページに移動します。
[作成] をクリックします。
新しいワークフローの名前として「
myFirstWorkflow
」を入力します。リージョンには us-central1 を選択します。
以前に作成したサービス アカウントを選択します。
[次へ] をクリックします。
ワークフロー エディタで、次のワークフローの定義を入力します。
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
このワークフローは、ランタイムの引数として渡された姓と名の人に対する「Hello」というあいさつを返します。
[デプロイ] をクリックします。
gcloud
- ターミナルを開きます。
次のワークフロー定義を YAML または JSON ファイル(myFirstWorkflow.yaml や myFirstWorkflow.json など)として保存します。
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
このワークフローは、ランタイムの引数として渡された姓と名の人に対する「Hello」というあいさつを返します。
次のコマンドを入力してワークフローをデプロイします。
gcloud workflows deploy myFirstWorkflow \ --source=myFirstWorkflow.yaml_OR_json \ --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com
以前に作成したワークフロー定義ファイルの形式に応じて、
yaml_OR_json
をyaml
またはjson
に置き換えます。
ワークフローをスケジュールする
以前に作成したサービス アカウントを使用して、ワークフローをトリガーする Cloud Scheduler ジョブを作成します。
Console
Google Cloud コンソールで [Cloud Scheduler] ページに移動します。
[ジョブを作成] をクリックします。
[名前] を
my-workflow-job
に設定します。[頻度] に、以下を入力します。
これにより、5 分ごとにジョブが実行されます。間隔は unix-cron 形式を使用して定義されます。*/5 * * * *
[タイムゾーン] で、国とタイムゾーンを選択します。
たとえば、米国とロサンゼルスや太平洋夏時間(PDT)を選択します。
[続行] をクリックします。
[ターゲット タイプ] で [HTTP] を選択します。
[URL] に以下のように入力します。
https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
[HTTP メソッド] はデフォルトの POST のままにします。
次の 2 つの HTTP ヘッダーを追加します。
- 名前:
Content-Type
、値:application/octet-stream
- 名前:
User-Agent
、値:Google-Cloud-Scheduler
- 名前:
[本文] に以下のように入力します。
{"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}
これは、ワークフローの引数の JSON エンコードを渡します。この場合、名は「Sherlock」、姓は「Holmes」です。文字列に含まれる二重引用符はバックスラッシュ(\)を使用してエスケープします。
[Auth ヘッダー] で [OAuth トークンを追加] を選択します。
以前に作成したサービス アカウントを入力します。
sa-name@PROJECT_ID.iam.gserviceaccount.com
https://www.googleapis.com/auth/cloud-platform
のデフォルトが使用されるため、スコープを指定する必要はありません。その他の値はすべてデフォルトのままにして、[作成] をクリックします。
gcloud
次のコマンドを入力して、my-workflow-job
というジョブをスケジュールします。
gcloud scheduler jobs create http my-workflow-job \ --schedule="*/5 * * * *" \ --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions" \ --message-body="{\"argument\": \"{\\\"firstName\\\":\\\"Sherlock\\\", \\\"lastName\\\":\\\"Holmes\\\"}\"}" \ --time-zone="America/Los_Angeles" \ --oauth-service-account-email="sa-name@PROJECT_ID.iam.gserviceaccount.com"
間隔は unix-cron 形式を使用して定義されます。
message-body
フラグを使用すると、ワークフローの引数の JSON エンコードを渡します。この場合、名は「Sherlock」、姓は「Holmes」です。文字列に含まれる二重引用符はバックスラッシュ(\)を使用してエスケープします。
これで、ワークフローは 5 分ごとに実行されるようになります。
gcloud scheduler
フラグの詳細と、ワークフローの実行中に各呼び出しステップがログに記録されるようにコールロギングを適用する方法については、ワークフローをスケジュールすると gcloud
リファレンスをご覧ください。
ジョブを実行して結果を確認する
Console
Google Cloud コンソールで [Cloud Scheduler] ページに移動します。
ジョブが表示されない場合は、ページの更新が必要になることがあります。
my-workflow-job
という名前のジョブで、[今すぐ実行] をクリックします。「結果」の値が 「成功」に更新されます。
Google Cloud コンソールで、[ワークフロー] ページに移動します。
ワークフローのリストから、[myFirstWorkflow] をクリックして詳細ページを開きます。
ワークフローの実行状態が「完了」になっているはずです。
ワークフローの実行 ID をクリックして詳細ページを開き、ワークフローの結果を出力ペインに表示します。
出力は「Hello, Sherlock Holmes!」となります。
gcloud
Cloud Scheduler ジョブを実行してワークフローを実行します。
gcloud scheduler jobs run my-workflow-job
ワークフローの実行 ID を取得します。
gcloud workflows executions list myFirstWorkflow
次のような出力(実行 ID は太字で表示)が表示されます。
projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
ワークフローの実行結果を取得します。
gcloud workflows executions describe EXECUTION_ID --workflow myFirstWorkflow
EXECUTION_ID
は、前の手順で返された実行 ID で置き換えます。出力は次のようになります。
argument: '{"firstName":"Sherlock","lastName":"Holmes"}' endTime: '2021-09-09T15:15:00.869350639Z' name: projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320 result: '"Hello, Sherlock Holmes!"' startTime: '2021-09-09T15:15:00.839175480Z' state: SUCCEEDED workflowRevisionId: 000001-4f9
お疲れさまでした。これで、特定のスケジュールでワークフローを自動的に実行する Cloud Scheduler ジョブが正常に作成されました。
クリーンアップ
チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。次のセクションで、リソースを削除または無効にする方法を説明します。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Cloud Scheduler ジョブの削除
Google Cloud コンソールの [Cloud Scheduler] ページに移動します。
ジョブの横のチェックボックスを選択します。
ページの上部にある [削除] をクリックして、削除操作を確定します。
ワークフローの削除
Google Cloud コンソールの [Workflows] ページに移動します。
ワークフローを選択します。
ページの上部にある [削除] をクリックします。ワークフローの名前を入力し、削除操作を確定します。
App Engine アプリを無効にする
App Engine アプリを無効にすると、アプリケーション データと設定は保持されますが、アプリケーションによるインスタンスの実行やリクエストの処理が停止されます。
Google Cloud コンソールの [アプリケーション設定] ページに移動します。
[アプリケーションを無効にする] をクリックします。
表示される手順に沿って操作します。
次のステップ
- ワークフローの詳細を理解する