GAE/GoでNetatmoのAPIから取得した温湿度をMackerelに送るアプリケーションを動かす

GitHub - aereal/gae-go-netatmo-ws-mackerel

f:id:aereal:20171211115645p:plain

冬なのでNetatmo Weather Stationを購入して自宅で動かしはじめました。エアコンをつけるといきなり室温が上がってエアコンはすごいなーということがよくわかって便利。

ハードウェアももちろんWebサービスとアプリもよくできていて、単に現在のデータを見るだけならこれで十分ですが、不快指数を計算したらなにかとアラートを送ったりしたいのでMackerelに投げたい。

ので書きました。GAE/Goで動くやつです。

元々、同僚がGoogle Apps ScriptとAWS Lambdaで動かす実装を作っていてだいたいそれを参考にした。

家で動かすものでメンテフリーにしたく、GASは1週間後読み書きできる気はしないしAWS Lambdaはいいけどもっと素朴なWebアプリケーションで開発したいなと思ったのでGAE/Goで動かしています。

詳しくはREADMEに書いてあるけど、普通のWebアプリケーションとして動かし、GAEのcron機能で定期的にリクエストさせることで定期的にメトリックを送ることができる。

ポイントとしては:

  • GAE/GoはHTTPリクエストの発行にgoogle.golang.org/appengine/urlfetchモジュールを使う必要があるので、外部APIにアクセスするパッケージも対応する必要がある

感想:

f:id:aereal:20171211115813p:plain

  • GAE/Go, 実行環境が特殊なので開発でめっちゃハマりそうでイヤだなと思っていたけど意外とそうでもなかった
    • 上記のようにライブラリにちょっと手を入れる必要があるかも、くらい
    • 対応自体もわりと一般的というかGAE特化というほどでもないので穏便
  • stdout/stderrに出力してもなにも見えなくて、GAEのlogモジュールを使う必要がある
  • cron実行の結果とか500エラーの割合などがGAEのダッシュボードで見れて便利
    • cron実行結果のログはStackdriverで見れてうまく他のGCPサービスと連携してるんだなーと思った