Azure SQL Database 用に CI/CD を実装する
ここまでで、Azure SQL Database をデプロイ、構成、および使用して、最新のアプリケーションのための強力な基盤を構築する方法がわかりました。 アプリケーションの要件は絶えず進化し、変化しています。そのため、次の手順では、必要に応じてデータベースを更新する方法について理解します。 開発運用 (DevOps) は、有用な一連の原則とプラクティスです。
DevOps は、顧客に継続的に価値を提供するために、人、プロセス、およびテクノロジを結合したものです。 チームが DevOps のカルチャ、プラクティス、ツールを導入すると、パフォーマンスが向上し、より優れた製品をより迅速に構築して顧客満足度を向上させることができるようになります。
データベースはソリューションの主要な部分の 1 つであるため、データベースを DevOps プラクティスと統合できることは、最新のアジャイルなアプリケーション開発の重要な要素です。
Azure SQL では、データベースを DevOps プロセスに含めるためのアプローチがいくつかあります。 継続的インテグレーション (CI) と継続的デリバリー (CD) パイプラインは、DevOps 環境のバックボーンであり、Azure SQL を、選択した CI/CD ツールと完全に統合できます。 Azure で最も一般的に幅広く使用されているツールのうちの 2 つは、GitHub Actions と Azure DevOps です。
データベース用に CI/CD を実装する
データベースを CI/CD パイプラインの一部として配置するということは、その構造と、おそらくデータの一部を、完全に自動化された再現可能かつ決定論的な方法で、構成およびデプロイしたいということを意味します。 構成が完了したら、デプロイまたは更新プロセスをいつでも何度でも実行し、一貫した結果を得ることができます。
このユニットでは、データベースの CI/CD パイプラインを実装するための 3 つの主なアプローチについて説明します。
- Desired State (必要な状態)
- Code First Migrations
- カスタム スクリプト
SqlPackage.exe で Desired State (必要な状態) アプローチを使用する
Desired State アプローチでは、必要な状態を表すために参照データベースの構造のスナップショットを取得します。 次に、そのスナップショットを使用して、別のターゲット データベース (通常はテスト データベースまたは運用データベース) を必要な状態に同期できます。 SqlPackage.exe などのツールを使用し、.dacpac
ファイルにスナップショットを取り込みます。 .dacpac
がターゲット データベースに適用されると、自動的に相違点が検出され、正しいスクリプトが生成され、そのスクリプトを適用してターゲット スキーマと参照が同期されます。
説明した 3 つのアプローチの中でおそらく最も簡単でシンプルであるため、このバス乗車のシナリオでは Desired State アプローチを使用します。
言語に応じて Code First Migrations を実装する
T-SQL スクリプトを記述したくない場合は、別の選択肢があります。代わりに、C#、Python、または Node と、ソリューションで定義されているエンティティ (たとえば、バス、ルート、場所) で、データベースとスキーマが自動生成されるようにできます。 通常、プラットフォームまたはフレームワークに付属している、またはそれらに適用される特定のツールがあります。 これらのツールを使用すると、フィールドまたはエンティティを変更または追加するたびに、新しい構造がデータベースに反映されるようになります。 このモジュールの最後に、特定のプラットフォームとフレームワークのツールへの参照が示されています。
段階的なデプロイのための手動スクリプトを使用する
手動によるスクリプト作成のアプローチでは、開発者は、データベースを作成および変更するために必要なスクリプトを慎重に記述し、長期間にわたって維持します。 スクリプトが運用環境にデプロイされた後、変更されることはなく、新規に作成されます。 各スクリプトには、データベースを新しいスキーマに進化させるために必要なコードが含まれています。 データベースを一からデプロイする必要がある場合は、データベースが作成されて正しく進化したことを確認するために、すべてのスクリプトを正しい順序で実行する必要があります。 スクリプトをデプロイしたら、SQL Server Data Tools (SSDT) の Schema Compare ユーティリティなどのツールを使ってデータベース定義を比較できます。 こうすることで、デプロイされたスクリプトが後続の実行で同じデータベースに再度適用されないようにすることができます。
CI/CD を簡単に実装するためにパイプライン ツールを選択する
データベースの更新方法に最適に対応するアプローチを特定したら、そのアプローチを実装するために、2 つの一般的なソリューションである Azure DevOps または GitHub Actions から選択できます。
Azure DevOps を使用した CI/CD の実装
Azure DevOps は、CI/CD パイプラインを含む DevOps のすべての側面を完全にサポートする製品スイートです。 パイプラインは、パイプラインのステップを定義するタスクで構成されます。 タスクは、実行可能ファイルの実行から .NET ソリューションのビルドまでの、ほぼすべてのものになります。 Azure SQL Database のデプロイ タスクという特定のタスクを使って、.dacpac
ファイルをデプロイしたり、.sql スクリプトを実行したりすることができます。
GitHub Actions を使用した CI/CD の実装
GitHub Actions を使用すると、CI/CD パイプラインを定義できます。 アクションは、パイプラインのステップの作成に使用します。 アクションは、ほぼすべての種類のプロセスの実行に使用できます。 [Azure SQL Deploy](Azure SQL のデプロイ) アクションを使用すると、.dacpac
ファイルをデプロイできます。
次の演習では、Azure SQL アクションを使用してデータベースのスキーマをデプロイおよび更新することで、この動作を確認します。