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を活用することで、効率的かつ自動化された仕組みを簡単に構築できます。どちらもマネージドサービスのため、運用負荷も低いです。
積極的に活用することで、クラウドの良さを実感できることと思います。