$30 off During Our Annual Pro Sale. View Details »

新サービス立ち上げに向けた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.
    ©2020 RAKUS Co., Ltd.
    新サービス立ち上げに向けた
    CI/CD環境の構築
    SREチーム みかた

    View Slide

  2. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    自己紹介 / チーム紹介

    View Slide

  3. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    見形親久(みかたちかひさ)
    <経歴>
    2002~ Sierにて受託開発を実施
    2015~ ラクスにて楽楽精算の開発を担当
    2021~ SREチームを立ち上げ
    <得意分野>
    アプリ開発(C/C++/Java/Python・・・etc)
    サービス運用(仕組み化/自動化)
    インフラはちょっとだけワカル
    <趣味>
    ランニング
    飲み歩き
    サウナ
    スノーボード
    最近はもっぱら
    スノーボード
    yukiyama ID:8ob1gooRVJD

    View Slide

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

    View Slide

  5. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    SREチームの役割
    ● Businnes Platformチーム
     モダンな技術へのチャレンジ
    ● DevOpsチーム
     モダンな技術の展開
    チャレンジで集めたノウハウは
    商用のサービスへ還元していきます

    View Slide

  6. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    システム構成

    View Slide

  7. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    システム構成
    ● システム基盤はAWS EKS(Kubernetes)を採用
    ● フロントとバックを分割したSPA構成
    ● フロントエンドはTypeScript + Reactを採用
    ● バックエンドはGo + Pythonを採用

    View Slide

  8. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.

    View Slide

  9. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    CI環境の検討

    View Slide

  10. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    CI環境の検討
     CIの実行待ちは極力小さくする
     最初のうちは実行時間は気にしない
     開発者と同数以上のパイプラインを用意する
     インフラ担当不在なのでサーバ管理に不安あり
     マネージドサービスを利用して管理をしない
     CIで利用するツールはまだ未確定
     外部サービスとの連携のも考慮点に入れる

    View Slide

  11. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    CI環境の検討
    ● 最初はコストを抑えたい
     VCSに用意されているRunnerの無料枠は使い倒す
     CircleCIなどのCIサービスは本当に必要か考える
    ● 情報の漏洩リスク、トレーサビリティも考慮する
     アクセスを社内のみに制限する
     トラブル時に操作記録を確認できる

    View Slide

  12. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    CI環境の検討
    観点 GitLab CI
    オンプレ
    GitLab CI
    クラウド
    GitHub Actions
    クラウド
    Circle CI
    実行待ち ❌ ○ ○ ○
    サーバ管理 ❌ ○ ○ ○
    ツール連携 ❌ △ ○ ○
    コスト ○ △ △ ❌
    セキュリティ ○ ○ ○ △

    View Slide

  13. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.

    View Slide

  14. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    CD環境の検討

    View Slide

  15. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    CD環境の検討
    ● 本番環境へのアクセス権は制限する必要がある
     インフラ部門のみCDできる様にしたい
    ● CIとCDに境界線を与えるべきか
     CI=開発 / CD=インフラ と責任部署が別れている
     CIとCDは明確に別けた方が運用がシンプル

    View Slide

  16. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    CD環境の検討
    ● SSOT(single source of truth)を担保したい
     本番環境の直接操作(kubectl等)は禁止する
     本番・ステージングなど環境ごとのマニフェスト管理は避ける
     テンプレートエンジンを利用して動的にマニフェストを生成する
    ● CDの資材のレビューとその履歴の追跡は必須
     Gitを利用してプルリクでレビューする

    View Slide

  17. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    CD環境の検討
    要件を整理するとGitを元にした自動デプロイの流れがよさそうです
    Helm + ArgoCDの組み合わせでGitOpsを行うという方針となりました

    View Slide

  18. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    Helm
     Kubernetesのパッケージ管理ツール
     Chartと言われる設定ファイル郡でマニフェストを管理する
     デプロイされたChartはリリースという概念で一括管理される
     公開されたリポジトリ
     幅広いツールのチャートがHelmリポジトリで公開されている
     Goを利用したテンプレートエンジン
     GoのTmplateを利用しておりif、ループ、関数も利用可能

    View Slide

  19. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    ArgoCD / GitOps
     ArgoCD
     GitOpsベースでKubernetesに対応したCDツール
     Gitリポジトリをサポートしている
     WebのUIとコマンドラインを提供している
     GitOps
     Weaveworksが2017年に提唱した開発手法
     Gitで管理されているマニフェストをk8sへ同期する
     プルリクエストといった慣れた手法でk8sへデプロイできる

    View Slide

  20. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.

    View Slide

  21. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    今後の展望について

    View Slide

  22. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    今後の展望について
    ノウハウを他のサービスでも利用できる様にするのが今後の展望です
    今回の環境はクラウドを前提としているので、オンプレの移植が必要です

    View Slide

  23. #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

    View Slide

  24. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.

    View Slide

  25. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    まとめ

    View Slide

  26. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    まとめ
    正直なところGitHubとCircleCIで完了でしょ? くらいに考えていましたが、
    蓋を開けてみたらあまりにも選択肢が多く目移りしてしまいました
    本当に必要なモノ、現場の運用、組織構成も考えた上で、
    欲張らずに最小セットで初めてみることが大切かと思います

    View Slide

  27. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    ©2020 RAKUS Co., Ltd.
    ご清聴ありがとうございました

    View Slide