Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@hapoon

DevOpsとしてInfrastructure as Code導入とCI/CDを改善した1年

この記事は、ベルフェイスの有志メンバーで繋ぐ 新年ベルリレー 5日目のコンテンツです。

きっかけ

ベルフェイスというサービス自体がスタートして5年経過し、機能追加や日々の運用の中で技術的な負債が蓄積されてきたことや技術の発展に伴ってより良い解決策も出てきた中で、システムをより良くしようとするプロジェクトにジョインしたことが今回の改善へのきっかけでした。

改善前

サービススタート時のシステム(以後レガシーシステムと呼びます)はEC2で構築されており、新しいシステムではEKS(EC2)を採用しており、大部分の機能はレガシーシステムにある状態で徐々に新システムに移行が進んでおり、両方のシステムが共存する形を取っていました。(この共存している状態は今も続いています)

新システムではEKSを利用していたり、PHPのバージョンやフレームワークを新しいものを使っていたりとアプリケーション的には新しいアプローチが取られていましたが、レガシーシステム同様にインフラ構築においてコード化されておらず手動でプロビジョニングしていました。
その為、作業のレビューができなかったり事前に自動テストをすることができない状態でした。

またCI/CDパイプラインは用意しているが、コンテナイメージのビルド・デプロイが一塊となっている為コードをリポジトリにプッシュ後デプロイされるまでの時間がかかるというコスト上の問題と、検証時に使用したイメージと本番環境に反映するイメージが異なるという品質上の問題がありました。

さらに新システムは単一のリポジトリにお客様が使用する機能のフロントエンドとバックエンド、社内で使用する管理画面機能のフロントエンドとバックエンドが管理されていた為、いずれかを改修するだけで全てがビルド&デプロイされる複雑なモノリス構造となっていました。

bellface_deploy_flow_2020_01.png

改善方針

Infrastructure as Codeの導入

まず一つ目はプロビジョニングをコード化することで可視化、自動化できるように取り組みました。
これは幾つか方法はある中でも結構ポピュラーなTerraformを使用することにしました。
弊社ではAWSをサービスの主体として使用しているのでCloudFormationでも良かったのですが、今後別クラウドとの併用の可能性も考慮するとベンダーロックされるCloudFormationは避けたかったという思いがあります。

デプロイフローの分離

コンテナイメージのビルド〜EKSへのデプロイメントまでの一塊を分離することにしました。
まずはコードがGitHubにプッシュされたらCircleCIでテスト、イメージのビルド、ビルドしたイメージをECRにプッシュするところまでを一つで区切りました。
その後のデプロイメントの流れに関しては開発環境/ステージング環境/本番環境で多少異なっておりますが、基本的には人がデプロイメントのタイミングを制御できるようにしています。
これは誤ったコードをプッシュした際にデプロイまで自動でされて障害が発生することを防ぐことと不要なデプロイによる時間の無駄をなくす為です。
デプロイメントにおいてはArgoCDを導入することにしました。
同様のツールでは歴史のあるJenkinsを始め、Drone、Concource、Spinnakerなどいろいろありますが、パイプライン全体の管理ほど多機能である必要がなかった為です。
またGitOpsを導入するにあたりマニフェストの適用状況を可視化したり、Slackに通知できたり、開発者がGUI上からデプロイやロールバックを実行できる方がフレンドリーと考えた為です。

モノリスからミニサービスへ

最終的にはマイクロサービスアーキテクチャも視野には入れつつも既に巨大で複雑なものをいきなり分割するのは難しいので、モノリスなコードをお客様向けのフロントエンド、バックエンド、社内向けのフロントエンド、バックエンドの4つのモジュールへと分解し、デプロイ単位はお客様向けと社内向けの2つに分けるミニサービスアーキテクチャへと変更することにしました。

改善後

bellface_deploy_flow-2020-12.png

これらの改善を終えて全てリリースできたのが、2020年12月ということもあり、まだどれほど開発や運用の改善に繋がったかを定量的に測ることはできていません。
ただ、開発チームの方達にとっては大きな変更だったと思いますが、大きな戸惑いもなく受け入れてもらえたことや改善を導入する中で喜んでもらえたことはDevOpsチームとして大きな達成感がありました。

今後はシステムのオブザーバビリティ(可観測性)を実現する為の仕組み作りをしていき、リリースや改善の効果を定量的に測れるようにしつつ耐障害性の向上を目指していきたいと考えています。

まとめ

DevOpsはDev(開発)とOps(運用)を繋ぐものとして生まれた混成語ですが、開発・運用に限らず組織全体に適用可能なイノベーションを生み出す為の文化だと私は思っています。
昨年は開発・運用の改善に留まりましたが、セキュリティやビジネス含めて組織全体を繋ぐ役割として動いていければと長期的には考えています。

最後に

ベルフェイスは、現在積極採用中です!
https://recruit.bell-face.com/

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
hapoon
諸事情あって https://qiita.com/makotok7 から移行 Go,AWS,GCP,Azure,DevOpsまわりの記事を記載していく予定
bell-face
チームで売上を最大化する国内No.1のオンライン営業システム「bellFace(ベルフェイス)」を提供するベルフェイス株式会社の公式アカウントです。3,000社以上の導入実績。いつもの電話で、対面以上の成果を。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?