現在、私たちは新サービスの立ち上げに向けてCI/CD環境の準備を進めています。 これまでのラクスではオンプレミス環境で運用が多かったのですが、新サービスはクラウドネイティブな環境での運用を考えています。 新しい取り組みなので四苦八苦しているところですが、どのような点に注意しながら環境を構築しているのかご紹介させて頂こうと思います。
#RAKUSMeetup©2020 RAKUS Co., Ltd.©2020 RAKUS Co., Ltd.新サービス立ち上げに向けたCI/CD環境の構築SREチーム みかた
View Slide
#RAKUSMeetup©2020 RAKUS Co., Ltd.自己紹介 / チーム紹介
#RAKUSMeetup©2020 RAKUS Co., Ltd.見形親久(みかたちかひさ)<経歴>2002~ Sierにて受託開発を実施2015~ ラクスにて楽楽精算の開発を担当2021~ SREチームを立ち上げ<得意分野>アプリ開発(C/C++/Java/Python・・・etc)サービス運用(仕組み化/自動化)インフラはちょっとだけワカル<趣味>ランニング飲み歩きサウナスノーボード最近はもっぱらスノーボードyukiyama ID:8ob1gooRVJD
#RAKUSMeetup©2020 RAKUS Co., Ltd.SREチームの構成● Businnes Platformチーム サブスクリプション管理システムの開発を行うチーム モダンな技術でシステム開発を行っています● DevOpsチーム IaCやCI・CD環境・・・etc 俗に言うSREっぽいチーム Business PlatformチームのCI・CDもサポートしています
#RAKUSMeetup©2020 RAKUS Co., Ltd.SREチームの役割● Businnes Platformチーム モダンな技術へのチャレンジ● DevOpsチーム モダンな技術の展開チャレンジで集めたノウハウは商用のサービスへ還元していきます
#RAKUSMeetup©2020 RAKUS Co., Ltd.システム構成
#RAKUSMeetup©2020 RAKUS Co., Ltd.システム構成● システム基盤はAWS EKS(Kubernetes)を採用● フロントとバックを分割したSPA構成● フロントエンドはTypeScript + Reactを採用● バックエンドはGo + Pythonを採用
#RAKUSMeetup©2020 RAKUS Co., Ltd.
#RAKUSMeetup©2020 RAKUS Co., Ltd.CI環境の検討
#RAKUSMeetup©2020 RAKUS Co., Ltd.CI環境の検討 CIの実行待ちは極力小さくする 最初のうちは実行時間は気にしない 開発者と同数以上のパイプラインを用意する インフラ担当不在なのでサーバ管理に不安あり マネージドサービスを利用して管理をしない CIで利用するツールはまだ未確定 外部サービスとの連携のも考慮点に入れる
#RAKUSMeetup©2020 RAKUS Co., Ltd.CI環境の検討● 最初はコストを抑えたい VCSに用意されているRunnerの無料枠は使い倒す CircleCIなどのCIサービスは本当に必要か考える● 情報の漏洩リスク、トレーサビリティも考慮する アクセスを社内のみに制限する トラブル時に操作記録を確認できる
#RAKUSMeetup©2020 RAKUS Co., Ltd.CI環境の検討観点 GitLab CIオンプレGitLab CIクラウドGitHub ActionsクラウドCircle CI実行待ち ❌ ○ ○ ○サーバ管理 ❌ ○ ○ ○ツール連携 ❌ △ ○ ○コスト ○ △ △ ❌セキュリティ ○ ○ ○ △
#RAKUSMeetup©2020 RAKUS Co., Ltd.CD環境の検討
#RAKUSMeetup©2020 RAKUS Co., Ltd.CD環境の検討● 本番環境へのアクセス権は制限する必要がある インフラ部門のみCDできる様にしたい● CIとCDに境界線を与えるべきか CI=開発 / CD=インフラ と責任部署が別れている CIとCDは明確に別けた方が運用がシンプル
#RAKUSMeetup©2020 RAKUS Co., Ltd.CD環境の検討● SSOT(single source of truth)を担保したい 本番環境の直接操作(kubectl等)は禁止する 本番・ステージングなど環境ごとのマニフェスト管理は避ける テンプレートエンジンを利用して動的にマニフェストを生成する● CDの資材のレビューとその履歴の追跡は必須 Gitを利用してプルリクでレビューする
#RAKUSMeetup©2020 RAKUS Co., Ltd.CD環境の検討要件を整理するとGitを元にした自動デプロイの流れがよさそうですHelm + ArgoCDの組み合わせでGitOpsを行うという方針となりました
#RAKUSMeetup©2020 RAKUS Co., Ltd.Helm Kubernetesのパッケージ管理ツール Chartと言われる設定ファイル郡でマニフェストを管理する デプロイされたChartはリリースという概念で一括管理される 公開されたリポジトリ 幅広いツールのチャートがHelmリポジトリで公開されている Goを利用したテンプレートエンジン GoのTmplateを利用しておりif、ループ、関数も利用可能
#RAKUSMeetup©2020 RAKUS Co., Ltd.ArgoCD / GitOps ArgoCD GitOpsベースでKubernetesに対応したCDツール Gitリポジトリをサポートしている WebのUIとコマンドラインを提供している GitOps Weaveworksが2017年に提唱した開発手法 Gitで管理されているマニフェストをk8sへ同期する プルリクエストといった慣れた手法でk8sへデプロイできる
#RAKUSMeetup©2020 RAKUS Co., Ltd.今後の展望について
#RAKUSMeetup©2020 RAKUS Co., Ltd.今後の展望についてノウハウを他のサービスでも利用できる様にするのが今後の展望です今回の環境はクラウドを前提としているので、オンプレの移植が必要です
#RAKUSMeetup©2020 RAKUS Co., Ltd.オンプレへの移行先● ソースコードのリポジトリ:GitHub → GitHub or GitLab● CIのRunner:GitHub Actions → GitHub Actions or GitLab CI● CIの基盤:GitHub提供 → Kubernetes or VM tanzu● コンテナのリポジトリ:AWS ECR → Docker Registry● マニフェスト管理:Helm → Helm● CDツール:ArgoCD → ArgoCD
#RAKUSMeetup©2020 RAKUS Co., Ltd.まとめ
#RAKUSMeetup©2020 RAKUS Co., Ltd.まとめ正直なところGitHubとCircleCIで完了でしょ? くらいに考えていましたが、蓋を開けてみたらあまりにも選択肢が多く目移りしてしまいました本当に必要なモノ、現場の運用、組織構成も考えた上で、欲張らずに最小セットで初めてみることが大切かと思います
#RAKUSMeetup©2020 RAKUS Co., Ltd.©2020 RAKUS Co., Ltd.ご清聴ありがとうございました