概要
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 件のコメント:
コメントを投稿