データベースのデプロイ タスクについて

完了済み

データベースデプロイ タスクを CI/CD Azure Pipelines および GitHub Actions ワークフローに統合すると、アプリケーションのデプロイと共にデータベースのプロビジョニングと更新が自動化されます。 この統合により、アプリケーションとデータベースのライフサイクル間のシームレスな調整が可能になり、手動デプロイからのエラーや不整合が軽減されます。 データベース プロビジョニングの自動化により、リリース サイクルが高速化され、人的エラーが最小限に抑えられます。また、開発チーム、運用チーム、データベース チーム間のコラボレーションが強化されます。

考慮 事項

データベースの自動デプロイでは、データの整合性と損失防止を慎重に考慮する必要があります。 次の規定を使用して、これらのリスクに対処します。

  • データの分離: データベース スキーマの変更とデータ操作の間で明確な分離を維持します。 テーブルの変更やスキーマの更新など、データベース スキーマの変更は、初期データのシード処理やデータセットのインポートとエクスポートなどのデータ操作操作とは別に管理する必要があります。
  • データの保持: パイプラインまたはワークフローの再デプロイ中に既存のデータを保持する戦略を実装します。 これには、変更をデプロイする前に重要なデータをバックアップしたり、データ移行スクリプトを使用して既存のデータを上書きせずに環境間でデータを転送したりする必要がある場合があります。
  • べき等操作: データベースのデプロイ操作が、べき等であること (つまり、安全に複数回、再実行することができ、常に同じ結果になること) を確認します。 べき等性は、重複するスキーマ オブジェクトやレコードを作成する可能性を排除する必要があります。
  • バージョン管理とロールバック: データベース スキーマの変更、データ移行、デプロイ スクリプトに対するバージョン管理を維持して、変更を追跡し、ロールバック手順を容易にします。 ソース管理リポジトリを使用してデータベース スクリプトを管理し、バージョン タグまたはラベルをデータベースの変更に適用し、データベースの変更を元に戻すロールバック戦略を実装します。
  • テストと検証: 運用環境にデプロイする前に、ステージング環境またはテスト環境でデータベース変更の完全なテストと検証を実行します。 自動テスト フレームワーク、データベース単体テスト、統合テストを使用して、データベースのデプロイを確認し、既存のデータとの互換性を確保します。
  • 監視とアラート: データベースのデプロイ中に異常、エラー、またはパフォーマンスの問題を検出するための監視とアラートメカニズムを実装します。 データベースの正常性メトリックを監視し、監査ログを追跡し、予期しない動作またはエラーによってトリガーされるアラートを構成します。

Azure Pipelines ワークフローと GitHub Actions ワークフローは、データベースのデプロイに関して同様の概念とアクティビティを共有します。 Azure Pipelines にデータベースデプロイを組み込むには、いくつかの実装タスクが必要です。

  • データベース スキーマを定義し、データをシードし、追加の構成を適用するためのデータベース配置スクリプトを作成する。 スクリプトは、変更の追跡とバージョン管理を容易にするために、ソース管理リポジトリに配置する必要があります。
  • データベース接続文字列を作成し、シークレット変数または Azure Key Vault シークレットとして安全に格納する。 これには、シークレットへのアクセス権をパイプラインに付与する必要もあります。
  • Azure DevOps タスクまたはサード パーティの拡張機能を使用して、パイプラインの一部としてデータベース デプロイ スクリプトを実行します。
  • 必要なツールとユーティリティと共に、必要な依存関係 (SQL Server インスタンスなど) をデプロイするようにパイプラインを構成します。
  • データベースの変更を検証し、デプロイが成功したことを確認するためのデータベース テスト タスクをパイプラインに含めます。 これには通常、データベース単体テスト、統合テスト、またはデータ検証チェックの実行が含まれます。
  • デプロイの失敗や予期しないエラーを処理するためのロールバックと復旧のメカニズムをパイプラインに実装する。 これには、問題が発生した場合に変更を元に戻すデータベース スナップショット、バックアップ、またはトランザクション ロールバック スクリプトの作成が含まれる場合があります。

実装タスクの詳細は、ターゲット データベース テクノロジによって大きく異なります。 次のセクションでは、Azure SQL サービスのデプロイに関するこれらの詳細について説明します。

SQL Server と Azure SQL 固有の手法とツール

CI/CD パイプラインで SQL Server または Azure SQL Database を使用する場合は、次のようなさまざまなツールと手法を利用できます。

  • SQL Server Data Tools (SSDT): データベース開発者が Visual Studio でデータベース スキーマとオブジェクトをビルド、デバッグ、保守、およびリファクタリングできるようにする開発ツールセットです。 SSDT プロジェクトを使用して、データベース スキーマの変更を管理し、SQL Server または Azure SQL Database のデプロイ スクリプトを生成できます。
  • SQLPackage.exe: SSDT に含まれるコマンド ライン ユーティリティ。データ層アプリケーション コンポーネント (DACPAC) ファイルを使用した SQL Server データベースのデプロイの自動化を簡略化します。 CI/CD パイプラインの SQLPackage.exe を使用して、データベースの変更を SQL Server または Azure SQL Database にデプロイできます。
  • Azure DevOps タスク: DACPAC ファイルから Azure SQL Database にデータベースの変更を直接デプロイできる、Azure SQL Database のデプロイや SqlAzureDacpacDeployment などの組み込みタスク。 これらのタスクは、カスタム スクリプトを必要とせずに、CI/CD パイプラインにデータベースのデプロイを統合します。
  • Azure Command-Line インターフェイス (CLI): コマンド ラインから Azure SQL Database を含む Azure リソースを操作できるユーティリティです。 CI/CD パイプラインで Azure CLI コマンドを使用すると、データベース サーバーの作成、DACPAC ファイルのデプロイ、SQL スクリプトの実行など、データベースのプロビジョニング、構成、デプロイのタスクを自動化できます。
  • SQL Server Management Studio (SSMS): SQL Server データベースを管理するために Microsoft によって提供されるグラフィカル ツールです。 主に手動管理タスクに使用されますが、SSMS では、スクリプトの生成ウィザードまたは Microsoft Azure SQL Database へのデータベースの配置機能を使用して、デプロイ スクリプトを生成し、データベースのデプロイを自動化することもできます。
  • Entity Framework (EF): Object-Relational マッパー (ORM) 機能をサポートするプログラムによる手法。 EF ベースの移行機能を利用して、データベース スキーマの変更を管理し、CI/CD パイプラインでのデータベース移行を自動化できます。 EF 移行を使用すると、コード優先の移行を使用してデータベース スキーマへの変更を定義し、アプリケーションの起動時に自動的に適用できます。
  • カスタム スクリプト: CI/CD パイプラインのデータベースデプロイ タスクを自動化する PowerShell、Bash、または SQL スクリプト。 これらのスクリプトでは、SQLCMD または Azure PowerShell モジュールを使用して、SQL スクリプトの実行、DACPAC ファイルのデプロイ、Azure SQL Database のプログラムによる操作を行うことができます。