GCE上のVMインスタンスを起動・停止できるDiscord botを書いた
これのちょっとしたオマケというか続き:
インスタンスを起動しっぱなしだと月に5000円くらいかかってしまいそうなので、このマイクラサーバで遊ぶ人達には遊ぶ時だけ起動して終わったら停止してもらうようにお願いしていて、運用としては最初の頃はインスタンスの起動と停止ができる権限だけをその人達に付与してGCPのWebコンソール画面上から起動・停止ボタンをポチポチ押してもらっていたのだけど、基本的に皆がコミュニケーションをとる起点はDiscordなのでDiscordから離れることなくコマンドを打つだけでインスタンスの起動・停止ができたほうが便利だと思い簡単なbotを書いた:
今はマイクラサーバ用にしか使っていないけど一応誰でも自分の権限があるプロジェクトに導入できるように汎用的に書いている。
Googleが公式に推奨しているGCE用のクライアントライブラリはNode.js実装しか存在しなかった 1 のと、discord.jsというDiscord APIのNode.jsクライアントライブラリがあったのでこれらを使ってNode.jsで書くことにした。
discord.jsのほうは型定義が充実していて体験は良かったけど @google-cloud/compute
のほうは型定義が存在しなかったので、実際にAPIを叩いてみて戻り値を見ながら「あ〜インスタンスの外部IPアドレスはこれね……」みたいに確認していく作業があったりして非常につらかった。
認証方法はsecret tokenを環境変数で渡す形式かなと思っていた(discord.jsのほうはそうだった)けど @google-cloud/compute
のREADMEを読むと、サービスアカウントというアカウントを作成して適切な権限を付与してから、そのサービスアカウントの認証情報を検出させる、という方式であることがわかった:
botはDockerコンテナ化しても良かったけど今はマイクラサーバ用にしか使ってないしCloud Storageの容量を消費するのが嫌だったので無料枠のf1-microインスタンスを立ててSSHログインしてリポジトリをgit cloneしてから直実行するという令和とは思えない運用で動かすことにした。また困ったらもうちょいクラウドネイティブな感じに頑張るってことで良いんじゃないでしょうか。