2021年8月24日火曜日

ゲーム開発者のための SRE

はじめに

 まずはじめに SRE について軽く触れておきます。
SRE は Site Reliability Engineer(ing) の略です。
Google が提唱しているロール(役割)で、運用に関わります。
50% ルールというのがあり、主たる業務はエンジニアリングによる開発・自動化(Dev)でこれを必ず50%以上確保するルールです。
残りは運用業務(Ops)に割り当てます。

SRE については書籍「Google - Site Reliability Engineering」を読むといいと思います。
私も日本語版を勝手読みました。英語版は無料で読めます。
英語版「Google - Site Reliability Engineering」
日本語版「SRE サイトリライアビリティエンジニアリング――Googleの信頼性を支えるエンジニアリングチーム」

最初読んだときは「ふーん Google ではそうなのね。うちとはマッチしない部分もあるなぁ」って感じだったのですが、実践し始めたらちょくちょく参考にしているので、普通にオススメ。まずはこれを読むのがいいです。
SRE は Google が提唱しているものであり、それが日本でも普及し始めていますが、SRE が実務でなにをしているかは企業によってそれぞれだと思います。
なにをしているかはその現場によって求められるものが違ってくるので当然です。
SRE がどういう思想のもと活動しているのかに着目するのが良いです。

少しそれましたが、詳しいことは書籍や検索して調べてみてください。

ゲーム会社における SRE について

さて、ここからが本ブログで今後扱っていきたい話題です。
最初に述べたように Google の SRE はサービス運用に対して活動をしています。
スマホゲームや家庭用ゲームでも、売り切りではなくサービスなゲームが主流となった今、
ゲーム会社でも SRE の活躍の場があります。

ゲーム会社でも SRE 人材欲しいってのはまぁ普通の話で、めちゃ欲しいです。
でも私が語りたいのはちょっと違う話です。

ゲーム開発者のための SRE

ここで考えたいのは、ゲーム「運用」における SRE ではなく、
ゲーム「開発」における SRE です。

私個人の想いとして、
ゲーム開発における開発環境、ツールや CI/CD などを「開発者向けのサービス」として捉え、「ゲーム開発者のための SRE」が必要であると感じています。
特に私は CI/CD に関わることが多かったのですが、この辺は誰かの片手間で提供されていることが多いように感じています。
(そもそもゲーム作りたくて入ってる人がほとんどなんだからゲーム作ってたいのは当然だよねーとかこの辺はまたいろいろ話したい)
ゲーム開発はやることが多いです。そのため優先度つけてやっていかないとゲームをリリースできません。ゲームをリリースすることが必須になってしまうと、ゲーム開発者のための改善は片手間の片手間でまぁ回りません。課題を感じつつ、手が空いたらやる。そんなのばかりになります。

そのために「ゲーム開発者のための SRE」が必要なんじゃないかと。
SRE は開発期から関わっていくので「?」な方もいるかもしれません。
Google の SRE は対象のサービスがリリース前の開発時から関わると書籍にも書いてあります。ただ、これはサービスのための活動と言えます。
「ゲーム開発者のための SRE」はサービスを作っている人たちのための活動です。
(最終的にはゲームを届けるお客様のためになることなので、同じと言えるかもしれませんが)

SRE とはこうで、こうあるべきだという話ではなく、
SRE の思想を持ち込みたいと考えてるので、名前は正直どうでもいいですが、名前があることもまた大事なので。。


まとまりなく書き連ねたので、今日はこのへんで締めます。
とりあえず、私が想いが伝わればいいかなと思ってます。
最近会社では SRE を自称してて、実践し始めてます。
他の会社の方とかとも話してみたいので興味ある方は SNS などお声がけ頂けると嬉しいです。

ではでは。





2021年8月11日水曜日

DockerHub Automated Build の Webhook の代わりに GitHub Actions workflow_dispatch を使う

DockerHub の料金改訂により Automated Build が無料プランでは使えなくなりました。
Changes to Docker Hub Autobuilds - Docker Blog

DockerHub に image push するのに一番楽で良かったのですが、しょうがないですね。
今は GitHub Actions があるのでそこから build して push するのが簡単だと思うので、そちらに移行しました。

移行したリポジトリたち

build と push は  アクションを使えばとても簡単です。
下記、もしくは上記リポジトリの workflows を参考にしてみてください。

さて、定期的なビルドは GitHub Actions の cron トリガーを使えばすぐに対応できます。
また hook の post_push も必要な環境変数を与えたうえで run すれば問題ないでしょう。

問題は Webhook トリガーで、私の場合は PyPI や gems のリリース RSS をトリガーに Webhook を叩いてビルドしていました。
例:「ブログズミ: PyPI のリリースを検知して Dockerhub の image を更新する

これを GitHub Actions でやる場合は「workflow_dispatch」を使うことになると思います。
actions 側は特に難しいことはなくて、on のところに workflow_dispatch を追加するだけです。
一方 Webhook を送信してた側は dispatch イベントを API で送信することになります。
API ドキュメントは↓
Actions - GitHub Docs

以下は、Integromat で dispatch イベントを送る設定方法です。
repo 権限のついた GitHub の Personal Access Token が必要なので発行しておきましょう。


まず、ただの Make request モジュールから Make a Basic Auth request モジュールに変更しています。
Credentials が必要になるので Add ボタンから先程作成したトークンを入力します。
Username は「token」です。

URL には下記の {} で囲まれた部分を適宜変更して入力します。
/repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches
workflow_id は Action を開いたときの URL でわかるとは思いますが、面倒なのでファイル名指定がおすすめです。(ファイル名には拡張子も含める必要があるので注意してください)

Method は「POST」、
Headers には「Name: Accept, Value: application/vnd.github.v3+json」を追加します。

Body type を「Raw」にし、Content type は「JSON (application/json)」にします。
Request content には「{ "ref": "master" }」(今は main の場合もあるでしょう)を入力します。workflow_dispatch には任意の input パラメータを設定できますが、それらの設定はここにつけ足すことになります。

設定できたらモジュールを右クリックし、「Run this module only」を実行して、トリガーできるか確認しましょう。
Integromat での設定例を紹介しましたが、他の場合でも対応方法は同じような流れになると思います。


今回は以上。では。


2021年8月3日火曜日

【JFrog Pipelines】Cron Trigger を設定する

 しばらく活動してなかったら Subscription キャンセルされてしまったので Cron Trigger で何もしないジョブを定期実行するようにしました。

ちなみにキャンセルされるとその環境を継続利用するにはプランのアップグレードをするしかないようです。
もし、無料プランで使い続けたい場合は同じメールアドレスでの登録はできないので、別のメールアドレスを用意して新規登録する必要があります。

本題に戻りましょう。
Cron Trigger はリソースに cron 定義を追加し、それを input にすることで設定できます。
CronTrigger - JFrog - JFrog Documentation

とっても簡単です。
今回の内容は以上ですが、環境が使えなくなると1から Integration/Pipelines Source/Node Pool などなどを構築しなおしになるので、この設定をしておくと良いと思います。

では。