DevOpsで開発とデプロイのサイクルを高速化し、テストや監視で事前に障害を潰す。「オペレーショナルエクセレンス」実現のポイント
自社のビジネスを効率化し、新たな価値を創造していくデジタルトランスフォーメーション(DX)を推進する際に欠かせないのがクラウドの力です。今やMicrosoft Azureをはじめとするさまざまなクラウドサービスが、顧客のニーズに応えるべく次々と最新技術を反映したサービスを投入し、進化を続けています。こうしたクラウドサービスをうまく活用することで、自社の価値をさらに高めていくことができるでしょう。
ただ、多くの成功例が現れている一方で、従来からオンプレミスで構築してきたインフラをそのままクラウドに持っていくだけではどうも思うような効果が実感できない、という悩みの声も聞こえてきます。こうしたときにリファレンスとして活用したいのが、クラウド戦略の策定、実装の道筋を示す「Microsoft Cloud Adoption Framework for Azure」と、それをAzure上の具体的な設計原則に落とし込んだ「Microsoft Azure Well-Architected Framework」です。
Microsoft Azure Well-Architected Frameworkは、Azureのアーキテクチャにおける設計原則や考慮すべきポイントをまとめたフレームワークで、「コスト最適化」「オペレーショナルエクセレンス」「パフォーマンス効率」「信頼性」「セキュリティ」という5つの柱で構成されています。この内容を、Webベースのアセスメントツール「Azure Well-Architected Review」やAzure上のチェックツール「Azure Advisor」とともに活用し、実践していくことで、自社のニーズに合わせてクラウドの力をフルに生かし、DXを推進していくことができるでしょう。
幅広い概念を包含した「オペレーショナルエクセレンス」
ここでは別記事で紹介したコスト最適化に続き、Microsoft Azure Well-Architected Frameworkの2つ目の柱であるオペレーショナルエクセレンスについて説明していきます。
さて、オペレーショナルエクセレンスとは何でしょうか。日本語で一番近い言葉を当てるとすれば「運用の最適化」といったところでしょうが、オペレーショナルエクセレンスはもう少し幅広い概念を含んでいます。
マイクロソフトの第一アーキテクト本部 本部長、内藤稔氏はこれを「DevOpsや最新の開発方法を利用することによって、開発およびデプロイのサイクルを高速化すること。そして、何か障害や問題が起きたら、もしくは起きる前にすばやく対応できるような構造をクラウドを活用して作っていくことです」と説明しました。
オペレーショナルエクセレンスにおいて重要なトピックは、「アプリケーションの設計」「開発」「デプロイ」「インフラストラクチャデプロイ」「監視」「パフォーマンス」「テスト」の7項目です。
まずアプリケーション設計においては、「DevOpsを前提としたアプリケーション設計やInfrastracture as Code、コンテナ化の活用を検討することが最初のポイントになります」と内藤氏は述べました。
かなり実践的な話となりますが、このとき「タグ付け」と「リソース命名」の規則をしっかり作っておくことが重要だといいます。「タグ付けをしておくと、後からリソースの追跡が行えるだけでなく、横断的な追跡も可能になります」(内藤氏)。また、分散システムになればなるほど依存関係の追跡が困難になることから、最初の設計の段階でどのように依存関係の追跡を実装するかを考えておく必要があります。
またクラウドならではのポイントとして、サブスクリプションごとに設けられている制限を確認することも重要です。「Azureのリソースにはサブスクリプションごとに制限やクオータが存在しています。大規模なシステムでは、場合によってはこうした制限に達する可能性があるため、事前にきちんと制限やクオータについて理解し、もし足りなければSLAを上げて拡張してもらうといったオペレーションを考えておく必要があります」と、内藤氏は解説しました。
さらに、アプリケーションの継続的なビルドとデプロイを容易にすることから注目を集めているコンテナ、Kubernetesをはじめとするコンテナオーケストレーションシステムについても、この段階で適応可能かどうか確認しておくのがいいでしょう。
AzureとDevOpsを前提に高速な開発とデプロイを実現するポイント
次のトピックである開発では、5つの考慮事項があります。
1つ目は、開発やテストに必要な疑似環境を用意すること。2つ目は、分析に必要なさまざまなサービスやアプリケーションを使うことです。
「ひとつの例として、アプリケーションパフォーマンス管理サービスのApplication Insightsがあります。Application Insightsが提供するSDKをアプリケーションに埋め込むことで、アプリケーションの状態に関するさまざまな情報をAzureに吸い上げ、分析に使うことができます」(内藤氏)
3つ目は、さまざまな企業でも課題になっている「技術的負債」に対する検討です。「技術的負債を将来にわたって放置しておくと大きな問題になっていくので、早めにつぶしておくことが重要です。では、どうやって早めにつぶすのか。たとえば、運用環境でセキュリティパッチを当てなければいけないのであれば、それを自動的に適用できる方法がないかを考えるのも1つのやり方です」(内藤氏)
そして4つ目は、「継続的デプロイ/継続的インテグレーション」、いわゆるCI/CDです。「Azureの場合、Azure DevOpsを使って継続的インテグレーションを回し、アプリケーションを迅速にビルド、テスト、デプロイしていく業務フローを採用できるかどうかを検討することになります」(内藤氏)
最後のポイントは「機能フラグ」です。これをうまく活用すれば、テストは終わっていつでもデプロイできる状態になっている新しい機能にフラグを立てておき、必要なタイミングでリリースするといった制御が可能になります。
こうした事柄を抑えることにより、AzureとDevOpsを前提にした有効な開発を実現できるでしょう。
次のデプロイのステップにおいても、考慮事項は多々あります。中でも重要なのは、一貫性があり反復可能な結果を生成する「自動化」です。可能な限り多くのプロセスを自動化し、さらにはデプロイや保守のタスクまで自動化することで、人的エラーを最小限に抑えることができるはずです。内藤氏はほかにも、「ログの記録と監査」「イミュータブルインフラストラクチャの実践」などを考慮すべきだとしました。
続くインフラストラクチャのデプロイでは、「Azureのオートメーション機能や自動化テンプレート、ツールをうまく使っていただくことが重要です」と内藤氏は述べました。Azureが公式に用意している「ARMテンプレート」はもちろん、TerraformやAnsibleといったツールの中から最適なものを選び、異なる環境間でもインフラストラクチャのデプロイが一貫したものになるよう、自動化していくことが重要です。
「見えるものならば改善できる」、監視とテストの重要性
アプリケーションの開発、デプロイの次に来るのは「監視」です。
「当たり前ですが、見えるものならば改善できます」と内藤氏は述べ、アプリケーションやプラットフォーム、コンテナ、ネットワークといった4つの領域それぞれにAzureが提供する監視ツールや監視サービス、さらにはサードパーティの監視ツールを組み合わせて、きちんと可視化・数値化し、継続的に改善していくことを考えておくことが重要だと強調しました。
このとき「アラート関連を自動化しておくことがポイントです。電話やメールによる通知はもちろん大事ですが、その後のアクションを自動化していくことが非常に重要になります」(内藤氏)と、具体的なベストプラクティスを披露してくれました。
監視によって状況を見える化できれば、「パフォーマンスの最適化」も可能になります。「仮想マシンひとつとっても、メモリやCPUはもちろん、ストレージの性能やネットワークのスループットなどがちょっとずつ違ってきます。その中で何がボトルネックになっているのかをきちんと理解しておく必要があります」(内藤氏)
最後に忘れてはならないのが「テスト」です。単体テスト、結合テスト以外にも、ストレステストやビジネス継続低テストのように、さまざまな指標でテストを実施することが重要になります。「既に実行している方にとっては当たり前の話かもしれませんが、デプロイの際に徹底的にテストを実施することによって信頼性を確保できます。さまざまな種類のテストをきちんとやっていくことが重要だと思います」(内藤氏)
こうした観点に立って、チェックリストも活用しながら「自分のプロジェクトにおけるオペレーショナルエクセレンスはどうだろうか」を一度把握してみてはいかがでしょうか。
文:高橋睦美