chakokuのブログ(rev4)

日々のごった煮ブログです

MQTTのPublish用にGCP (Google Cloud Platform)を使ってみる->間違ってGoogle Cloud Shellに入れていた

久しぶりにGoogle Cloud Serviceに行ってみた。今は、GCPとしていろんなサービスが統合?されていて、PaaSはApp Engine、Iaasは Compute Engineと2系統用意されている。App EngineはPaaSのため使い方が特殊なので、VMとしてマシンを貸してもらえるCompute Engineの方がインストールやカスタマイズも楽。e2-micro VM インスタンス(USリージョン)で、データ量が1 GB 以下なら無料で使えるらしい。稼働中のリソースをよく見ておかないと、足が出るかもしれない。
Compute Engineに入って、普通にpipで追加パッケージ等を入れてみたら、MQTT Publishスクリプトが動いた。定期実行させたいので、cronで1分周期で設定してみる。勝手にインスタンスタイプは上がらないと思うのだが。。
cronを書いたが動かない。cron自体がサービスとして走っていないようなので、、場当たり的だが以下でcronを起動

sudo /etc/init.d/cron start

以下のような書式で毎分APIを叩いてMQTTポストするスクリプトをCRONで起動

* * * * * /home/xx your_id xxxx/lang/py/smartmeter/nature_api.py >> /var/log/api_log.txt 2>&1

この状態でも1分単位で画面が更新されるだけなので、できたら、スマフォから更新リクエストを出すとMQTTで返事してくれるようにもしたい。(スマフォでアプリを起動して更新されるまで1分待つというのは今の時代に考えられない)
一定周期やリクエストに応じて何か処理をするためには、Google Cloud Functionを使う方がいいのかも。Pub/Subをトリガーとして、あらかじめ定義したFunctionを起動できるらしい。

画面の上にCloud Shellとあったので、そこからVM(Compute Engine)に入れるのかと思って、上記の操作をしてリリースしたつもりになっていた*1。Compute Engineにいって、VMが本当にアメリカだろうかと確認しようとしたが、VMがない。だったらさっきログインしてたのは何?と思うと、あれはメンテナンス用に用意されているGoogle Cloud Shellというまた別のサービスらしかった。だとすると、Compute EngineのVMに加え、CloudShellというメンテナンス用のVMも使えるということで、これはなんというリッチなサービスなんだろうかと感心した。
なお、Cloud Shellは普段は止まっているらしいので、そこでCRON走らせてもログアウトしてしばらくすると停止するのだろう。

*1:リージョンもインスタンスタイプも指定しないのが少し不思議だったが