PowerShellでGCP Cloud Schedulerを作成しクラウドジョブを自動管理する方法

PowerShellを活用してGoogle Cloud Platform (GCP) の Cloud Scheduler を作成し、クラウドジョブを自動管理する方法を解説します。

GCP Cloud Schedulerは、時間ベースのジョブスケジューリングを提供する フルマネージドサービス であり、定期的なタスクの自動化に最適です。例えば、

  • 特定の時間にCloud Functionsを実行する
  • 定期的にCloud Pub/Subメッセージを送信する
  • HTTPエンドポイントを呼び出し、API処理を自動化する

といった用途で利用されます。

本記事では、PowerShellを使用してCloud Schedulerのジョブを作成し、GCPのタスク管理を自動化する方法を詳しく解説します。さらに、ジョブの 作成・管理・更新・削除 に関するスクリプトの実装例も紹介します。

PowerShellを活用することで、コマンドラインから効率的にGCPを操作でき、スクリプトによる インフラの自動管理 を実現できます。本記事を通じて、GCP Cloud Schedulerの使い方をマスターし、業務効率化を図りましょう。

目次

GCP Cloud Schedulerとは


Google Cloud Scheduler は、Google Cloud Platform (GCP) の フルマネージドなジョブスケジューリングサービス です。UNIXの cron のように、定期的なタスクを実行するために使用されます。

Cloud Schedulerの主な機能


Cloud Schedulerは、以下の機能を提供します。

  • 時間ベースのスケジューリング:分単位、時間単位、日単位、週単位などのスケジュール設定が可能
  • フルマネージド:インフラ管理が不要で、安定したスケジューリングが可能
  • さまざまなターゲットに対応:Cloud Functions、Cloud Pub/Sub、HTTPエンドポイントの呼び出しが可能
  • 高可用性:Googleのインフラ上で動作し、信頼性の高いスケジュール実行を保証

Cloud Schedulerのユースケース


Cloud Schedulerは、さまざまなシナリオで活用できます。

1. 定期的なデータ処理


Cloud FunctionsやCloud Runと連携し、特定の時間にデータのETL処理を実行できます。

2. APIの定期実行


外部APIや社内のREST APIを定期的に呼び出し、自動データ取得や更新を実現できます。

3. Cloud Pub/Subを利用したワークフロー管理


Cloud SchedulerからCloud Pub/Subにメッセージを送信し、複数のGCPサービスを連携させたワークフローを自動化できます。

Cloud Schedulerと他のスケジューリングサービスの比較

サービス特徴主な用途
Cloud Schedulerフルマネージド、HTTP/Pub/Sub/Cloud Functions対応GCP環境でのスケジューリング
cron (Linux)ローカルマシンで動作、柔軟なスケジューリングOSレベルでの定期実行
Cloud Tasksキューを使った非同期ジョブ管理分散環境でのタスク管理
AWS Lambda + EventBridgeAWS環境でのジョブスケジューリングAWSインフラでのタスク実行

Cloud Schedulerの料金


Cloud Schedulerは 無料枠 があり、月3つまでのジョブは無料で利用できます。追加のジョブは1ジョブあたり $0.10/月 から課金されます。

次のステップでは、PowerShellを使用してGCP環境をセットアップし、Cloud Schedulerを作成する準備を行います。

PowerShellでGCPを操作するための準備


PowerShellを使用してGCP Cloud Schedulerを作成・管理するためには、以下の準備が必要です。

1. Google Cloud SDKのインストール


Google Cloud SDKには、GCPをコマンドラインから操作するための gcloud コマンドが含まれています。PowerShellからGCPを操作するために、まずSDKをインストールします。

Google Cloud SDKのインストール手順

  1. Google Cloud SDKの公式サイトへアクセス
    Google Cloud SDK ダウンロードページ
  2. Windows版のインストーラーをダウンロード
  3. インストーラーを実行し、指示に従ってインストール
  4. インストール後、PowerShellを開き、以下のコマンドでSDKが正しくインストールされているか確認
   gcloud version

正しくインストールされていれば、バージョン情報が表示されます。

2. GCPプロジェクトのセットアップ


GCPのプロジェクトを作成し、適切な設定を行います。

プロジェクトの作成


すでにプロジェクトがある場合はスキップ可能です。新しくプロジェクトを作成する場合は、以下のコマンドを実行します。

gcloud projects create [PROJECT_ID] --name="[プロジェクト名]"

※ [PROJECT_ID] は一意の識別子を設定してください。

プロジェクトの選択


使用するプロジェクトを設定するには、以下のコマンドを実行します。

gcloud config set project [PROJECT_ID]

3. 必要なAPIの有効化


Cloud Schedulerを利用するためには、以下のAPIを有効化する必要があります。

gcloud services enable cloudscheduler.googleapis.com
gcloud services enable pubsub.googleapis.com

4. 認証の設定


GCPにアクセスするために認証情報を設定します。以下のコマンドを実行し、Googleアカウントでログインします。

gcloud auth login

または、サービスアカウントを使用する場合は、認証キー(JSON)をダウンロードし、以下のコマンドで認証を行います。

gcloud auth activate-service-account --key-file=[JSON_KEY_PATH]

※ [JSON_KEY_PATH] には、ダウンロードした認証キーのパスを指定してください。

5. Cloud Schedulerのリージョン設定


Cloud Schedulerのジョブは、特定のリージョンで動作するため、利用可能なリージョンを確認し、適切なリージョンを設定します。
利用可能なリージョンを確認するには以下のコマンドを実行します。

gcloud scheduler locations list

適用するリージョンを設定するには、以下を実行します。

gcloud config set compute/region [REGION]

※ [REGION] は、us-central1 など適切なリージョンを指定してください。

準備完了


これで、PowerShellからGCP Cloud Schedulerを操作するための準備が整いました。次は、Cloud Schedulerのジョブを作成するための IAM権限の設定 について解説します。

Cloud Schedulerを作成するための必要な権限設定

Cloud SchedulerをPowerShellで作成・管理するには、適切な権限を持つサービスアカウントを設定する必要があります。GCPの IAM (Identity and Access Management) を活用し、適切なロールを付与する方法を解説します。

1. Cloud Schedulerに必要なIAMロール


Cloud Schedulerを操作するには、以下のIAMロールが必要です。

ロール名役割コマンドでの設定
roles/cloudscheduler.adminCloud Schedulerのジョブ作成・管理gcloud projects add-iam-policy-binding
roles/iam.serviceAccountUserサービスアカウントの管理gcloud iam service-accounts add-iam-policy-binding
roles/pubsub.publisher (任意)Pub/Subを利用する場合gcloud projects add-iam-policy-binding

2. サービスアカウントの作成


Cloud Schedulerジョブを作成・管理するためのサービスアカウントを作成し、適切な権限を付与します。

gcloud iam service-accounts create scheduler-service-account --display-name="Cloud Scheduler Service Account"

作成したサービスアカウントのメールアドレスを取得します。

gcloud iam service-accounts list

出力結果から、EMAIL の部分をメモしておきます(例: scheduler-service-account@your-project-id.iam.gserviceaccount.com)。

3. サービスアカウントに権限を付与


作成したサービスアカウントに必要なIAMロールを割り当てます。

gcloud projects add-iam-policy-binding [PROJECT_ID] `
    --member="serviceAccount:[EMAIL]" `
    --role="roles/cloudscheduler.admin"

Pub/Subを使用する場合は、以下のコマンドで追加の権限を付与します。

gcloud projects add-iam-policy-binding [PROJECT_ID] `
    --member="serviceAccount:[EMAIL]" `
    --role="roles/pubsub.publisher"

また、サービスアカウントをジョブに適用するための権限も付与します。

gcloud iam service-accounts add-iam-policy-binding [EMAIL] `
    --member="user:[YOUR_GCP_EMAIL]" `
    --role="roles/iam.serviceAccountUser"

※ [EMAIL] は、作成したサービスアカウントのメールアドレスを指定してください。
※ [YOUR_GCP_EMAIL] は、GCP管理者のアカウントを指定してください。

4. サービスアカウントのキーを作成(オプション)


PowerShellスクリプトでサービスアカウントを使用する場合、JSON形式のキーを作成して利用できます。

gcloud iam service-accounts keys create service-account-key.json `
    --iam-account=[EMAIL]

このJSONファイルをPowerShellスクリプトで使用することで、GCPの認証を簡単に行うことができます。

権限設定完了


これで、Cloud Schedulerのジョブを作成・管理するためのIAM設定が完了しました。次のステップでは、PowerShellを使ってCloud Schedulerのジョブを作成する手順 を解説します。

PowerShellでCloud Schedulerジョブを作成する手順

PowerShellを使ってGCP Cloud Schedulerのジョブを作成する手順を解説します。ジョブの作成には、gcloud コマンドを利用し、HTTPリクエストを送信するジョブやPub/Subメッセージを発行するジョブを設定できます。

1. Cloud Schedulerジョブの基本構造


Cloud Schedulerジョブには以下の要素があります。

設定項目説明例
ジョブ名ジョブの一意な名前daily-task-job
スケジュールcron形式で指定0 9 * * * (毎日9時実行)
リージョンCloud Schedulerを実行するリージョンus-central1
ターゲットジョブが実行するアクションHTTPエンドポイント、Pub/Sub など

2. HTTPリクエストを送信するジョブの作成


以下のPowerShellコマンドを実行すると、指定したHTTPエンドポイントに定期的にリクエストを送信するCloud Schedulerジョブを作成できます。

gcloud scheduler jobs create http daily-http-job `
    --schedule="0 9 * * *" `
    --time-zone="Asia/Tokyo" `
    --uri="https://example.com/api/task" `
    --http-method=GET `
    --location="us-central1"

このジョブの動作:

  • 毎日9:00 (Asia/Tokyo時間) に https://example.com/api/task にHTTP GET リクエストを送信
  • 実行場所は us-central1

オプション設定:

  • --http-method=POST を指定すると、POSTリクエストを送信
  • --headers="Content-Type=application/json" を追加すると、リクエストヘッダーを設定可能
  • --body='{"key":"value"}' でリクエストボディを送信可能

3. Pub/Subメッセージを送信するジョブの作成


Cloud Schedulerから Pub/Subトピック にメッセージを送信し、他のGCPサービスと連携することもできます。

gcloud scheduler jobs create pubsub daily-pubsub-job `
    --schedule="0 12 * * *" `
    --time-zone="Asia/Tokyo" `
    --location="us-central1" `
    --topic="my-task-topic" `
    --message-body="Hello, Cloud Pub/Sub!"

このジョブの動作:

  • 毎日12:00 (Asia/Tokyo時間) に my-task-topic に "Hello, Cloud Pub/Sub!" というメッセージを送信

4. 作成したジョブの一覧を確認


作成したジョブを確認するには、以下のコマンドを実行します。

gcloud scheduler jobs list --location="us-central1"

5. Cloud Schedulerジョブの手動実行


ジョブが正しく作成されているかを確認するために、手動で実行できます。

gcloud scheduler jobs run daily-http-job --location="us-central1"

6. Cloud Schedulerジョブの削除


不要になったジョブを削除する場合は、以下のコマンドを実行します。

gcloud scheduler jobs delete daily-http-job --location="us-central1"

Cloud Schedulerジョブ作成の完了


これで、PowerShellを使用してCloud Schedulerジョブを作成する方法を解説しました。次のステップでは、ジョブのスケジュール設定 (cron表記) の詳細 について説明します。

PowerShellを使ったジョブのスケジュール設定

Cloud Schedulerでは、cron表記 を用いてジョブのスケジュールを設定できます。cron表記は、定期的なタスクを実行するための標準的な方法であり、Cloud Schedulerでも採用されています。ここでは、PowerShellを用いて適切なスケジュールを設定する方法を解説します。


1. cron表記の基本構造


Cloud Schedulerのcronフォーマットは、以下の 5つのフィールド から構成されます。

┌───────────── 分 (0 - 59)
│ ┌──────────── 時 (0 - 23)
│ │ ┌──────────── 日 (1 - 31)
│ │ │ ┌──────────── 月 (1 - 12)
│ │ │ │ ┌──────────── 曜日 (0 - 6) (日曜 = 0 または 7)
│ │ │ │ │
│ │ │ │ │
* * * * *
  • * は「すべての値」を示します。
  • */X は「X分ごと」などの間隔を設定できます。

2. 一般的なスケジュール設定例

cron表記実行スケジュール
0 9 * * *毎日9時に実行
0 0 * * 1毎週月曜の0時に実行
*/10 * * * *10分ごとに実行
0 12 1 * *毎月1日の12時に実行
0 9-17 * * 1-5平日(月〜金)の9時〜17時の毎時0分に実行
0 */2 * * *2時間ごとに実行

3. PowerShellでcron表記を用いたジョブのスケジュール設定

Cloud Schedulerのジョブを作成する際に、--schedule オプションで cron表記 を指定できます。以下のPowerShellコマンドを使用します。

gcloud scheduler jobs create http daily-report-job `
    --schedule="0 6 * * *" `
    --time-zone="Asia/Tokyo" `
    --uri="https://example.com/api/report" `
    --http-method=POST `
    --location="us-central1"

このジョブの動作:

  • 毎日6時(日本時間) に https://example.com/api/report に POST リクエストを送信

特定の時間間隔で実行するジョブの作成


例えば、「10分ごとに実行するジョブ」を作成するには、次のコマンドを実行します。

gcloud scheduler jobs create http every-10-minutes-job `
    --schedule="*/10 * * * *" `
    --time-zone="Asia/Tokyo" `
    --uri="https://example.com/api/status-check" `
    --http-method=GET `
    --location="us-central1"

このジョブの動作:

  • 10分ごと に https://example.com/api/status-check に GET リクエストを送信

4. タイムゾーンの設定

Cloud Schedulerはデフォルトで UTC を使用するため、日本時間でスケジュールを設定するには --time-zone="Asia/Tokyo" を指定します。

利用可能なタイムゾーンを確認するには、以下のコマンドを実行します。

gcloud scheduler jobs describe [ジョブ名] --location="us-central1"

タイムゾーンが UTC のままになっている場合、日本時間に変更するには以下のように更新します。

gcloud scheduler jobs update http daily-report-job `
    --time-zone="Asia/Tokyo" `
    --schedule="0 6 * * *" `
    --location="us-central1"

5. スケジュール設定の確認


作成したジョブのスケジュールを確認するには、以下のコマンドを実行します。

gcloud scheduler jobs list --location="us-central1"

特定のジョブの詳細を確認するには、次のコマンドを使用します。

gcloud scheduler jobs describe daily-report-job --location="us-central1"

スケジュール設定完了


これで、PowerShellを使ってCloud Schedulerのジョブのスケジュールを設定する方法を解説しました。次のステップでは、作成したCloud Schedulerジョブの管理と更新 について説明します。

作成したCloud Schedulerジョブの管理と更新

Cloud Schedulerのジョブは、作成後に 更新・削除・一時停止・手動実行 などの管理が可能です。本記事では、PowerShellを使用してCloud Schedulerジョブを管理する方法を解説します。


1. 作成済みジョブの一覧を確認する

Cloud Schedulerに登録されているジョブを確認するには、以下のコマンドを実行します。

gcloud scheduler jobs list --location="us-central1"

出力例:

NAME                REGION        SCHEDULE          TARGET_TYPE  STATE
daily-report-job    us-central1   0 6 * * *        HTTP         ENABLED
every-10-minutes-job us-central1  */10 * * * *     HTTP         ENABLED
  • STATE が ENABLED ならジョブが有効
  • STATE が DISABLED ならジョブが無効

2. Cloud Schedulerジョブの詳細を確認する

特定のジョブの詳細を確認するには、以下のコマンドを実行します。

gcloud scheduler jobs describe daily-report-job --location="us-central1"

出力例:

name: projects/my-project/locations/us-central1/jobs/daily-report-job
schedule: 0 6 * * *
timeZone: Asia/Tokyo
state: ENABLED
httpTarget:
  uri: https://example.com/api/report
  httpMethod: POST

3. Cloud Schedulerジョブの更新

既存のジョブのスケジュールやリクエスト内容を変更する場合は、gcloud scheduler jobs update コマンドを使用します。

スケジュールの変更


例えば、ジョブの実行時間を「毎日6時 → 毎日7時」に変更する場合:

gcloud scheduler jobs update http daily-report-job `
    --schedule="0 7 * * *" `
    --time-zone="Asia/Tokyo" `
    --location="us-central1"

リクエスト先の変更


ジョブの実行先のURLを https://example.com/api/report から https://example.com/api/new-report に変更する場合:

gcloud scheduler jobs update http daily-report-job `
    --uri="https://example.com/api/new-report" `
    --http-method=POST `
    --location="us-central1"

リクエストヘッダー・ボディの変更


APIリクエストに Content-Type: application/json を設定し、リクエストボディを送信する場合:

gcloud scheduler jobs update http daily-report-job `
    --headers="Content-Type=application/json" `
    --body='{"key": "value"}' `
    --location="us-central1"

4. Cloud Schedulerジョブの一時停止と再開

ジョブを一時停止する


一時的にジョブの実行を停止したい場合は、以下のコマンドを実行します。

gcloud scheduler jobs pause daily-report-job --location="us-central1"

実行後、ジョブの STATE が PAUSED になります。

ジョブを再開する


一時停止したジョブを再開する場合は、以下のコマンドを実行します。

gcloud scheduler jobs resume daily-report-job --location="us-central1"

実行後、ジョブの STATE が ENABLED に戻ります。


5. Cloud Schedulerジョブの手動実行

Cloud Schedulerのジョブが正しく動作しているか確認するために、手動で実行することも可能です。

gcloud scheduler jobs run daily-report-job --location="us-central1"

このコマンドを実行すると、スケジュールとは関係なく即時実行されます。


6. Cloud Schedulerジョブの削除

不要になったジョブは削除できます。

gcloud scheduler jobs delete daily-report-job --location="us-central1"

削除後、そのジョブは復元できないため注意してください。


Cloud Schedulerジョブの管理完了


これで、PowerShellを使用してCloud Schedulerジョブを 一覧表示・更新・一時停止・再開・手動実行・削除 する方法を学びました。次のステップでは、トラブルシューティングとデバッグ方法 について解説します。

トラブルシューティングとデバッグ方法

Cloud SchedulerのジョブをPowerShellで管理していると、ジョブが実行されない・エラーが発生する などの問題に直面することがあります。ここでは、Cloud Schedulerのトラブルシューティングとデバッグ方法について解説します。


1. Cloud Schedulerジョブのステータスを確認する


まず、ジョブが正常にスケジュールされているかを確認します。以下のコマンドを実行し、ジョブの状態を確認してください。

gcloud scheduler jobs list --location="us-central1"

出力例:

NAME                REGION        SCHEDULE       TARGET_TYPE  STATE
daily-report-job    us-central1   0 6 * * *     HTTP         ENABLED
failed-job          us-central1   0 * * * *     HTTP         RETRYING
  • ENABLED → ジョブが正常にスケジュールされている
  • RETRYING → ジョブが失敗しており、再試行中
  • PAUSED → ジョブが一時停止中
  • DISABLED → ジョブが無効化されている

PAUSED や DISABLED の場合 は、以下のコマンドでジョブを再開します。

gcloud scheduler jobs resume daily-report-job --location="us-central1"

2. Cloud Schedulerのジョブログを確認する

ジョブが失敗した場合は、詳細なエラーメッセージを確認するために、ログをチェックします。

gcloud logging read "resource.type=cloud_scheduler_job AND resource.labels.job_id=daily-report-job" --limit=10

出力例:

{
  "severity": "ERROR",
  "timestamp": "2024-02-10T06:00:00Z",
  "logName": "projects/my-project/logs/cloudscheduler.googleapis.com%2Fexecutions",
  "jsonPayload": {
    "status": "PERMISSION_DENIED",
    "message": "The caller does not have permission"
  }
}

この場合の原因:

  • IAM権限が不足している
  • 認証設定が正しく行われていない

対処方法:

  • roles/cloudscheduler.admin や roles/iam.serviceAccountUser を付与しているか確認する
  • gcloud auth login または gcloud auth activate-service-account を実行し、認証情報を再設定する

3. Cloud Schedulerのエラーステータスと解決策

エラーメッセージ原因解決策
PERMISSION_DENIEDIAM権限不足必要なIAMロール (cloudscheduler.admin, iam.serviceAccountUser) を付与
UNAUTHENTICATED認証が無効gcloud auth login または gcloud auth activate-service-account を実行
INVALID_ARGUMENTcronの書式エラーgcloud scheduler jobs describe [job_name] でスケジュールを確認
NOT_FOUNDターゲットのエンドポイントが存在しないHTTPリクエスト先のURLが正しいか確認
RESOURCE_EXHAUSTEDAPIのクォータ制限超過GCPのクォータ管理ページで確認し、増加申請を行う

4. 手動実行で問題を特定する

ジョブの設定が正しくても、ターゲットのエンドポイント側でエラーが発生している可能性があります。その場合、手動実行で詳細を確認します。

gcloud scheduler jobs run daily-report-job --location="us-central1"
  • エラーが出る場合 → gcloud logging read でログを確認
  • 手動実行は成功し、スケジュール実行だけが失敗する場合 → スケジュール設定やIAM権限を見直す

5. HTTPリクエストのエラーをデバッグする

Cloud SchedulerがHTTPターゲットにリクエストを送信する際、HTTPステータスコード でエラーを確認できます。

ステータスコード意味解決策
200 OK成功正常動作
400 Bad Requestリクエストが不正--body や --headers を見直し、正しいデータを送信
401 Unauthorized認証エラーサービスアカウントの認証設定 (gcloud auth activate-service-account) を見直す
403 Forbidden権限不足APIのIAMロールを付与
404 Not FoundURLが間違っている--uri で正しいURLを指定
500 Internal Server Errorターゲット側のエラーターゲットのサーバーを確認し、ログを取得

特定のエラーが発生した場合、手動で Invoke-WebRequest を使ってHTTPリクエストをテストすると原因を特定しやすくなります。

Invoke-WebRequest -Uri "https://example.com/api/task" -Method GET

6. Cloud Schedulerジョブのクォータ制限を確認する

Cloud Schedulerには 無料枠 (月3つのジョブ) があり、それを超えるとクォータ制限によりジョブが作成・実行できなくなる場合があります。

現在のクォータを確認するには、以下のコマンドを実行します。

gcloud scheduler quotas list --location="us-central1"

もし RESOURCE_EXHAUSTED のエラーが出る場合は、GCPのクォータ管理ページ からクォータの増加申請を行います。


トラブルシューティング完了

これで、Cloud Schedulerジョブのトラブルシューティング方法を解説しました。

  • ジョブのステータスを確認する
  • ログを調査する
  • 手動実行で問題を特定する
  • エラーメッセージを分析し、適切な対策を取る

次のステップでは、Cloud SchedulerとCloud Functionsの連携による応用例 を紹介します。

応用編:Cloud SchedulerとCloud Functionsの連携

Cloud Schedulerは、Cloud Functions と連携することで、より柔軟で高度なタスクの自動化が可能になります。例えば、定期的にデータ処理を実行したり、GCPの他のサービスをトリガーすることができます。本記事では、PowerShellを使用してCloud SchedulerからCloud Functionsを呼び出す方法を解説します。


1. Cloud FunctionsをCloud Schedulerで定期実行するメリット

Cloud Functionsは、サーバーレスで動作するイベント駆動型の関数です。Cloud Schedulerと組み合わせることで、以下のようなシナリオに対応できます。

  • 定期的なデータ処理:BigQueryへのデータ更新、ログ集計
  • バックグラウンドジョブの実行:メール通知、リソースのクリーニング処理
  • クラウドサービスの自動管理:GCEインスタンスの起動・停止、GCSのバックアップ

2. Cloud Functionsの準備

まず、Cloud SchedulerのターゲットとなるCloud Functionsを作成します。今回は、Cloud Functionsが HTTP リクエストを受け取って処理を実行するシナリオを想定します。

Cloud Functionsの作成 (Python例)

Cloud Functionsを作成し、GCPの Cloud Shell またはローカル環境でデプロイします。

from flask import Flask, request

app = Flask(__name__)

@app.route("/", methods=["GET"])
def scheduled_task():
    return "Cloud Function executed successfully!", 200

この関数は、Cloud SchedulerからのHTTPリクエストを受信し、「Cloud Function executed successfully!」というメッセージを返します。

Cloud Functionsのデプロイ
Cloud Shell またはローカルターミナルで、以下のコマンドを実行します。

gcloud functions deploy scheduled-function \
    --runtime python39 \
    --trigger-http \
    --allow-unauthenticated \
    --region us-central1

デプロイ後、関数のURLを取得

gcloud functions describe scheduled-function --region us-central1 --format="value(httpsTrigger.url)"

出力例:

https://us-central1-my-project.cloudfunctions.net/scheduled-function

このURLをCloud Schedulerのターゲットとして設定します。


3. Cloud SchedulerからCloud Functionsを呼び出す

Cloud Schedulerジョブを作成し、Cloud Functionsのエンドポイントを定期的に呼び出します。PowerShellを使用して以下のコマンドを実行します。

gcloud scheduler jobs create http cloud-function-job `
    --schedule="0 3 * * *" `
    --time-zone="Asia/Tokyo" `
    --uri="https://us-central1-my-project.cloudfunctions.net/scheduled-function" `
    --http-method=GET `
    --location="us-central1"

このジョブの動作:

  • 毎日3:00 (日本時間) に Cloud Functions を実行
  • HTTP GET リクエストで関数をトリガー

POSTメソッドでデータを送信する場合
Cloud Functionsにデータを送信するには、--http-method=POST を指定し、ボディを追加します。

gcloud scheduler jobs create http cloud-function-job `
    --schedule="0 3 * * *" `
    --time-zone="Asia/Tokyo" `
    --uri="https://us-central1-my-project.cloudfunctions.net/scheduled-function" `
    --http-method=POST `
    --headers="Content-Type=application/json" `
    --body='{"task": "process_data"}' `
    --location="us-central1"

4. Cloud Functionsのセキュリティ設定

デフォルトでは、Cloud Functionsは すべてのリクエストを受け付ける設定 (--allow-unauthenticated) になっています。しかし、セキュリティを強化するには、サービスアカウントを使って認証を行うことを推奨します。

サービスアカウントを使用した認証

  1. Cloud Schedulerのジョブ作成時に --oidc-service-account-email オプションを追加する
  2. Cloud Functionsのアクセス制御を IAM で設定する
gcloud scheduler jobs create http cloud-function-job `
    --schedule="0 3 * * *" `
    --time-zone="Asia/Tokyo" `
    --uri="https://us-central1-my-project.cloudfunctions.net/scheduled-function" `
    --http-method=POST `
    --oidc-service-account-email="[SERVICE_ACCOUNT]" `
    --location="us-central1"
  • [SERVICE_ACCOUNT] には、Cloud Schedulerジョブを実行するサービスアカウントのメールアドレスを指定

Cloud FunctionsのIAM設定を更新し、roles/cloudfunctions.invoker を付与します。

gcloud functions add-iam-policy-binding scheduled-function `
    --member="serviceAccount:[SERVICE_ACCOUNT]" `
    --role="roles/cloudfunctions.invoker" `
    --region="us-central1"

5. Cloud SchedulerとCloud Functionsの連携を確認

ジョブの一覧を確認

gcloud scheduler jobs list --location="us-central1"

手動でジョブを実行

gcloud scheduler jobs run cloud-function-job --location="us-central1"

Cloud Functionsのログを確認

gcloud functions logs read scheduled-function --region="us-central1"

実行ログを確認し、リクエストが正しく処理されているかチェックします。


6. まとめ

Cloud SchedulerとCloud Functionsを連携させることで、定期的なデータ処理やタスク管理を自動化 できます。

  • Cloud Functionsを HTTP エンドポイントとしてデプロイ
  • Cloud Schedulerから関数を cron表記 でスケジュール実行
  • POST リクエストでデータを渡して柔軟な処理を実行
  • サービスアカウントを活用した認証強化

次のステップでは、本記事のまとめ を紹介します。

まとめ

本記事では、PowerShellを使用してGCP Cloud Schedulerを作成し、クラウドジョブを自動管理する方法 を解説しました。

学んだポイント

  1. Cloud Schedulerの基本概念
  • GCPのフルマネージドスケジューリングサービスで、定期的なジョブを自動化可能
  • HTTPリクエスト送信やCloud Pub/Subメッセージの発行ができる
  1. PowerShellでGCPを操作する準備
  • Google Cloud SDKのインストール と IAM権限の設定
  • gcloud auth login を使用した認証
  1. Cloud Schedulerジョブの作成・管理
  • HTTPエンドポイントやPub/SubをターゲットにしたジョブをPowerShellで作成
  • cron表記を用いたスケジュール設定 (0 9 * * * など)
  • ジョブの更新・一時停止・手動実行・削除 の管理方法
  1. トラブルシューティング
  • gcloud logging read を使用してエラーログを確認
  • 権限エラー (PERMISSION_DENIED) やリクエストエラー (400 Bad Request) の対処法
  1. Cloud SchedulerとCloud Functionsの連携
  • HTTPリクエストでCloud Functionsをトリガーし、定期処理を自動化
  • サービスアカウントを使った認証強化

PowerShellを活用したGCP自動化のメリット

✅ クラウドタスクの自動化 → 手作業を減らし、効率的なシステム運用
✅ PowerShellスクリプトを活用 → 一括管理が可能
✅ スケーラブルなジョブ管理 → GCPの他サービスと組み合わせて拡張性を確保


次のステップ

GCP Cloud Schedulerの基本をマスターしたら、次は Cloud Run や BigQuery など他のGCPサービスとの連携 に挑戦してみましょう。例えば、

  • Cloud Runをスケジュール実行して、API処理を自動化
  • BigQueryのクエリを定期実行し、データ分析を自動化

PowerShellを活用して、GCPのタスクをさらに効率化していきましょう!

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次