こんにちは。AITCのどらをです。
現在、クレスコではDevSecOpsの新サービスを準備中です。今回はその新サービスの一部であるIaC(Infrastructure as Code)フレームワーク「Reunir」をご紹介したいと思います。
DXの推進が求められる昨今、システム開発はより迅速に、柔軟に、多様にと、急速な変化が求められています。私自身、アジャイル開発やリーン開発などの開発手法を求められることが多くなったと感じています。
DXを推進する一つの要素として、DevOpsがあります。DevOpsという言葉は既にメジャーなものかと思いますが、まずはおさらいとしてWikipediaの概要を見てみましょう。
Wikipediaより引用
DevOps(デブオプス)は、ソフトウェア開発手法の一つ。開発 (Development) と運用 (Operations) を組み合わせたかばん語であり、開発担当者と運用担当者が連携して協力する(さらに両担当者の境目もあいまいにする)開発手法をさす。ソフトウェアを迅速にビルドおよびテストする文化と環境により、確実なリリースを、以前よりも迅速に高い頻繁で可能とする組織体勢の構築を目指している。
DevOpsの定義はさまざまなサイトで語られております。私の見解としては、システム運用で得られるメトリックス(システムKPIとビジネスKPI)を元に、継続的にシステム改善を行っていくことで、システムの成長を持続的に達成することを目的とした開発手法だと思ってます。また、システムを常によりよくしていくという文化を醸成することもDevOpsの重要な要素だと思います。
クレスコでも開発手法としてDevOpsが選択されることが増えてきました。
DevOpsを実現するためには多くのツールやサービスの中から最適の組み合わせ(DevOpsツールチェーン)を見つける必要があります。それを利用する人への教育や、利用フローの策定も必要です。ツールやサービスは日々新しくなってきますので、DevOpsツールチェーンの改善も必要になります。
プロジェクト初期においてこのツールやサービス選びに大きなコストが発生します。また、初期構築段階でこれをないがしろにすると、後からDevOpsを実現することに大きなコストとリスクが発生してしまうことが多くなります。
クレスコでは、この問題を解決する方法の一つとして、Infrastructure as CodeとCI/CD ツール(サービス)を組み合わせした、「Reunir」というWEBアプリ開発向けののDevOpsを支援するIaCフレームワークとノウハウがあります。
「Reunir」はスペイン語で「集める、集約する」という意味です。DevOpsに必要な要素を集約させたフレームワークを実現したかったため、「Reunir」と名付けました。
それでは、「Reunir」について、詳しく紹介していきます。
「Reunir」は、AWSのInfrastructure as Codeである「AWS CloudFormation(以後、CloudFormation)」を利用し、開発とリリースに必要なシステム環境と、サンプルアプリケーション(Webアプリケーション)とそのビルドパイプラインを自動で作成します。
これにより、プロジェクト初期のシステム構築コストを抑えつつ、システムを成長させるためのDevOps環境が即時に作成可能になります。
「Reunir」が自動作成するサービス・システムの一例を示します。
- IAM:AWSのリソースにアクセスするユーザを管理するサービス
- VPC:AWSのネットワーク管理サービス
- AWS CodeCommit:AWSでgitベースのソースコードを管理をするサービス
- AWS CodeBuild:AWSでコードのコンパイル~デプロイ可能オブジェクトの作成を行うサービス
- AWS CodePipeline:コードのコミット~デプロイまでをモデル化および自動化するサービス
- Amazon ECR:AWSのDockerイメージ保存サービス
- Amazon ECS:Dockerイメージの実行/停止/管理サービス
- Amazon RDS:AWSでリレーショナルデータベースを構築/運用するサービス
- Elastic Load Balancing:WEBのリクエストを振り分けるロードバランササービス
上記のシステム環境の上に、サンプルのアプリケーションが実行されるようになります。
AWSの構成は、AWS Well-Architectedフレームワークに従って構築することを目指しており、AWSの利用が初心者な人でも簡単にアプリケーション開発に着手できるようになります。
また、プロジェクト初期からCI/CD環境が利用できるため、積極的にアプリケーションを修正、公開し、実際に動くアプリケーションをもとにお客様と意識合わせや改善を行うことが可能となります。
DevOpsを実現するためにはアジャイルなどのプロジェクト運営の手法も重要ですが、こうしたアプリケーションの作成に注力する開発環境の準備を初期に検討しておくことも重要になってきます。
「Reunir」の特徴とその効果をまとめます。
- 再現性・・・「Reunir」に付属されるシェルを実行するだけで、毎回同じ設定のサービスを異なるAWS環境に対して作成することができます。
- 俊敏性・・・「Reunir」はシェルの実行以外がほぼ自動化されているため、CloudFormationを実行可能なAWSアカウントがあれば、シェルを実行するだけで即時に環境を作成できます(おおよそ上記の環境で30分から1時間)
- 移植性・・・設定ファイルを修正するだけで、開発環境、受入環境、本番環境が同一のシステム構成で複製可能です。また、特定の環境のみ複数作成することや異なるAWSアカウントで同じシステム構成を複製することも可能です。
- 拡張性・・・上記で紹介したサービスが基本セットとして提供されますが、AWSサービスであれば、CloudFormationの定義を増やすことで拡張することが用意となっております。
- 透明性(管理のしやすさ)・・・「Reunir」は実行に必要な情報すべてがコードによって管理されます。いつだれが修正したのか、どのような修正なのかはすべてリポジトリに記録されます。
私個人の感想としては、テスト環境の複製や作り直しが簡単になるため、積極的にシステムに手を入れられる安心感が強みだと思います。
「Reunir」はプロジェクトの初期段階で利用することを想定しております。しかし、既存プロジェクトでDevOpsを実現するためにも利用可能だと考えております。
実際に実プロジェクトで、非DevOps環境からDevOps環境への移行を効果検証中です。
CI/CD提供されておらず、かつAWSサービスの管理を手動で行っているプロジェクトがあります。このプロジェクトではリリース頻度をあげる必要があり、かつ複数の開発が並行しているためテスト環境の追加構築、構成管理の強化が求められています。つまり、DevOps環境の整備が必要です。
そこで、まずこのプロジェクトの開発環境を、「Reunir」で作成されたDevOps環境にリホストします。開発者がコントロールしやすい環境で「Reunir」の有用性を検証することでリスクを下げつつ、効果測定をおこないます。
現在はリホストを行っている真っ只中なのですが、開発環境で「Reunir」の有用性が確認できたら、段階的に受入環境、本番環境に適用範囲を増やしていくことで、既存のアプリケーションへの影響を最小にしつつDevOps環境を構築できると予想されます。
このように「Reunir」は部分な環境構築にも利用可能で、既存システムの強化にも有用だと考えております。
クレスコがDevOpsを実現するために開発したIaCフレームワーク「Reunir」をご紹介しました。「Reunir」は日々、機能追加を行い、どんどん拡張と改善がされています。
今後、パワーアップした「Reunir」やその他のDevSecOpsサービスの機能についてもブログでご紹介していけたらと思います。