2019年5月28日火曜日

【GCP】Cloud Scheduler を使ってみた

概要

GCP の Cloud Scheduler は cron サービスです
3 ジョブまでは無料で使えるので試してみました

環境

  • macOS 10.14.5
  • gcloud 247.0.0

HTTP + Get

コンソールから作成しました

Cloud Scheduler のページアクセスし「ジョブを作成」を選択します

入力した情報は以下の通りです

  • 名前・・・job1 (好きな名前で OK)
  • 頻度・・・*/1 * * * * (テストのため 1 分に 1 回実行)
  • タイムゾーン・・・日本
  • ターゲット・・・HTTP
  • URL・・・リクエストしたい好きな URL
  • HTTP メソッド・・・GET

これで「作成」を選択します

ジョブが作成されるとスケジュール通りに実行されます
結果が「成功」になっていれば OK です
手動で実行することもできます

ログは Stackdriver に自動的に格納されます
スケジュール時のリクエストのログが残るようです
レスポンスに関してはレスポンスコードしか残らずレスポンスボディやヘッダは残らないようです

HTTP + POST + JSON

コンソールからではヘッダが設定できないので gcloud コマンドから作成します

gcloud beta scheduler jobs create http job2 \
--time-zone "Asia/Tokyo" \
--schedule="*/1 * * * *" \
--uri="https://kaka-request-dumper.herokuapp.com/" \
--headers="Content-Type=application/json" \
--http-method="POST" \
--message-body="{\"key1\":\"value1\"}"

--headers オプションで Content-Type=application/json を指定しましょう
--message-body は文字列しか指定できないのでエスケープして JSON を指定しましょう
これで実行するとちゃんと JSON ボディが設定されてサーバ側にリクエストされます

Pub/Sub

特定のトピックにペイロードを送信することもできます
事前に Pub/Sub のコンソールからトピックとサブスクリプションを作成しておきましょう

あとはジョブを作成します
ターゲットを「Pub/Sub」にトピックに事前に作成トピックを指定しましょう
サブスクリプションを指定する項目はコンソールにはないようです

ペイロードを受け取るサブスクライバーは何でも OK です
今回は Ruby で実装しました (参考)

  • bundle init
  • vim Gemfile
gem "google-cloud-pubsub"
  • bundle install --path vendor
  • touch app.rb
require 'google/cloud/pubsub'

pubsub = Google::Cloud::PubSub.new(
  project_id: 'pjct-123456',
  credentials: './pjct-123456-abcd12345.json'
)
topic = pubsub.topic 'cloud_scheduler_topic'
sub = pubsub.subscription ''
subscriber = sub.listen do |msg|
  msg.acknowledge!
  puts msg.data
  puts msg.message_id
  puts msg.attributes
end
subscriber.start
sleep
  • bundle exec ruby app.rb

しばらく待っていれば以下のようにメッセージが表示されるのが確認できると思います

bundle exec ruby app.rb 
hoge
560942199166650
{}
hoge
560943876532507
{}

App Engine HTTP

事前にプロジェクト内に App Engine を使って適当にアプリを起動しておきましょう

あとはそのアプリに使ってリクエストするようなジョブを作成するだけです
今回は App Engine を default というサービス配下に作成しました
違うサービス配下に作成した場合は適宜変更してください

最後に

Cloud Scheduler を試してみました
現状は 3 つのターゲットをが指定可能なようです
MemoryStore に値を入れることができたり GCE の定期的な起動や停止、何かしらのメッセージやコマンドが渡せたできるようになると面白いかなと思いました
今後に期待かなと思います

参考サイト

0 件のコメント:

コメントを投稿