My Note

自己理解のためのブログ

Google Cloudのcloud-functionでGoツールをcloud-schedulerとcloud-pub/subと連携して定期実行させる ( NatureRemo値の投稿させた場合の例 )

やったこと

前回のブログでやったことを今回は、Lambda実行の部分をGoogle Cloudのcloud functionで実行させるようにした。

yhidetoshi.hatenablog.com

  • 今回やったこと
    • cloud functionにGo1.11ランタイムでデプロイする
    • cloud pub/subとcloud-scheduleを連携してcloud-functionを定期実行させる

cloud-pub/subとcloud-schedulerを作成する

  • cloud-pub/sub
    • トピック
      • NatureRemo という名前で作成する
  • cloud-scheduler

    • Name: natureRemo-cron
      • 頻度: */3 * * * *
      • タイムゾーン: 日本
      • ターゲット: Pub/Sub
      • トピック: NatureRemo (cloud-pub/subで作成した名前)
      • ペイロード: 任意の文字列
  • cloud-schedulerの設定

f:id:yhidetoshi:20190621083359p:plain

ソースコード ( GitHub )

github.com

cloud-functionをにデプロイする

  • 実行環境
    • cloud-function
      • go1.11
      • メモリ: 128MB
      • トリガー: Cloud Pub/Sub
      • 実行する関数: NatureRemo
      • Region: asia-northeast1

■ デプロイ方法 ( gcloudコマンド )

  • $ cd ./natureRemo
  • go.modを最初に生成する場合: $ go mod init github.com/yhidetoshi/gcloud-function-examples/natureRemo
$ gcloud functions deploy natureRemo --entry-point NatureRemo --runtime go111 --trigger-resource <TOPIC> --memory 128 --trigger-event google.pubsub.topic.publish --project <PROJECTID> --region asia-northeast1 --set-env-vars MKRKEY=<MKRKEY>,REMOTOKEN=<REMOTOKEN>
・ deploy <CLOUDFUNCTION_NAME>
・ --runtime go111
・ --entry-point <実行する関数名>
・ --trigger-resource <CLOUD-PUBSUBのTOPIC>
・ --memory 128
・ --trigger-event google.pubsub.topic.publish (トピックにメッセージがパブリッシュされたとき)
・ --project <PROJECTID>
・ --region asia-northeast1
・ --set-env-vars MKRKEY=<MKRKEY>,REMOTOKEN=<REMOTOKEN>

f:id:yhidetoshi:20190621083436p:plainf:id:yhidetoshi:20190621083658p:plain

まとめ

cloud-functionにGoツールをデプロイしてcloud-pub/sub, cloud-schedulerを連携して定期実行する環境を作り、AWS Lambda + Cloudwatch-Eventで処理していたのをGoogle Cloudに移行した。 また、定期実行の部分は Cloud-Pub/Subとcloud-schedulerで実現できたので今後のGoツールを実行させるときに活用していきたい。