Upgrade to Pro — share decks privately, control downloads, hide ads and more …

新サービス立ち上げに向けたCI/CD環境の構築

mekka
December 23, 2021

 新サービス立ち上げに向けたCI/CD環境の構築

現在、私たちは新サービスの立ち上げに向けてCI/CD環境の準備を進めています。
これまでのラクスではオンプレミス環境で運用が多かったのですが、新サービスはクラウドネイティブな環境での運用を考えています。
新しい取り組みなので四苦八苦しているところですが、どのような点に注意しながら環境を構築しているのかご紹介させて頂こうと思います。

mekka

December 23, 2021
Tweet

More Decks by mekka

Other Decks in Programming

Transcript

  1. #RAKUSMeetup ©2020 RAKUS Co., Ltd. 見形親久(みかたちかひさ) <経歴> 2002~ Sierにて受託開発を実施 2015~

    ラクスにて楽楽精算の開発を担当 2021~ SREチームを立ち上げ <得意分野> アプリ開発(C/C++/Java/Python・・・etc) サービス運用(仕組み化/自動化) インフラはちょっとだけワカル <趣味> ランニング 飲み歩き サウナ スノーボード 最近はもっぱら スノーボード yukiyama ID:8ob1gooRVJD
  2. #RAKUSMeetup ©2020 RAKUS Co., Ltd. SREチームの構成 • Businnes Platformチーム 

    サブスクリプション管理システムの開発を行うチーム  モダンな技術でシステム開発を行っています • DevOpsチーム  IaCやCI・CD環境・・・etc 俗に言うSREっぽいチーム  Business PlatformチームのCI・CDもサポートしています
  3. #RAKUSMeetup ©2020 RAKUS Co., Ltd. SREチームの役割 • Businnes Platformチーム 

    モダンな技術へのチャレンジ • DevOpsチーム  モダンな技術の展開 チャレンジで集めたノウハウは 商用のサービスへ還元していきます
  4. #RAKUSMeetup ©2020 RAKUS Co., Ltd. システム構成 • システム基盤はAWS EKS(Kubernetes)を採用 •

    フロントとバックを分割したSPA構成 • フロントエンドはTypeScript + Reactを採用 • バックエンドはGo + Pythonを採用
  5. #RAKUSMeetup ©2020 RAKUS Co., Ltd. CI環境の検討  CIの実行待ちは極力小さくする  最初のうちは実行時間は気にしない

     開発者と同数以上のパイプラインを用意する  インフラ担当不在なのでサーバ管理に不安あり  マネージドサービスを利用して管理をしない  CIで利用するツールはまだ未確定  外部サービスとの連携のも考慮点に入れる
  6. #RAKUSMeetup ©2020 RAKUS Co., Ltd. CI環境の検討 • 最初はコストを抑えたい  VCSに用意されているRunnerの無料枠は使い倒す

     CircleCIなどのCIサービスは本当に必要か考える • 情報の漏洩リスク、トレーサビリティも考慮する  アクセスを社内のみに制限する  トラブル時に操作記録を確認できる
  7. #RAKUSMeetup ©2020 RAKUS Co., Ltd. CI環境の検討 観点 GitLab CI オンプレ

    GitLab CI クラウド GitHub Actions クラウド Circle CI 実行待ち ❌ ◦ ◦ ◦ サーバ管理 ❌ ◦ ◦ ◦ ツール連携 ❌ △ ◦ ◦ コスト ◦ △ △ ❌ セキュリティ ◦ ◦ ◦ △
  8. #RAKUSMeetup ©2020 RAKUS Co., Ltd. CD環境の検討 • 本番環境へのアクセス権は制限する必要がある  インフラ部門のみCDできる様にしたい

    • CIとCDに境界線を与えるべきか  CI=開発 / CD=インフラ と責任部署が別れている  CIとCDは明確に別けた方が運用がシンプル
  9. #RAKUSMeetup ©2020 RAKUS Co., Ltd. CD環境の検討 • SSOT(single source of

    truth)を担保したい  本番環境の直接操作(kubectl等)は禁止する  本番・ステージングなど環境ごとのマニフェスト管理は避ける  テンプレートエンジンを利用して動的にマニフェストを生成する • CDの資材のレビューとその履歴の追跡は必須  Gitを利用してプルリクでレビューする
  10. #RAKUSMeetup ©2020 RAKUS Co., Ltd. Helm  Kubernetesのパッケージ管理ツール  Chartと言われる設定ファイル郡でマニフェストを管理する

     デプロイされたChartはリリースという概念で一括管理される  公開されたリポジトリ  幅広いツールのチャートがHelmリポジトリで公開されている  Goを利用したテンプレートエンジン  GoのTmplateを利用しておりif、ループ、関数も利用可能
  11. #RAKUSMeetup ©2020 RAKUS Co., Ltd. ArgoCD / GitOps  ArgoCD

     GitOpsベースでKubernetesに対応したCDツール  Gitリポジトリをサポートしている  WebのUIとコマンドラインを提供している  GitOps  Weaveworksが2017年に提唱した開発手法  Gitで管理されているマニフェストをk8sへ同期する  プルリクエストといった慣れた手法でk8sへデプロイできる
  12. #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