マイクロサービス ソリューションの DevTest と DevOps

Boards
Container Registry
Kubernetes Service
Pipelines
GitHub

マイクロサービス アーキテクチャの場合、疎結合のサービスのコレクションとしてアプリケーションが設計されます。Microservice architectures design applications as collections of loosely coupled services. マイクロサービス アーキテクチャでは、サービスは小さく、プロトコルは軽量です。In a microservices architecture, services are fine-grained and protocols are lightweight. マイクロサービスには、問題の明確な分離や依存関係の切り離しといった利点があります。Microservices offer benefits such as clear separation of concerns and decoupling of dependencies.

マイクロサービスを使用すると、従来のモノリシックなアプリケーションと比較して、開発サイクルの複雑さが増します。Microservices introduce complexities in the development cycle compared to traditional monolithic applications. 従来の開発は、アプリケーション スタックのローカル レプリカまたは仮想レプリカで行われ、コンピューティング コンポーネントやストレージ コンポーネントはローカル環境で分離されて構成および実行されます。Traditionally, development occurs in a local or virtual replica of the application stack, which configures and runs compute and storage components locally in isolation. マイクロサービス モデルの場合は、開発者は既存のアーキテクチャに対してサービスをテストし、ビルドとデプロイの時間を短縮するために事前に統合の問題をキャッチし、アプリケーションのライフサイクルを通して統合ビルドをクリーンな状態に保つ必要があります。In a microservice model, developers need to test their services against the existing architecture, catch integration issues early to save on build and deployment time, and keep integrated builds clean over the lifecycle of the application.

"開発テスト (DevTest) " は、開発の期間を短縮するために開発の早い段階でテストを統合するソフトウェア開発アプローチです。Development testing (DevTest) is a software development approach that integrates testing early in the development phase to speed development. DevOps は、ソフトウェア開発と IT 運用を組み合わせて、開発サイクルを短縮し、高品質の継続的デリバリーを提供する一連のプラクティスです。DevOps is a set of practices that combine software development and IT operations to shorten the development cycle and provide high-quality continuous delivery. Kubernetes は、アプリケーションのデプロイを自動化するためのオープンソースのコンテナー オーケストレーション システムです。Kubernetes is an open-source container orchestration system for automating application deployments.

このソリューション アーキテクチャを使用すると、Azure Kubernetes Service (AKS) マイクロサービス アプリケーションの迅速な反復開発を行うために、DevOps を使用する開発環境とデプロイ環境が DevTest 内にモデル化されます。This solution architecture models a development and deployment environment that uses DevOps in DevTest for rapid iterative development of an Azure Kubernetes Service (AKS) microservice application.

アーキテクチャArchitecture

マイクロサービス アプリケーションの DevTest と DevOps の構成を示す図。

  1. 開発者は、Kubernetes でローカル プロセスを使用して、開発 Kubernetes クラスターのコンテキスト内でローカル マイクロサービスのバージョンを実行します。Developers use Local Process with Kubernetes to run their local microservice versions within the context of the development Kubernetes cluster. サービスのデバッグ中にクラスターに接続すると、完全なアプリケーション コンテキストですばやくテストと開発を行うことができます。Connecting to the cluster while debugging the service allows quick testing and development in the full application context.

  2. マイクロサービスの各コードベースでは、ソース管理に個別の GitHub コード リポジトリが使用されます。Each microservice codebase uses a separate GitHub code repository for source control.

  3. GitHub Actions により、マイクロサービスのコンテナー イメージがビルドされて、Azure Container Registry にプッシュされます。GitHub Actions builds the microservice container images and pushes them to Azure Container Registries. GitHub Actions により、継続的インテグレーション (CI) 用のリポジトリの "最新の" タグ、またはリリース用のタグ リポジトリも更新されます。GitHub Actions also updates the latest tag of repositories for continuous integration (CI), or tags repositories for release.

  4. GitHub Actions によって自動化されたテストでは、Azure Boards 用の作業項目が生成され、すべての作業項目を 1 か所で管理できるようになります。GitHub Actions automated testing generates work items for Azure Boards, making all work items manageable in one place.

  5. Visual Studio Code の拡張機能により、Azure Boards と GitHub の統合がサポートされます。Visual Studio Code extensions support Azure Boards and GitHub integration. Azure Boards の作業項目を GitHub リポジトリを関連付けると、要件がコードに結び付けられて、開発ループが促進されます。Associating Azure Boards work items with GitHub repos ties requirements to code, driving the development loop forward.

  6. 統合ブランチにマージされたコミットによって、GitHub Actions のビルドと、DevTest コンテナー レジストリへの Docker のプッシュがトリガーされます。Commits merged into the integration branch trigger GitHub Actions builds and Docker pushes to the DevTest container registries. 各マイクロサービスには Container Registry 内に独自のリポジトリがあり、GitHub リポジトリが並列化されます。Each microservice has its own repository in Container Registries, paralleling the GitHub repositories. 通常、CI のビルドには、マイクロサービスの最新の成功したビルドを表す latest というタグが付けられます。CI builds are usually tagged with latest, representing the most recent successful microservice builds.

  7. Azure Pipelines により Kubernetes の apply コマンドが実行されて、更新された Container Registry イメージの DevTest Kubernetes クラスターへのデプロイがトリガーされます。Azure Pipelines runs the Kubernetes apply command to trigger deployment of the updated Container Registry images to the DevTest Kubernetes clusters. Azure で AKS の認証を行って Container Registry の無人プルを実行することができ、継続的デプロイ (CD) プロセスが簡略化されます。Azure can authenticate AKS to run unattended Container Registry pulls, simplifying the continuous deployment (CD) process.

    Azure Pipelines では、Azure Key Vault を使用することで、リリースとデプロイの構成に必要な資格情報や接続文字列などのシークレットが安全に使用されます。Azure Pipelines uses Azure Key Vault to securely consume secrets like credentials and connection strings required for release and deployment configurations.

  8. アプリケーションのバージョンで品質保証 (QA) テストの準備が整ったら、Azure Pipelines によって QA リリースがトリガーされます。When a version of the application is ready for quality assurance (QA) testing, Azure Pipelines triggers a QA release. パイプラインにより、すべての適切なイメージに次の増分バージョンのタグが付けられ、イメージ タグを反映するように Kubernetes マニフェストが更新されて、apply コマンドが実行されます。The pipeline tags all appropriate images with the next incremental version, updates the Kubernetes manifest to reflect the image tags, and runs the apply command. この例では、開発者は分離されたサービスで反復処理を行うことができますが、デプロイに移動されるのは CI/CD によって統合されたビルドだけです。In this example, while a developer may be iterating on a service in isolation, only builds integrated via CI/CD are moved over to deployment.

  9. テストでサービスのバージョンのデプロイが承認されると、GitHub Actions によってリリースが DevTest Container Registry から運用 Container Registry にレベル上げされます。After testing has approved a version of the service for deployment, GitHub Actions promotes a release from the DevTest Container Registry to a Production Container Registry. GitHub Actions によって、イメージに適切なバージョンのタグが付けられ、Container Registry のベスト プラクティスに従って、運用 Container Registry にプッシュされます。GitHub Actions tags the images with the appropriate version and pushes them into the Production Container Registry, following container registry best practices.

  10. Azure Pipelines により、運用環境へのリリースが作成されます。Azure Pipelines creates a release to Production. パイプラインにより、運用環境を偶発的または不適切なデプロイから保護するために、承認ゲートおよびステージング前とステージング後の条件が適用されます。The pipeline imposes approval gates and pre-stage and post-stage conditions to protect the Production environment from inadvertent or incorrect deployment.

アプリケーションでは、グローバルに分散されたデータベース層に対して Azure Cosmos DB が使用されます。The application uses Azure Cosmos DB for its globally distributed database tier.

すべてのサービスと環境で、Azure Monitor に対してメトリックが報告されます。All services and environments report metrics to Azure Monitor.

このソリューションでは、単一の Azure Active Directory (Azure AD) によって、DevTest サブスクリプションと運用サブスクリプションの両方の ID が管理されます。In this solution, a single Azure Active Directory (Azure AD) manages identity for both the DevTest and Production subscriptions. Azure ロールベースのアクセス制御 (Azure RBAC) により、保護されたリソースへのアクセスが制限されて、運用リソースの承認されていない変更または不注意による変更が防止されます。Azure role-based access control (Azure RBAC) restricts access to protected resources, preventing unauthorized or inadvertent modification of Production resources. 開発者は、運用環境において DevTest サンドボックスと同じアクセス制御レベルを持つことはありません。Developers don't have the same access control levels in Production as in their DevTest sandboxes.

コンポーネントComponents

  • Azure DevTest Labs により、環境を作成するために必要なすべてのツールとソフトウェアが提供されます。Azure DevTest Labs provides labs that have all the necessary tools and software to create environments. 開発者は、承認を待たずにリソースを効率的に自己管理できます。Developers can efficiently self-manage resources without waiting for approvals. DevTest Labs を使用すると、チームはコストを管理し、ラボあたりのリソース数を制限して、開発者がコストの制約内で自身のサンドボックスで操作するためのアクセス許可と柔軟性を与えることができます。With DevTest Labs, teams can control costs and regulate resources per lab, granting developers permission and flexibility to operate their sandboxes within cost constraints.

  • GitHub は、バージョン管理とコラボレーションのためのコード ホスティング プラットフォームです。GitHub is a code hosting platform for version control and collaboration. GitHub のソース管理リポジトリには、すべてのプロジェクト ファイルとそのリビジョン履歴が含まれます。A GitHub source-control repository contains all project files and their revision history. 開発者は、リポジトリ内のコードの投稿、ディスカッション、管理を共同で行うことができます。Developers can work together to contribute, discuss, and manage code in the repository.

  • GitHub Actions を使用すると、CI、自動テスト、コンテナーのデプロイを対象とする、ビルドとリリースのワークフローのスイートが提供されます。GitHub Actions provides a suite of build and release workflows, covering CI, automated testing, and container deployments.

  • Azure Boards は、ソフトウェア プロジェクトの作業を管理するためのサービスです。Azure Boards is a service for managing work for software projects. Azure Boards には、スクラムおよびかんばん手法のネイティブ サポート、カスタマイズ可能なダッシュボード、統合レポートなどの豊富な機能セットが用意されています。Azure Boards brings a rich set of capabilities including native support for Scrum and Kanban methodologies, customizable dashboards, and integrated reporting.

  • 完全な機能を備えた CI/CD サービスである Azure Pipelines を使用すると、更新された Container Registry イメージを Kubernetes クラスターに自動的にデプロイできます。Azure Pipelines is a fully featured CI/CD service that can automatically deploy updated Container Registry images to Kubernetes clusters.

  • Azure Key Vault では、API キー、パスワード、証明書などのシークレットが安全に格納され、シークレットへのアクセスが厳密に制御されます。Azure Key Vault securely stores and tightly controls access to secrets like API keys, passwords, and certificates. DevOps シナリオでの Key Vault の詳細については、「Azure での DevSecOps」および「GitHub の DevSecOps」を参照してください。For more information about Key Vault in DevOps scenarios, see DevSecOps in Azure and DevSecOps in GitHub.

  • Azure Container Registry を使用すると、すべての種類のコンテナー デプロイについてプライベート レジストリ内のコンテナー イメージや成果物のビルド、保存、管理がサポートされます。Azure Container Registry supports building, storing, and managing container images and artifacts in private registries for all types of container deployments.

  • Azure Kubernetes Service を使用すると、複雑さ、責任、運用上のオーバーヘッドの多くが Azure にオフロードされ、マネージド Kubernetes クラスターを簡単にデプロイできます。Azure Kubernetes Service makes it simple to deploy managed Kubernetes clusters by offloading much of the complexity, responsibility, and operational overhead to Azure.

  • エンタープライズ ID プラットフォームである Azure Active Directory (Azure AD) を使用すると、ユーザー アクセスを管理するためのシングル サインオンと多要素認証が提供されます。Azure Active Directory (Azure AD) enterprise identity platform provides single sign-on and multifactor authentication to govern user access. 1 つの Azure AD で、複数のサブスクリプションを対象とするすべての環境の ID を管理できます。A single Azure AD can manage identity for all environments across subscriptions. Azure ロールベースのアクセス制御 (Azure RBAC) により、保護されたリソースへのアクセスが制限されて、運用リソースの承認されていない変更または不注意による変更が防止されます。Azure role-based access control (Azure RBAC) restricts access to protected resources, preventing unauthorized or inadvertent modification of production resources.

  • Azure Cosmos DB はフル マネージドの広範囲に分散されたサービスとしてのデータベースであり、高可用性、複数リージョンのアプリケーション、および SQL API と NoSQL API の両方がサポートされています。Azure Cosmos DB is a fully managed, widely distributed database-as-a-service that supports high availability, multi-region applications, and both SQL and NoSQL APIs. Azure Cosmos DB には、Azure DevOps と統合されるローカル Cosmos DB エミュレーターなどの DevTest 機能と、DevTest サンドボックスでコストを管理するための低コスト レベルが含まれています。Azure Cosmos DB includes DevTest features like a local Cosmos DB emulator that integrates with Azure DevOps, and low-cost tiers for managing costs in DevTest sandboxes.

  • Azure Monitor を使用すると、運用環境と DevTest 環境の両方を監視できます。Azure Monitor can monitor both Production and DevTest environments. Azure Monitor を使用すると、VM オペレーティング システムのログ データとクラッシュ ダンプ ファイルが収集され、Azure Security Center で表示するためにそれらが集計されます。Azure Monitor collects log data from VM operating systems and crash dump files, and aggregates them for viewing in Azure Security Center.

代替Alternatives

  • Azure Repos は、Git リポジトリをホストするための GitHub の代替手段です。Azure Repos is an alternative to GitHub for Git repository hosting. Azure Repos、Azure Boards、Azure Pipelines はすべて Azure DevOps Services であり、同じポータルとユーザー インターフェイスが使用され、開発者が DevOps アクティビティで必要なサービスが統合されています。With Azure Repos, Azure Boards, and Azure Pipelines, all Azure DevOps Services use the same portal and user interface, consolidating the services developers need for DevOps activities.

  • Azure Pipelines で利用できる一部の統合 (サービス接続や、Azure バックボーンへの直接認証など) は、現在、GitHub Actions には存在しません。Some integrations available in Azure Pipelines, such as service connection or authentication directly into the Azure backbone, don't currently exist in GitHub Actions. これらが必要な場合は、GitHub Actions ではなく Azure Pipelines を CI とビルド アクティビティに使用することを検討してください。For these needs, consider using Azure Pipelines instead of GitHub Actions for CI and build activities.

  • 広範囲に分散したシステムでは、マイクロサービスを個々のリポジトリに分離するとメリットがあります。In a widely distributed system, there are benefits to separating microservices into individual repositories. 1 つのリポジトリを使用した場合より、所有権とアクセス許可の分離が容易になり、異なる言語のプロジェクトを簡単に管理できます。Separation of ownership and permission is simpler, and projects in different languages are easier to maintain than with a single repository. ただし、すべてのマイクロサービスが同じ言語またはランタイムに存在するソリューションでは、プロジェクトに対して 1 つの Git リポジトリを管理する方が簡単な場合があります。However, in solutions with fewer microservices all in the same language or runtime, maintaining a single Git repository for the project may be easier.

次のステップNext steps