こちらは フロントエンドもくもく会 - 新年LT大会 の、 後半のLT大会で発表した内容を加筆修正しつつブログに起こしたものです。 発表後、うまく動作しなかった箇所などを追記しています。
ざっくり要点だけ知りたい方は、 一番下にあるGAE/Go slackbot のポイントだけ見てください。
フロントエンドもくもく会はかなり低コストで回っているものの、 以下の点で面倒だなあと感じることがありました。
そこで slack に勝手に通知する bot を用意し、 その辺常に気にするコストをさらに減らそうと思い立ちました。
多いので抜粋。
ここまでがチュートリアルでした。
さらに、 gcloud
コマンドをインストールして、
ローカルで開発を進める手法もあります。
さすがにローカルで進めていかないとしんどいので、こちらの方法で開発を進めていきます。
指示通りにインストールして、
ローカルで dev_appserver.py
の実行や gcloud app deploy
の実行ができるようにします。
ちなみに dev_appserver.py
というのは gcloud をインストールすると使える開発環境用スクリプトです。
インストールの指示通りに google-cloud-sdk/bin にパスを通しておくと使えます。
(gcloud_devsever とかいう名前にすればいいのに・・・)
https://github.com/girigiribauer/nfug-eventbot にあります。汎用性はないです。
ドキュメントをもっときちんと読み込むべきだったんですが、
普通に gcloud app deploy
しただけでは、 cron ジョブ関連はデプロイされないようです。
その証拠に、Google Cloud Platform の管理画面上から cron ジョブの様子が確認できるのですが、 そこにはどうも何も認識されていないようです。
こちらに書いてありますが、 cron ジョブをデプロイするためには、
gcloud app deploy cron.yaml
といったように、さらに引数に指定する必要があるようです。
道理で動かなかったわけだ・・・。
https://cloud.google.com/appengine/docs/standard/go/config/cron
これで試してみると、以下のようなメッセージが表示されつつ、 デプロイしますか?と問われます。
descriptor: [/path/to/nfug-eventbot/slackbot/cron.yaml]
type: [cron jobs]
target project: [nfug-eventbot]
でもって再び管理画面見てみると・・・
きておったー。
当初、これが怪しいと思ったんですよ。 結局違ったんですが、timezone を指定しておくのは(無用なトラブルを避ける意味で) やっておいた方が良いかと思います。
特にグローバルなサービスを利用するときは気をつけておきたいポイントかと思いました。
前者は time.Local を設定することで timezone の設定が可能です。
後者は timezone: Asia/Tokyo とすることで設定可能ですが、 そもそも1時間ごとに処理するのに timezone は関係ないし、 これも一番最初にリージョン設定で指定が出来てるはずなので、 ここで問題が起きているとは考えにくかったりするんですよね。(実際違った)
Go で外に向けてリクエスト投げたりするときは、通常 http.Get とか使うことになるかと思います。
ただ、GoogleAppEngine の中からリクエスト投げる場合は制限があって、 “google.golang.org/appengine” や “google.golang.org/appengine/urlfetch” などの、 専用のライブラリを使う必要があります。
https://cloud.google.com/appengine/docs/standard/go/issue-requests
こっちを使わないと中から外へのリクエストは投げられません。
どこかから情報を引っ張ってきて加工して出す系の処理は、 大抵これに該当すると思うので、気をつけると良いと思います。 まあこれもドキュメントしっかり読めって話です。
gcloud app deploy cron.yaml
と関連ファイル名を直接指定する今回さくっと作ってみましたが、 作るところ自体にそれほど時間はかかっていません。
ドキュメントしっかり読んでおけば問題ないケースがほとんどなので、 要するにドキュメントしっかり読もうってことです。 はい。
今回直接アクセスしたら動作しちゃうし、そこまで厳密にあれこれやってないです。 GoogleAppEngine も、一度やってしまえば(必要なドキュメント読んでおけば) 次からは全然時間かからずにデプロイまで行けちゃうんじゃないですかね。かなり楽です。
この記事は書かれてから1年以上が経過しており、最新の情報とは異なる可能性があります