Cloud Schedulerを使用して、定期的にPub/Subトピックにメッセージを送信する仕組みを構築する
概要
目的
Google Cloudのサービスを利用して、定期的なタスクを実行するという仕組みを構築していきます。ただし、今回の内容は特定の問題解決を行うというものではありません。
あくまでも、Google Cloudのサービスを理解するといった初歩的な目的のもと、ブログを作成しております。
メリット
Cloud Schedulerを活用することで、定期的なタスクを自動化し、手動操作の手間を大幅に削減することができます。また、柔軟なスケジュール設定が可能で、複雑なスケジュールも簡単に構築できます。
さらに、Pub/Subをはじめとする他のGoogle Cloudサービスと容易に連携できるため、さまざまなユースケースに対応した効率的なシステムを構築することが可能です。
全体的な流れ
- Pub/Subトピックの作成
- メッセージを送信するためのトピックを作成
 
- サービスアカウントの権限付与
- Cloud SchedulerがPub/Subトピックにアクセスできるように設定
 
- Cloud Schedulerジョブの作成と動作確認
- 定期的にメッセージを送信するジョブを作成し、動作を確認
 
実演
1. APIの有効化
今回は大前提として、Cloud Shellで操作をしていきます。
以下のコマンドを使用し、Cloud Pub/SubとCloud SchedulerのAPIを有効化していきます。
gcloud services enable cloudscheduler.googleapis.com pubsub.googleapis.com
2. Pub/Sub トピックの作成
以下のコマンドでトピックを作成していきます。
gcloud pubsub topics create my-scheduler-topic
my-scheduler-topicというトピックの作成を確認しました。

3. デフォルトのサービスアカウントへ権限を付与
Cloud SchedulerがPub/Subトピックにメッセージを送信するための権限を持つサービスアカウントが必要です。
デフォルトのサービスアカウントに権限を付与していきます。(PROJECT_ID@appspot.gserviceaccount.comへの付与)
gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member="serviceAccount:[PROJECT_ID]@appspot.gserviceaccount.com" \
    --role="roles/pubsub.publisher"
サービスアカウントへの権限付与を確認しました。

※ 注意:デフォルトのサービスアカウントでは元々編集者ロールが割り当てられているため、適宜ロールを変更して運用するのが推奨されております。
4. Cloud Schedulerジョブの作成
Cloud Schedulerジョブを作成し、Pub/Subトピックにメッセージを送信するための設定をしていきます。
gcloud scheduler jobs create pubsub my-scheduler-job \
    --schedule="0 9 * * *" \
    --topic="my-scheduler-topic" \
    --message-body="hello, your muscle is nice" \
    --time-zone="Asia/Tokyo"
コードの解説
- ジョブの作成
- my-scheduler-jobという名前のCloud Schedulerジョブを作成
 
- スケジュール設定
- 毎日午前9時(JST)に実行されるように設定(--schedule="0 9 * * *")
 
- メッセージ送信
- Pub/Subトピックmy-scheduler-topicに「hello, your muscle is nice」というメッセージを送信
 
- タイムゾーン指定
- タイムゾーンを日本標準時(JST, Asia/Tokyo)に設定
 
ジョブが作成されたことを確認しました。

5. 動作確認
Cloud Schedulerジョブを手動実行し、Pub/Subトピックにメッセージが送信されることを確認します。
ジョブの実行
以下のコマンドを実行すると、ジョブが即座に実行され、Pub/Subトピックにメッセージが送信されます。
gcloud scheduler jobs run my-scheduler-job
ジョブの実行が成功していることを確認しました。

サブスクリプションの作成と結果の取得
次に、Pub/Subトピックに送信されたメッセージを確認するために、サブスクリプションを作成してメッセージを取得します。
サブスクリプションの作成
gcloud pubsub subscriptions create my-scheduler-subscription \
    --topic="my-scheduler-topic"
メッセージの取得
gcloud pubsub subscriptions pull my-scheduler-subscription --auto-ack
結果の表示

無事にCloud Shellにて「hello, your muscle is nice」という文字が表示されました。これにより、Cloud Schedulerジョブが正常に実行され、Pub/Subトピックを通じてメッセージが正しく送信されたことがわかります。
まとめ
最後に、今回の内容の具体的なユースケースをおさらいしておきましょう。(ブログの内容だけでは何ができるというわけではないため)
- 定期的なリマインダー通知
- 毎朝9時にSlackやメールに「今日のタスク」を通知する仕組みを構築
 
- データ収集のトリガー
- 毎日決まった時間にAPIを呼び出し、データを収集してデータベースに保存する処理を開始
 
- システムの状態監視
- 定期的にシステムの稼働状況をチェックし、異常があればアラートを送信
 
Cloud SchedulerとPub/Subを活用することで、効率的かつ自動化された仕組みを簡単に構築できます。どちらもマネージドサービスのため、運用負荷も低いです。
積極的に活用することで、クラウドの良さを実感できることと思います。











