22
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Cloud Functionsをcronっぽく実行

Posted at

Cloud Functionsをcron実行したい...。
誰もが思うこの機能ですが、しかしCloud Functions自体にはCron機能はなく、何かしら別のサービスを組み合わせる必要があります。

私はCloud FunctionsのトリガーにCloud PubSubを設定し、Azure FunctionからメッセージをPublishすることで定期実行をやっていました。

HTTPをトリガーとしていないのは、セキュリティの問題です。Cloud FunctionsのURLはリージョン/プロジェクトID/名前で決まるので、特定されやすいとか、コードで認証つけたとしても認証されるまではちょっと実行される等々細かいところを突っ込まれるので、pubsubを使っています。

なぜAzure Functionだけでやっていなのはというと、Azure Functionでは動作しないが、Cloud Functionsでは動作する、というものがあったからです(詳細は省略)。

前置きが長くなりましたが、11月にリリースされたCloud Schedulerを使うことでより簡単に定期実行ができるようになりした。
上記のAzure Functionの部分をCloud Schedulerに置き換えた方法をご紹介致します。
https://cloud.google.com/scheduler/docs/quickstart
https://cloud.google.com/scheduler/docs/tut-pub-sub

  • Create Cloud PubSub
  • Create Cloud Functions
  • Create Cloud Scheduler
  • Run Job

Cloud PubSub

Cloud PubSubを作ります。中継ポイントとなります。


$ gcloud pubsub topics create test-topic

Creater Cloud Functions

--trigger-topic=test-topicというふうに先程作成したトピックを指定していきます。


$ gcloud functions deploy test --source='https://source.developers.google.com/projects/<project-id>/repos/tyarin/moveable-aliases/gcp' --runtime=nodejs8 --trigger-topic=test-topic

Create Cloud Scheduler Job

ポータルのCloud Scheduler => ジョブを作成
ここでペイロードに動的な値(例えば時刻など)を入力する方法がわかりませんでした。ご存知の方教えていただけると幸いです。

image.png

Run Job

ジョブ作成後、ジョブ一覧が見えるので「今すぐ実行」ボタンを押下。
下記のように結果が成功となればOKです。

image.png

実行ログも確認することができます(Scheduler側)。
image.png

まとめ

Cloud Schedulerをつかってcron形式でCloud Functionsを呼び出すことができました。
いままではAzure FunctionにGCPのクレデンシャルをもってきて...とやっていたのでそのへん楽になりました。

22
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?