エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

【Tech Talk 動画紹介】CronJobからJobをいい感じに作成する

AI・機械学習チームで2021年新卒の北川(@kitagry)です。

あと一ヶ月で新卒2年目になるのかーと思いながら最近生きています。

エムスリーでは隔週金曜日に Tech Talk という社内勉強会を実施しています。 エムスリー公式テックチャンネル 【M3 Tech Channel】 では過去の発表のアーカイブを公開しています。

www.youtube.com

本ブログでは上記YouTubeチャンネルに公開されている私の過去の発表について紹介します。

www.youtube.com

モチベーション

これは以前作成したツールについて発表したものです。

github.com

具体的に何をするものかというと、k8sのCronJobをtemplateとするJobを作成するツールになります。 似たコマンドには公式のkubectlコマンドで以下のように作成できます。

kubectl create job test --from=cronjob/test

このコマンドではcronjobのテンプレート通りのJobを即時に作成することができます。 基本的にはこれで物足りるのですが、たまにJobの内容をちょっとだけ変更したい時があります。 僕の場合は、当日分のアクセスデータを加工するCronJobのロジックを変更したときに、過去分のデータにもその変更を適用したいというユースケースがありました。 他にはmemoryなどのresourceを調整する必要があり何度か変更して試す必要がありました。 この時に

  • kubectl editでcmdを変更
  • kubectl create ... --from=...でjobを実行
  • kubectl editで元に戻す

のようにする必要があり、すごくストレスだったのでこのツールを作成しました。

実装で気にしたこと

kjコマンドが何をするツールかというと、kj namespace nameでCronJobからJobのテンプレートを作成し、それをエディタ(環境変数で指定)で編集した後にapplyするという簡単なものになります。

https://user-images.githubusercontent.com/21323222/121770891-0e033400-cba7-11eb-9d99-4cdc473f5774.gif

kjを作成するときに意識したこととしては、使い方をとても簡単にするということです。 このコマンドは使う頻度が高くありません。作った僕でも使うのは1ヶ月に1回あるかどうかくらいです。 そのため、必ず使い方を忘れない必要がありました。 kjコマンドのヘルプを見ると使い方はとてもシンプルです。

$ kj --help
kj - create custom job from cronjob template

Usage:
        kj namespace name
        kj namespace/name
        kj name

Options:
  -f string
        (optional) filename to save Job resource
  -kubeconfig string
        (optional) absolute path to the kubeconfig file (default "/Users/ryo.kitagawa/.kube/config")

このシンプルな機能に行き着くまでには若干の遠回りがありました。 詳しくは動画を見てください

また、とてもシンプルなのでfzfやpecoなどのfuzzy matching CLIと組み合わせるとより楽に作成できます。

余談

kjコマンドの-fオプションは最初はなかったのですが、都度1から書き直すのがめんどくさくなってとりあえずfileに書き出してそれを編集しながらapplyしていけばいいかとなって作成したものです。 このように怠惰さによってオプションを作成するのはエンジニアっぽくて良いなーと思いました。

余談2

kjコマンドはbrewでリリースしてますが、リリースするのがめんどくさくてあまり更新してません。 もしかしたらreleaseページからダウンロードする方がいいかもです。 これも同じ怠惰だなーとなりました。

だれかいい感じに自動化する方法があったら教えてください。

まとめ

めんどくさい作業はその作業時間よりも長い時間かけて自動化していくのがエンジニアだよなあ!!

We are hiring!

社外の方も Tech Talk にご参加いただけます(知らなかった!!!)。以下ページの「カジュアル面談はこちら」からお申し込みください。

jobs.m3.com