PaaS ソリューションの DevTest と DevOps

Boards
Azure DevOps
Pipelines
GitHub

"サービスとしてのプラットフォーム (PaaS) " クラウド コンピューティングでは、アプリケーションを開発、実行、管理するためのクライアント用のプラットフォームがサービス プロバイダーによって提供されるので、インフラストラクチャを構築および管理する必要はありません。In platform as a service (PaaS) cloud computing, a service provider delivers a platform for clients to develop, run, and manage applications without having to build and maintain infrastructure. Azure Platform のリソースとサービスに基づくソリューション開発を使用すると、仮想マシン、仮想ネットワーク、ディスク、および関連する構成を管理するオーバーヘッドがなくなります。Solution development based on Azure Platform resources and services removes the overhead of managing virtual machines, virtual networks, disks, and related configurations.

"開発テスト (DevTest) " は、開発の早い段階でテストを統合するソフトウェア開発アプローチです。Development testing (DevTest) is a software development approach that integrates testing early in the development phase. DevOps は、ソフトウェア開発と IT 運用を組み合わせて、開発サイクルを短縮し、高品質の継続的デリバリー (CD) を提供する一連のプラクティスです。DevOps is a set of practices that combine software development and IT operations, to shorten the development cycle and provide continuous delivery with high quality.

このソリューション アーキテクチャでは、オーバーヘッドの削減と DevOps ツールチェーンの組み合わせにより、迅速な DevTest 繰り返しサイクルと、PaaS リソースを使用する高速開発環境がサポートされます。This solution architecture combines reduced overhead and a DevOps toolchain to support rapid DevTest iteration cycles and a fast development environment with PaaS resources.

アーキテクチャArchitecture

PaaS アプリケーションの DevTest と DevOps の構成を示す図。

  1. 開発者は、GitHub Codespaces の事前構成済みの開発環境を使用して、開発環境の手動構成を回避します。Developers use GitHub Codespaces pre-configured development environments to avoid manually configuring development environments. 開発者は、ブラウザー内で、または Visual Studio Code を通して、Codespaces を使用できます。Developers can use Codespaces in-browser or through Visual Studio Code.

  2. ソース コードは GitHub リポジトリで入手でき、Azure DevOps とシームレスに統合されます。Source code is available in GitHub repos, which integrate seamlessly with Azure DevOps.

  3. Azure DevOps と同様に、GitHub Actions では、GitHub のコミット要求またはプル要求でトリガーされる自動ビルドが設定されます。Similar to Azure DevOps, GitHub Actions sets automated builds to trigger on GitHub commits or pull requests. 現在のソリューションでは、ビルド アクションによって成果物がデプロイ用の GitHub Packages ソース パッケージに発行されます。In the current solution, the build action publishes artifacts to a GitHub Package source package for deployment.

  4. Azure Boards を使用すると、GitHub リポジトリに接続することで、自動化テストと手動テストから作業項目が生成されて、開発サイクルのすべての作業で追跡されます。Azure Boards connects back to GitHub Repos to generate work items from automated and manual testing, and tracks all work in the development cycle.

  5. 開発者は、作業項目を開発スプリントまたはサイクルに関連付ける機能ブランチまたは修正ブランチを作成し、タスクと要件ですべてのコードを追跡します。Developers create feature or fix branches that associate work items with development sprints or cycles, tracking all code with tasks and requirements. このアプローチにより、開発者は、アジャイル ソフトウェア開発に不可欠なアクティブな開発ループの速度を維持します。With this approach, developers maintain an active development loop velocity that is critical to agile software development.

  6. Azure Pipelines は、Azure PaaS のデプロイのためのソリューションです。Azure Pipelines is the solution for Azure PaaS deployments. Azure Pipelines によって継続的デプロイ (CD) とリリースのタスクが処理され、GitHub Actions のビルドで公開されるパッケージ バージョンが使用されます。Azure Pipelines handles continuous deployment (CD) and release tasks, which consume the package versions exposed by GitHub Actions builds. 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.

  7. Azure Pipelines のデプロイ タスクでは、Web アプリケーションのデプロイを含む Azure PaaS リソースが明確にサポートされます。Azure Pipelines deployment tasks specifically support Azure PaaS resources, including web application deployments:

    1. 継続的リリースにより、GitHub Actions の継続的ビルドと組み合わせて、アプリケーションの最新のビルドが開発環境にデプロイされます。In conjunction with the continuous builds from GitHub Actions, a continuous release deploys the latest application build to a Development environment.
    2. パイプラインにより、テスト用に選択されたビルドが、次のデプロイ リングであるテスト環境にレベル上げされます。The pipeline promotes the build selected for testing up to the next deployment ring, the Test environment.
    3. すべてのテストに合格したビルドは、ユーザー受け入れテスト (UAT) のため、次の外部リングにレベル上げおよびステージングされます。After the build passes all tests, it's promoted and staged in the next outer ring for User Acceptance Testing (UAT).

    3 つの DevTest 環境はすべて、割引コストの Azure DevTest サブスクリプションに存在します。All three DevTest environments exist under a discounted-cost Azure DevTest Subscription. Azure Policy を使用して、App Services または PaaS データベースのサイズと数に関する新しい規則を追加し、コストを制限できます。Azure Policy can add additional rules for the size and number of App Services or PaaS databases to limit costs.

  8. ソリューションの品質が運用状態に達すると、Azure Pipelines によって運用リリースがトリガーされます。When solution quality reaches a Production state, Azure Pipelines triggers a Production release. パイプラインにより、運用環境のデプロイは必要最小限の数に制限されます。The pipeline limits Production deployments to the minimum number necessary.

    App Service の場合、Pipelines のリリースにより、対象となるビルド バージョンを運用前アプリ スロットの運用リソースにデプロイしてから、スロットをその場で運用環境にスワップできます。For an App Service, a Pipelines release can deploy the targeted build version to the Production resource in the Pre-Production app slot, and then swap slots to Production in place. 運用前環境から運用環境へのスワップの間に問題が発生した場合、デプロイの安全性を高めるため、App Service でスワップをロールバックすることができます。If something goes wrong during the swap of Pre-Production to Production, App Service can roll back the swap for extra deployment safety.

このソリューションでは、単一の 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.

Terraform により、各環境のリソースがプロビジョニングおよび変更され、サイズ、インスタンス数、その他のプロパティが調整されます。Terraform provisions and modifies resources for each environment, tailoring size, instance count, and other properties. 現在のソリューションでは、Azure App Service、Azure Cache for Redis、Azure SQL Database の環境スタックがモデル化されています。The current solution models an environment stack of Azure App Service, Azure Cache for Redis, and Azure SQL Database.

Azure Monitor はサブスクリプションをまたいで機能し、すべての環境が監視されて、ログ、クラッシュ ダンプ レポート、アプリケーション データが収集されます。Azure Monitor works across subscriptions to monitor all environments and collect logs, crash dump reports, and application data.

コンポーネントComponents

  • GitHub は、バージョン管理とコラボレーションのためのコード ホスティング プラットフォームであり、他に以下の機能が統合されています。GitHub is a code hosting platform for version control and collaboration, with other integrated features:

    • 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 Codespaces では、ライブラリの依存関係、ユーザーの構成、拡張機能をカバーする事前に構成された開発環境が開発者に提供されます。GitHub Codespaces provide developers with pre-configured development environments that cover library dependencies, user configuration, and extensions. 開発者は GitHub で codespaces をプロビジョニングし、ブラウザー内または Visual Studio Code でそれを使用できます。Developers can provision codespaces in GitHub, and use them either in-browser or through Visual Studio Code.
    • GitHub Actions では、継続的インテグレーション (CI)、自動テスト、および Azure Resource Manager (ARM) テンプレートまたはコンテナーによるデプロイをカバーする、ビルドとリリースのワークフローのスイートが提供されます。GitHub Actions provide a suite of build and release workflows, covering continuous integration (CI), automated testing, and Azure Resource Manager (ARM) template or container deployments.
    • パッケージ ホスティング サービスである GitHub Packages を使用すると、ソフトウェア パッケージをホストし、プロジェクト内の依存関係としてそれらを使用できます。GitHub Packages package hosting service allows hosting software packages and using them as dependencies in projects.
  • 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.

  • Azure Pipelines により、VM アプリケーションのイメージがデプロイされます。Azure Pipelines deploys the VM application images. Pipelines では、Azure Resource Manager (ARM) テンプレートを使用して、VM リソース自体をデプロイすることもできます。Pipelines can also deploy the VM resources themselves, through Azure Resource Manager (ARM) templates. このコードとしてのインフラストラクチャ は、ソース管理でき、CI/CD 用に構成できるため、インフラストラクチャを最新の状態に維持することが保証されます。This infrastructure-as-code can be source controlled and configured for CI/CD, ensuring that the infrastructure remains up to date.

  • 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.

  • エンタープライズ ID プラットフォームである Azure AD を使用すると、リソースへのユーザー アクセスを管理するためのシングル サインオンと多要素認証が提供されます。Azure AD enterprise identity platform provides single sign-on and multifactor authentication to govern user access to resources. 現在のシナリオでは、Azure AD と Azure RBAC の連携により、環境ごとにアクセスが制限されます。In the current scenario, Azure AD works with Azure RBAC to restrict access per environment.

  • サードパーティ製のツールである Terraform は、環境ごとにリソースをプロビジョニングおよび変更するために使用します。Terraform is a third-party tool that provisions and modifies resources per environment. 現在のソリューションでは、Azure App Service、Azure Cache for Redis、Azure SQL Database の環境スタックがプロビジョニングされます。The current solution provisions an environment stack of Azure App Service, Azure Cache for Redis, and Azure SQL Database.

    また、Terraform では、Azure と他のクラウド プロバイダーにまたがるクロスプラットフォームのコードとしてのインフラストラクチャの構成とデプロイもサポートされています。Terraform also supports cross-platform infrastructure-as-code configuration and deployment across Azure and other cloud providers. コードとしてのインフラストラクチャを使用すると、開発者は、コードの変更を検証するのと同じ方法でインフラストラクチャの変更を検証できます。Infrastructure-as-code lets developers validate infrastructure changes the same way they validate code changes.

  • Azure App Service は、Web アプリを構築するためのフル マネージドの Web ホスティング サービスです。Azure App Service is a fully managed web hosting service for building web apps. App Service では、CD、パッケージ管理、ステージング環境、カスタム ドメイン、TLS/SSL 証明書などの DevOps 機能がサポートされています。App Service supports DevOps capabilities like CD, package management, staging environments, custom domains, and TLS/SSL certificates.

  • Azure Cache for Redis を使用すると、オープンソース ソフトウェアの Redis に基づくメモリ内データ ストアが提供され、バックエンド データ ストアに大きく依存するアプリケーションのパフォーマンスとスケーラビリティが向上します。Azure Cache for Redis provides an in-memory data store based on the open-source software Redis, which improves performance and scalability of applications that rely heavily on backend data stores.

  • Azure SQL Database はフル マネージドの PaaS データベース エンジンであり、アップグレード、修正プログラムの適用、バックアップ、監視などのほとんどのデータベース管理機能が、ユーザーの介入なしで処理されます。Azure SQL Database is a fully managed PaaS database engine that handles most database management functions like upgrading, patching, backups, and monitoring, without user involvement.

  • Azure Policy では、組織の標準とコンプライアンスを満たすためにリソースが管理されます。Azure Policy governs resources to meet organizational standards and compliance. DevTest ロールでは、Azure Policy を使用して VM の数とコストを調整および制限できます。In a DevTest role, Azure Policy can regulate and limit the number and costs of VMs. 監査により、分析情報が提供され、DevTest VM の使用状況を追跡できます。Auditing can provide insights and track the usage of the DevTest VMs.

  • Azure Monitor を使用すると、運用環境と DevTest 環境の両方を監視できます。Azure Monitor can monitor both Production and DevTest environments. Azure Monitor を使用すると、VM オペレーティング システムのログ データとクラッシュ ダンプ ファイルを収集でき、Azure Security Center で表示するためにそれらを集計することができます。Azure Monitor can collect log data from VM operating systems and crash dump files, and aggregate them for viewing in Azure Security Center. Azure Monitor の機能であり、App Service と連携する Application Insights を使用すると、アプリケーションのパフォーマンスと問題を監視できます。Application Insights is a feature of Azure Monitor that works with App Service to monitor application performance and issues.

考慮事項Considerations

Web アプリが適切にサポートされる Azure SQL Database の設計を開発することは、重要な考慮事項です。Developing an Azure SQL Database design that adequately supports the web app is an important consideration. ソース管理とバージョン管理は、コードやビルドと同じように、データ スキーマの場合も重要です。Source control and versioning are as important for data schemas as for code and builds.

Entity Framework のようなツールを使用すると、移行を通してデータベース スキーマの変更に対するソース管理を提供できます。Tools like Entity Framework can provide source control for database schema changes via migrations. 移行によってデータベースの構造に対する変更が体系化され、問題が発生した場合には、変更の続行とロールバックの両方の方法が提供されます。Migrations codify changes to the database structure and provide methods to both advance forward and roll back changes if issues occur.

代替Alternatives

  • このアーキテクチャではデプロイに Azure Pipelines が使用されますが、GitHub Actions で PaaS のデプロイを実行することもできます。While this architecture uses Azure Pipelines for deployments, GitHub Actions can also perform PaaS deployments.

  • 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.

  • Terraform は強力な環境管理ツールですが、その主な機能の 1 つはクロスプラットフォーム機能です。While Terraform is a powerful environment management tool, one of its main features is its cross-platform capabilities. Azure にのみ存在するアプリケーションの場合は、Terraform ではなく ARM テンプレートをリソースのデプロイに使用することを検討してください。For applications that exist solely in Azure, consider using ARM templates instead of Terraform for resource deployments. ARM テンプレートの場合、Microsoft によって直接サポートされており、Azure Pipelines に独自のタスクがあり、Terraform ではすぐに利用できない機能やプロパティをデプロイできる場合があります。ARM templates have direct Microsoft support, have their own tasks in Azure Pipelines, and may be able to deploy features or properties that aren't immediately available in Terraform.

次のステップNext steps