Kubernetes (on AWS)や周辺ツールの成熟
「マイクロサービスにおけるRails」とは結構なことです。しかし、それが自社に許された工数や人的リソースで構築・運用でき、それを活用してビジネスの役に立たなければ意味がないでしょう。
そのために欠かせないのは、OSSの力を借りる、ということです。
freeeでは、Kubernetesを前提としたOSSを採用したり、私がメンテナーを買って出たりすることで、できるだけ自社だけで開発が閉じないようにしています。特にメンテナンスを代行するコストは相当なものですが、あえてそれをやるメリットは、「自社よりも大きな規模でKubernetesを利用しているエンジニアの要望に耳を傾けることで、自社に将来必要とされること、直面する課題を事前に察することができる」ということにつきます。
そのために、私は以下のOSSのメンテナーをしています。似たような課題感をお持ちの方は、ぜひREADMEを読むところから初めてみてください。
kube-aws
言わずと知れたKubernetes on AWSクラスタを構築し、クラスタの構成情報をコードで管理するためのツールです。AWSに詳しい方であれば、「CloudFormationのwrapper」と言えばわかるかもしれません。利用する敷居の高さは正直kopsなど他のツールと比べて高いものの、AWSのベストプラクティスを活かしてプロダクション用とのKubernetesクラスタを構築することだけを突き詰めているので、AWSに詳しい人にとってはとっつきやすく、コントロールしやすいといったメリットがあります。私自身、そのメリットを持ったKubernetesクラスタのプロビジョニングツールがほしいがために、そしてまだそこに注力した代替えツールが存在しないために、いまだにメンテナーを続けています。
Helmfile
KubernetesのためのCloudFormationやTerraformのようなものです。1チーム、1サービスなどの比較的大きな単位で必要とされるアプリケーション一式をYAMLで一元的に管理し、まとめてデプロイするといったことができます。内部ではHelmというKubernetes向けのパッケージマネージャを利用しています。
Brigade
Kubernetes向けのスクリプティングフレームワーク。LinuxにおけるBash、WindowsにおけるPowerShellのように、KubernetesをOSと見立てたときにKubernetes上で動く「ちょっとした」分散システムをスクリプト感覚で組めるもの、といえます。CI&CDパイプラインの実装などによく使われていますが、原理的にはJavaScriptとKubernetesで表現できることは何でもできます。
まとめ
本記事では、コンテナ仮想化やマイクロサービズアーキテクチャを取り巻く状況とfreeeにおける課題、またそれに対する対抗策としてKubernetes on AWSの活用、そして周辺OSSについて紹介しました。
コンテナもKubernetes on AWSも何らかの課題解決の手段で、すべてのケースで適用できるわけではないと思います。しかし、ここで紹介したことが、急激に分散し大きくなるシステムやチームに悩まされているエンジニアの皆さんの参考になれば幸いです。