日記

花粉症の症状はまだ続いている。とはいえ、辛いと思うほどではなくなってはいる。薬のおかげか、花粉の飛散量のおかげなのか。これまであまり気にしていなかった花粉予報を眺めてみたところ、今は(というかしばらく前から)もうスギではなくヒノキの時期になっているらしい。アレルギーがあるのはスギだけかと思っていたが、この感じじゃヒノキも濃厚だな。が、今はもう外で遊んでも大丈夫なぐらいになっているので、今年はもう乗り切ったと言えるのではないか。

今年に入ってからメンテをしている rufo のパターンマッチ構文の対応をようやく一通り実装して、さっきリリースした。長かった。パターンマッチと一口に言っても、リテラルを使うパターン、ピン演算子、Findパターン、ガード節などなど色々ある。一気に終わらせるのは無理だと悟ったので、チェックリスト化して地道に進めていた。

実は Ruby のパターンマッチ構文をまともに使ったことがなかった。というか今でもない。構文には明るくなったが、どういう場面で役立つかがいまいちピンと来てない。Haskell では息をするようにパターンマッチするわけだけど、それがなぜか Ruby だと日常使いの道具として出てこない。慣れの問題だろうか?Ruby 2.7 が EOL になったし、これからライブラリのコードでもパターンマッチを見かけることが増えるかもしれない。具体的な応用例を見ながら便利に使えるようになるといいなと思っている。

それからこちらも地道に作っていた ECS 向けのデプロイツールも一段落した。実際に使うかどうかはさておき、ECS と周辺サービスをどう組み合わせて使うのか、IAM Role がどう働くかについて解像度が上がったのはよかったと思っている。結局コードは捨てたけど、オートスケール周りの仕組みについてもだいたい理解できた。

定期実行の基盤としては EventBridge Scheduler を採用してみた。スケジュールを組んで、RunTask で処理を実行する感じ。処理ごとにタスク定義を用意するのは流石にバカバカしいので、タスク定義は一つ、あとはタスクでのオーバーライドでコマンドの切り替えやらをやろうと目論んでいたのだけど、これを実現する方法にたどり着くのに苦労した。create_scheduleecs_parameters には overridecontainerOverrides の項目がない。ではどうするかというと、input という項目に override 相当の JSON 文字列を突っ込む。例えばこんな感じ(関係ない部分は省略):

create_schedule({
  target: {
    ecs_parameters: {
      task_definition_arn:,
    },
    input: { cpu: '512', containerOverrides: [{ name: 'app', command: %w[echo hello] }] }.to_json
  },
})

これでタスク定義の CPU を 512 に、app コンテナのコマンドを ["echo", "hello"] にオーバーライドできる。

なかなかこの情報にたどり着くのが難しかった。ちまたの情報はともかく、AWS が提供するドキュメントではこの辺のこともカバーしておいてほしいなと思った。