概要
インフラ管理をできるだけアプリ開発者から分離して、アプリ開発者が気軽にアプリをデプロイできるような構成を作成しました。
- アプリ開発者がインフラと独立したrepositoryで開発できる
- インフラ開発者が単一のrepositoryでアプリを一元管理できる
- 複数アプリのネットワークや認証認可を共通できる。
- ECRにpushするだけでアプリがインターネットにデプロイできる
リポジトリはこちら
https://github.com/yuu-misaki/eks-argocd-platform
https://github.com/yuu-misaki/eks-argocd-app
インフラ管理者
- プラットフォームリポジトリを用いて、EKSの管理(ALBもingressで定義したものです)をします。
- argocdを用いることで、各アプリケーションの一元管理が可能です。
- アプリアクセスを共通ALBにすることで、ネットワーク制限や監視もしやすくなります。
- 認証認可が必要ならALBにcognitoを紐づけることも可能です。
アプリ開発者
- 好きなリポジトリを立てて、開発できます。
- ECRにイメージをpushすれば、自動的にargocd image updaterによってイメージが更新されます。
- デフォルトではlatestタグがついている、最新のイメージが2分ごとに確認され、新しくなっていれば更新されます。
背景
fastapiやstreamlitをデプロイする際、なんだかんだ毎回terraformコードを作成し、ECRにpushした後連携してECS, Lambdaをデプロイするようなgithub actions or デプロイコマンドを作成し...とやっているのですが、アプリ開発者の負担が大きいなと思うようになりました。
インフラエンジニアから見ればこの順でデプロイコマンド打たなければいけないとかすぐわかるんですが、アプリ開発者にも求めているといつまでもスケールしないなと。
また、それぞれ認証認可やネットワークを作成するのもしんどいので、一元化できないかな〜と考えていました。
そんな中でk8sとargocdの話を聞き、CI/CDの仕組みがめちゃくちゃ良さそう!と感じました。
さらに追い風にEKS autoモードが発表され、これはやるしかないと、プライベートで取り敢えず考えついたものを作成しました。
実行方法
展開方法は以下リポジトリのREADMEに記載してあります。主にplatformリポジトリを参考いただければわかるかと思います。
インフラ管理者はplatformリポジトリ、アプリ開発者はappリポジトリで作業します。
https://github.com/yuu-misaki/eks-argocd-platform
https://github.com/yuu-misaki/eks-argocd-app
なおEKS展開にあたっては、AWS利用料金がかかるので注意ください!
結果
インフラ管理者は稼働アプリやネットワークを一元管理でき、アプリ開発者は自由な開発環境と迅速なデプロイが簡単にできてハッピー!(になるはず)
参考にさせていただいたリポジトリや記事
EKSのterraformコード
https://www.beex-inc.com/blog/eks-automode-hybrid-nodes-raspberrypi-deploy
argo image updater
https://techblog.zozo.com/entry/measure-argocd-image-updater
https://techtekt.persol-career.co.jp/entry/tech/240726_01
今後の展望
- 本リポジトリを作成するにあたっての技術解説記事作成
- ALBへcognitoの連携
- image updaterのdigest戦略以外の検討
- streamlit, fastapi, mlflowをデプロイしてMLプラットフォーム化