RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

Azureで実現できるDevOps環境を調べてみた【SREの登竜門】

はじめに

皆さん、こんにちは。tomo37kunです。

突然ですが、Googleが提唱している「class SRE implements DevOps」の考えを御存知でしょうか?
「class SRE implements DevOps」は「SREはDevOpsというinterfaceの実装である」という意味を表します。
つまり、「DevOps = 思想」という定義に対し、それを具体化し実装したものがSREであるという考えになります。
昨今、注目が集まるSREの考え方を実践していく上で、定義に反する実装を行わないためにも、DevOpsの理解は避けられません。
今回はAzureを使用することで実現できるDevOps環境について調べる中で、DevOpsへの理解を深めてみようという試みです。
そのため、以下の内容に一致するものがあれば、是非一読いただけると嬉しいです。

  • DevOps・SREの考え方に興味がある
  • Azureで出来ることを知りたい

目次

DevOpsとは

まずは、基本的な「DevOps(デブオプス)」の考え方についてです。
「DevOps」というのは、「Development(開発)」と「Operations(運用)」の略称を組み合わせた造語です。
ソフトウェアの開発担当と、運用担当がお互いに協力し、ソフトウェア、システムのビジネス価値を高め、その価値をエンドユーザーに迅速に届けることでよりよいサービスを作り上げていく思想のことを指します。
開発者/運用者のように分断された関係では、お互いのチームが目指す方向性にズレが生じてしまうという問題が少なからずおこります。 このような問題に対して、DevOpsの考え方を用いることで具体的に次のようなメリットが生まれます。

  • 問題点や修正箇所の把握がしやすい
  • ソースコードの改修などがあった際にデプロイテストが早く行えるため早い段階で問題点を見つけることができる
  • 問題点が見つかった際のフィードバックがスムーズに行える

DevOpsを実行するための5つの方針

DevOpsを実行するために必要な要素として、5つの要素が定義されています。
1. 組織のサイロの削減
2. エラーが発生するのを前提とする
3. 段階的に変更する
4. ツールと自動化を活用する
5. 全てを計測する

組織のサイロの削減

サイロとは「独立している」状態のことで、開発側・運用側のチーム同士がうまく連携できていない状態を指します。
お互いの組織に溝があることで生じる弊害を無くすため、DevOpsでは組織のサイロ化の削減を大きな指針のひとつに掲げています。

エラーが発生するのを前提とする

いくら要件定義・詳細設計の段階で細かく設計したとしても、必ずシステムのエラーは発生してしまいます。
完璧なシステムはなく、エラーが発生するのを前提としてシステムの開発・運用に取り組むべきであるという考えです。

段階的に変更する

変更によって起こりうるエラーを考慮して、段階的に変更を加えることを推奨する考えです。
段階的な変更をすることにより、新規機能の追加対応、正常状態に戻すロールバック作業が迅速に行えるため、改善の速度を飛躍的に伸ばすこと、及びシステムの安定稼働に繋がる考えです。

ツールと自動化を活用する

開発及び運用の効率化という面で、ツールや自動化を活用することは非常に重要であるという考えです。
これは専門性や開発と運用の人的な負荷を低減することに繋がるので、サービスが拡大し、継続すればするほど初期での導入効果は大きくなります。
また、人的なエラーを起こさないための取り組みとしても非常に有効な手段です。

全てを計測する

システムの運用ログやエラー検知、パフォーマンス含め、全てのデータを計測して数値化していくことが重要です。
これらのデータを開発と運用が密に運用することにより新規機能の開発やプログラム修正の際に役立つという考えです。

Azure DevOpsとは

Azure DevOpsとは、2018/9/10 に Microsoft 社が発表した、DevOpsを実現するために必要なツールが揃っているオールインワンのDevOpsプラットフォームです。
以前は Visual Studio Team Services と呼ばれていたもので、プロジェクト管理、継続的インテグレーション&デリバリーなど、DevOpsのためのサービス群を提供しており、アプリケーション開発の計画・開発・配信・運用のプロセスをAzure上で実現することが可能です。
通常、DevOpsを実現する環境を用意するとなると自動化・構成管理・進捗管理といった多岐に渡るツールの用意が必要となるため、時間がかかってしまいます。
しかし、Azure DevOpsではこれらのツールが整っているため、スムーズに作業を行うことが可能なプラットフォームとなっています。

Azure DevOpsの構成要素

Azure DevOpsを構成するサービスは下記の通りです。

  • Azure Pipeline(CI/CD/テスト自動化ツール)
  • Azure Boards(進捗管理ツール)
  • Azure Repos(バージョン管理ツール)
  • Azure Test Plans(手動テスト管理ツール
  • Azure Artifacts(パッケージ管理ツール)

これらのサービスの全て、もしくは一部を利用することで、Azure上でDevOpsのための環境を構築することができます。

Azure Pipeline(CI/CD/テスト自動化ツール)

Azure Pipelineとは、Azure上でアプリケーションのビルド、デプロイ、テストを自動化する継続的インテグレーション&デリバリー(CI/CD)の機能を提供するツールです。
数多くの言語に対応し、KubernetesやDockerなどのコンテナとも連携可能です。
対応言語は、「Python」、「Java」、「PHP」、「Ruby」、「C++」、「C」、「.NET」、「Node.js」があります。 AndroidiOSで使用することもできます。

Azure Boards(進捗管理ツール)

チームで作業をする際に、どのプロジェクトがどれくらい進行していて、何を作るのか、どのように作るのかという情報はとても大切となってきます。
そのような管理を可能とするのがAzure Boardsとなります。

チームで作業する上で全体の進捗の把握は必須ですが、大きなチームであればあるほど、チーム全体の状況の把握は難しくなります。
このような問題もAzure Boardsを使用すれば可能となります。

Azure Repos(バージョン管理ツール)

Azure Reposとは、ソースコードと成果物の共有とバージョン管理を行うツールです。
Gitベースのリポジトリを提供しており、使用している統合開発環境(IDE)から、接続・連携も可能なためチームメンバーと変更箇所の共有ができます。

Azure Test Plans(手動テスト管理ツール

Azure Test Plansとは、アプリケーションの手動でのテストを管理・支援するためのツールです。
Azure Pipelineが自動テストを支援することに対して、Azure Test Plansでは手動テストを実施する上でのテスト計画・テストケース・テスト結果などを管理する機能を提供します。
テストケースを作成せずに、状況に応じて学習を繰り返す、探索的テストも実行できます。
決められているシナリオ設定の通りにテストを行うシナリオテストも可能です。
リリース後の環境に近い設定でテストを行うことにより、リリース前に欠陥を見つけられるので早期に対応することが可能です。

Azure Artifacts(パッケージ管理ツール)

Azure Artifactsは、アプリケーションを配布・公開するために、ソースコードやライブラリをまとめたパッケージを管理するツールです。
パブリック及びプライベートのソースから「Maven」、「npm」、「NuGet」、「Python」のパッケージを共有可能です。
小さなチームでも簡単に共有を行うことができます。
また、パッケージを共有し、組み込みのCI/CD、バージョン管理、テストを自動化することが可能です。

Azure DevOpsの利用料金

Azure DevOpsの利用料金プランについては「Basic」と「Basic+Test」の2つのプランが存在し、利用料金と機能が異なっています。
Basicプランの利用料金は5人のユーザーまでは無料となっており、6人目以降の使用は一人当たり$6/月が必要となります。
制限なく利用できるサービスは、Azure Boards、Azure Reposとなっていますが、Azure PipelinesとAzure Artifactsは条件付きでの利用料金が無料となります。

一方、Basic+Testプランの利用料金は、1ユーザー辺り$52/月が必要となりますが、Azure DevOpsの全てのサービスを利用することが可能となっています。
また、このプランは30日間の試用期間が用意されており、無料で試すことも可能です。
Azure DevOps は単体のプラットフォームとして利用しても DevOps のための環境を構築できますが、Azure App Service と連携して利用することで継続的インテグレーション&デリバリー環境(CI/CD 環境)とデプロイ先の環境を簡単に作成することができます。

Azure App Serviceと併用して作る統合的なCI/CD環境

Azure App Service とは、Web アプリケーションの実行環境を、インフラの設定を意識することなく簡単に作成できる Azure のサービスです。
Azure Pipeline と連携させることで、Web アプリケーションのビルド、デプロイ、テストを、アプリケーションの実行環境を含めて自動で生成できるようになります。
Azure Repos を連携させることでバージョン管理も同時に行うことができます。
Azure Test Plans や Azure Boards を組み合わせて、手動テストの管理やタスク・進捗管理と連動した統合的なDevOpsを実現することも可能です。

終わりに

今回は体系的な知識を仕入れようということで、Azure DevOpsを使うことでできることについてまとめてみました。
DevOpsを実行するために必要な要素として、定義されている5つの要素を満たすには十分なツールが揃っていると言えるのではないでしょうか?

しかし、DevOpsの導入にはこのようなツールだけではなく文化も変えていく姿勢が必要と言われています。
DevOpsを導入しようという組織への取り組みと、ツールや開発手法の変化を並行に行うことにより、よりビジネスの価値を高められるDevOpsの考え方に近づけていくことが出来るでしょう。

予告

今回、実際に「Azure DevOps」を触った内容について触れられておらず百聞は一見に如かずということで
「今のところ他の人と使う予定がないから一人でAzureのDevOps環境を触ってみた」と題して、Basic+Testプランの無料の試用期間を利用して 各ツールを実際に試した記事を後日投稿させていただければと思います。

参考


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.