DevOps では、従来型のソフトウェア開発と、インフラストラクチャ管理プロセスを使用するよりも速いペースで製品の進歩と向上を達成し、企業がアプリケーションやサービスを高速で配信できるように、文化的な基本方針、プラクティス、ツールが組み合わされています。この高速化により、企業は顧客により良いサービスを提供し、市場競争力を高めることができます。

DevOps とは?

DevOps モデルでは、開発とオペレーションが「サイロ化」されることはありません。 場合によっては、開発チームとオペレーションチームを 1 つのチームに統合することが行われます。エンジニアは、開発とデプロイのテストからオペレーションに至るアプリケーションのライフサイクル全体にわたって作業するため、1 つの職務にとどまらず、幅広くスキルを磨くことができます。

採用する DevOps モデルによっては、品質管理チームとセキュリティチームがアプリケーションのライフサイクル全体にわたって開発とオペレーションにもさらに緊密にかかわります。DevOps のチーム全員がセキュリティに焦点を当てる場合、これは DevSecOps と呼ばれます。

こうしたチームは、これまで手動で時間がかかっていた処理を自動化する手法を使用します。迅速かつ確実にアプリケーションを運用して展開するために役立つテクノロジースタックとツールを使用します。さらにこれらのツールは、通常、他のチームのサポートを必要とするタスク (例えばコードのデプロイ、インフラストラクチャのプロビジョニングなど) をエンジニアが単独で実行するために役立ちます。これにより、チームの作業速度はさらに向上します。

高速で動くことにより、顧客のためにより迅速に革新を進めることができ、変化し続ける市場によりよく適合し、ビジネスの成果をより効率的に得られるようになります。DevOps モデルによって、開発チームと運用チームにこれらの効果を与えることができます。例えば、マイクロサービス継続的デリバリーによって、チームにサービスの所有権が与えられ、更新をすばやくリリースできます。

リリースの頻度とペースが増えるので、製品の革新と改善をより迅速化できます。よりすばやく新しい機能のリリースやバグの修正を行うことができ、より迅速に顧客のニーズに応えることができるので、競争優位性を高めることができます。継続的インテグレーション継続的デリバリーは、ビルドからデプロイまでソフトウェアのリリース処理を自動化する手法です。

アプリケーションの更新とインフラストラクチャの変更についての品質が保証されているため、ポジティブなエンドユーザーエクスペリエンスを保ちながら、より迅速なペースで確実な配信が可能です。継続的インテグレーション継続的デリバリーのような手法を使用して、それぞれの変更が機能的で安全であることをテストします。モニタリングとロギングの手法はリアルタイムのパフォーマンス情報を常に把握するために役立ちます。

規模に応じたインフラストラクチャと開発のプロセスの運用と、管理を行います。オートメーションと整合性は、複雑なシステムまたは変化するシステムを効率的に管理し、リスクを減らすために役立ちます。例えば、Infrastructure as Code は、開発、テスト、および本番環境を反復可能で、より効率的な方法で管理するために役立ちます。

DevOps の文化的なモデルに基づく、より効果的なチームを構築し、所有権や責務などの価値を強調します。開発チームと運用チームは緊密に共同で作業し、多くの責任を共有し、それぞれのワークフローが組み合わされます。これにより非効率性を低下させ、時間を節約できます (例えば、実行する環境を考慮に入れてコードを記述して、開発と運用の間での引き渡しにかかる時間を短縮します)。

制御を保持してコンプライアンスを順守しながらすばやく移行できます。自動化されたコンプライアンスポリシー、きめ細かい制御、および設定管理の技術を使用することにより、セキュリティを保ちながら DevOps モデルを導入できます。例えば、Infrastructure as Code と、コードとしてのポリシーを使用して、規模に応じたコンプライアンスを定義し、状況を追跡できます。

ソフトウェアとインターネットは、ショッピング、エンターテイメント、銀行業務に至るまで、その世界と産業を一変させました。今やソフトウェアは単にビジネスに役立つものというだけではありません。それどころか、ビジネスのあらゆる部分での不可欠な構成要素となっています。企業は、オンラインサービスまたはアプリケーションとして配信されたソフトウェアを通して、あらゆる種類のデバイスで、顧客と相互にやりとりを行います。また、流通、通信、および運用など、価値連鎖のあらゆる分野を一変させて運用効率を向上させるためにソフトウェアを使用します。物理的な商品を扱う企業が 20 世紀に産業のオートメーションによって製品を設計し、製造し、配送する方法を変化させたのと同じように、今日の世界で企業は、ソフトウェアを作成し、配信する方法を変化させる必要があります。

DevOps に移行するには、文化と考え方を変化させる必要があります。簡単に言うと、DevOps はこれまでサイロ化されていた開発と運用の 2 つのチームの間の障壁を取り除きます。一部の組織では、開発チームと運用チームを分けることなく、エンジニアが両方の役割を担う場合さえあります。DevOps では、2 つのチームが一緒に作業することで、開発者の生産性と、運用の信頼性がともに最適化されます。さらに、頻繁にコミュニケーションを取ることで、効率性を高め、顧客に提供するサービスの質が向上するように努めます。これらのチームはサービスに対する完全なオーナーシップを持ちます。エンドカスタマーのニーズと、そのニーズを満たす方法を考慮して、従来規定されてきた役割、または役職によって定められた範囲を超えることがあります。 品質管理チームとセキュリティチームも、これらのチームと緊密に統合される場合があります。DevOps モデルを使用している組織には、組織構造にかかわらず、全体の開発とインフラストラクチャのライフサイクルを責任を持って確かめるチームが必要です。

ソフトウェア開発およびインフラストラクチャ管理のプロセスの自動化および合理化を通して、組織がより迅速に革新するために役立つ幾つかの主な手法があります。これらの手法の多くは、適切なツールで実行されます。

1 つの基本的な手法は、頻繁に小さな更新を実行することです。これは、組織が顧客のためにより迅速に革新を実行する方法です。通常、この手法による更新頻度は、従来型のリリース手法で実行する更新頻度よりも高くなります。頻繁に小さな更新をすることで、各デプロイのリスクを減らすことが可能です。この方法では、チームはエラーが発生した最後のデプロイを特定できるため、チームはより迅速にバグに対処できます。更新の回数やサイズはさまざまですが、DevOps モデルを使用している組織は、従来のソフトウェア開発の手法を使用する組織よりも頻繁に更新をデプロイします。

組織はマイクロサービスアーキテクチャを使用し、アプリケーションをより柔軟にして革新をすばやく実現することもできます。マイクロサービスアーキテクチャにより、大きくて複雑なシステムを、シンプルで独立したプロジェクトに切り離すことができます。アプリケーションは、多くの個別のコンポーネント (サービス) に分割されます。各サービスは 1 つの目的または機能のみに限定され、同等のサービスとアプリケーション全体から独立して動作します。このアーキテクチャによってアプリケーションの更新における連携オーバーヘッドが低減されます。そして、各サービスに対して、それぞれのオーナーシップを持つ小さなアジャイルチームが存在する場合、組織はよりすばやく作業できます。

しかし、マイクロサービスと増大するリリース頻度の組み合わせは、より多くのデプロイにつながり、運用上の課題をもたらします。そのため、継続的インテグレーションや継続的デリバリーのような DevOps の手法は、これらの問題を解決し、安全で信頼できる方法で組織が迅速に配信できるようにします。Infrastructure as Code や、設定管理のようなインフラストラクチャをオートメーションする手法は、頻出する変化に対してコンピューティングリソースが伸縮自在に対応できる状態に保つために役立ちます。さらに、モニタリングとログ記録の使用により、エンジニアがアプリケーションとインフラストラクチャのパフォーマンスを追跡することがサポートされ、それによって問題にすばやく対応できます。

全体的にこれらの手法は、組織が顧客により速く、より信頼性のある更新を配信するために役立ちます。これが重要な DevOps の手法に関する概要です。


DevOps のベストプラクティスは以下のとおりです。 

それぞれのベストプラクティスについての詳細は以下のとおりです。
継続的インテグレーション

継続的インテグレーションは、開発者が自分のコード変更を定期的にセントラルリポジトリにマージし、その後に自動化されたビルドとテストを実行するソフトウェア開発の手法です。継続的インテグレーションの主な目的は、バグを早期に発見して対処すること、ソフトウェアの品質を高めること、そしてソフトウェアの更新を検証してリリースするためにかかる時間を短縮することです。

継続的インテグレーションの詳細はこちらご覧ください »


継続的デリバリー

継続的デリバリーとは、ソフトウェア開発手法の 1 つで、コード変更が発生すると、自動的に構築、テスト、および実稼働環境へのリリース準備が実行されるというものです。継続的デリバリーは継続的インテグレーションを拡張したもので、すべてのコード変更が、ビルド段階の後にテスト環境または本番環境、あるいはその両方にデプロイされます。継続的デリバリーを適切に実装することにより、開発者は、標準化されたテストプロセスに合格し、デプロイ準備の整ったビルドの成果物を常に手元に持つことになります。

継続的デリバリーと AWS CodePipeline の詳細はこちらをご覧ください »


マイクロサービス

マイクロサービスのアーキテクチャは、1 つのアプリケーションを小さなサービスのセットとして構築するためのアプローチとして設計されています。各サービスは独自のプロセスで実行され、軽量のメカニズムで明確に定義されたインターフェイスによって他のサービスと通信します。通常は HTTP ベースのアプリケーションプログラミングインターフェイス (API) を使用します。マイクロサービスはビジネスコンピューティングを中心に構築され、各サービスは 1 つの目的に範囲が限定されています。さまざまなフレームワークやプログラミング言語を使用してマイクロサービスを作成し、単一のサービスまたはサービスのグループとして、それらを単独でデプロイできます。

Amazon Container Service (Amazon ECS) の詳細 »

AWS Lambda の詳細


Infrastructure as Code

Infrastructure as Code は、バージョン管理や継続的インテグレーションなど、コードおよびソフトウェア開発技術を使用して、プロビジョンおよび管理されたインフラストラクチャの手法です。クラウドの API によるモデルでは、開発者とシステム管理者がプログラムでスケールに応じてインフラストラクチャを操作できます。手動でリソースをセットアップして設定する必要はありません。そのため、エンジニアはコードベースのツールを使用してインフラストラクチャを操作でき、アプリケーションコードと同じ方法でインフラストラクチャを扱えます。コードで定義されるため、インフラストラクチャとサーバーは標準化されたパターンですばやくデプロイされ、最新のパッチまたはバージョンで更新され、反復可能な方法で複製されます。

AWS CloudFormation を使用した Infrastructure as Code の管理についてはこちらをご覧ください »

開発者とシステム管理者はコードを使用してオペレーティングシステムを自動化し、設定、運用タスクなどをホストします。コードを使用することで、設定変更は反復可能になり、標準化できます。開発者とシステム管理者がオペレーティングシステム、システムアプリケーション、およびサーバーソフトウェアを手動で設定する必要がなくなります。

Amazon EC2 Systems Manager を使用した Amazon EC2 とオンプレミスシステムの設定と管理については、こちらをご覧ください »

AWS OpsWorks を使用した設定管理の活用についてはこちらをご覧ください »

インフラストラクチャとクラウドで体系化された設定では、組織はスケールに応じて動的にコンプライアンスを監視して適用できます。つまり、コードで記述されたインフラストラクチャによって、自動化された方法で追跡、検証、および再設定が可能になります。これにより、組織にとってリソース全体の変更を管理することが容易になり、セキュリティ対策が分散された方法で適切に実施されます (例えば、情報セキュリティ、PCI-DSS 準拠、または HIPAA 準拠)。準拠していないリソースについては、詳細に検査するように自動的に警告することや、コンプライアンスに自動的に戻すことさえできるので、組織内のチームはよりすばやい速度で作業できます。

AWS Config と Config Rules を使用して、インフラストラクチャのコンプライアンスを監視し、実施する方法についてはこちらをご覧ください » 


モニタリングとロギング

組織は、メトリクスとログをモニタリングし、アプリケーションおよびインフラストラクチャのパフォーマンスが製品のエンドユーザーエクスペリエンスにどのように影響しているかを確認できます。アプリケーションおよびインフラストラクチャで生成されたデータとログの取り込み、分類、および分析によって、組織は、問題または予期しない変更の根底にある原因を捉えながら、変更や更新がどのようにユーザーに影響するかを理解できます。サービスが 24 時間年中無休で使用できるように求められるにつれて、またアプリケーションとインフラストラクチャの更新頻度が増大するにつれて、アクティブモニタリングはますます重要になっています。アラートを作成してデータのリアルタイム分析を実行することも、組織がより積極的にサービスをモニタリングするために役立ちます。

Amazon CloudWatch を使用してインフラストラクチャのメトリクスとログをモニタリングする方法についてはこちらをご覧ください »

AWS CloudTrail を使用して AWS API 呼び出しを記録してロギングする方法についてはこちらをご覧ください »


コミュニケーションと共同作業

組織におけるコミュニケーションと共同作業の向上は、DevOps の主な文化的側面の 1 つです。DevOps のツールとソフトウェア配信プロセスのオートメーションを使用すると、開発および運用に対するワークフローおよび責任を物理的に一緒に担うことになるため、共同作業が定着します。それに加えて、これらのチームは、チャットアプリケーション、課題やプロジェクトの追跡システム、および wiki の使用を通して、情報共有やコミュニケーションの促進について強力な文化的基準を定めます。これにより、開発者、運用、およびマーケティングや営業など他のチームの全体にわたりコミュニケーションがスピードアップします。組織のあらゆる部分が目標とプロジェクトに向かってより緊密に連携します。

DevOps モデルでは、チームが顧客のために迅速かつ確実にデプロイして、革新を進めることをサポートする効果的なツールを利用しています。これらのツールを使用して、手動タスクの自動化、規模に応じた複雑な環境を管理するチームのサポート、エンジニアによる DevOps で達成可能な高速性の制御を可能にします。AWS では DevOps 向けに設計され、最初に AWS クラウドで使用するように作られたサービスを提供しています。これらのサービスは、前述のような DevOps の手法を使用するために役立ちます。

AWS DevOps サービスについての詳細はこちらをご覧ください »

AWS パートナーソリューションについての詳細はこちらをご覧ください »