GitHub Actions と Azure DevOps でデータベース プロジェクトをビルドしてデプロイする
データベースは大規模なソリューションの不可欠なコンポーネントであるため、開発者はアプリケーション コードの処理方法と同様に、データベース開発を効果的に管理する方法を見つける必要があります。 データベース開発はデータベース内に格納されるデータと密接に関連し合い、複雑さがいっそう増すため、このタスクは特に困難です。
さいわい、GitHub Actions や Azure DevOps Services などのツールによって、このような複雑さを管理するための堅牢なソリューションが提供されます。 どちらのプラットフォームも DACPAC デプロイをサポートしており、データベースの変更をdata-tier Application Component (DAC) パッケージにパッケージ化することで、データベースの変更をデプロイするプロセスが簡単になります。 このアプローチは、データベースのデプロイの一貫性と信頼性を保証するだけでなく、継続的インテグレーションと継続的デプロイ (CI/CD) パイプラインとシームレスに統合するため、開発者はアプリケーション コードと共にデータベースの保守と更新もさらに簡単に行うことができます。
このユニットの例では、次のものが既にあることを想定しています。
- リソースの作成と管理ができるアクセス許可が付与されている Azure サブスクリプション。
- 次の拡張機能がインストールされているVisual Studio Code。
- 所有者として作成したプライベート GitHub リポジトリが含まれる GitHub アカウント。
- [Azure サービスへのアクセスを許可] が有効な構成された Azure SQL Database。 クイック スタート:Azure SQL Database の単一データベースを作成する。
GitHub Actions を使用して Azure SQL Database に接続する
GitHub Actions を使用して Azure SQL Database に接続し、DACPAC ファイルを使用して SQL プロジェクトを発行できます。
GitHub Actions を使用して Azure SQL Database に接続するには、主に 3 つの手順があります。
- Visual Studio Code で GitHub リポジトリをクローンします。
- Visual Studio Code でデータベース プロジェクトを作成します。
- GitHub Actions を使用して継続的インテグレーション (CI) を設定します。
GitHub リポジトリをクローンする
次の手順を実行すると、作成した GitHub リポジトリをクローンできます。
- Visual Studio Code で、[表示]>、[コマンド パレット] の順に選択します。
- コマンド パレットで、「Git: Clone」と入力して、それを選択します。
- リポジトリの URL を入力して、[クローン] を選択します。
- リポジトリ ファイルを格納するフォルダーを選択または作成します。
Visual Studio Code でデータベース プロジェクトを作成する
Visual Studio Code で、新しいデータベース プロジェクトを設定し、GitHub リポジトリをクローンしたのと同じフォルダーにプロジェクトを保存します。
Visual Studio Code でのデータベース プロジェクトの作成の詳細については、「Visual Studio Code を使用 した SQL Server 開発」を参照してください。
データベース プロジェクトを作成したら、Azure SQL Database を変更するコードを追加します。 次に、それらを GitHub リポジトリにコミットして戻し、それらを追跡して、バージョン管理システムに統合されるようにします。
GitHub Actions を使用して継続的インテグレーションを設定する
GitHub Actions を使用して継続的インテグレーションを設定するには、リポジトリの .yml パスに フ/.github/workflows/ァイルを作成します。
.yml ファイルには、2 つのセクションがあります。
- 認証の設定
- GitHub ワークフローを作成する
[認証を設定] では GitHub シークレットを構成し、2 番目のセクションでは GitHub Actions のワークフローを作成します。
Authentication
最初に、Azure CLI の az ad sp create-for-rbac コマンドを使用してサービス プリンシパルを作成する必要があります。 Azure portal の Azure Cloud Shell を使って、次の Azure CLI コードを実行します。 プレースホルダーを サブスクリプション ID、リソース グループ名、およびアプリ名に置き換えます。
az ad sp create-for-rbac --name "myML" --role contributor --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> --json-auth
出力は、ロールの割り当ての資格情報を含む JSON オブジェクトです。 GitHub シークレットとして保存されるため、ファイルを保存します。
次に、SQL 接続文字列を作成します。 これは Azure portal からコピーできます。 Azure SQL Database で、[設定]>、[接続文字列] の順に選択します。
ADO.NET の接続文字列をコピーしてから、your-database と your-passwor のプレースホルダーの値を置き換えます。 接続文字列は、次のようになります。
Server=tcp:my-sql-server.database.windows.net,1433;Initial Catalog={your-database};Persist Security Info=False;User ID={admin-name};Password={your-password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
この接続文字列も、GitHub シークレットとして格納されます。
GitHub リポジトリで、[設定]>、[セキュリティ]、>[シークレットと変数]、>[アクション] の順に選択し、シークレットを追加します。. JSON テキストを格納する AZURE_CREDENTIALS という名前の新しいシークレットと、接続文字列を格納する AZURE_SQL_CONNECTION_STRING を作成します。
これで、ワークフローを作成する準備が整いました。
Note
運用環境では、GitHub Action がデータベースにアクセスするために、SQL 認証ではなくマネージド ID を使用することを検討します。 詳細については、「Azure SQL 用 Microsoft Entra のマネージド ID」を参照してください。
GitHub ワークフローを作成する
GitHub リポジトリで、[アクション]、[ワークフローを自分で設定する] の順に選択します。 空の main.yml ファイルが開きます。
これで、YAML ファイルを作成できます。 詳細な構文とガイドラインについては、「GitHub Actions のワークフロー」を参照してください。 たとえば、name: タグはワークフローの名前を指定し、on の値はワークフローの実行をトリガーするイベントを決定します。
ヒント
GitHub Actions の追加機能の使用方法については、「GitHub Actions のクイックスタート」を参照してください。
Azure DevOps Services を使用した Azure SQL Database のデプロイ
Azure DevOps Services を使用すると、Azure SQL Database に更新をデプロイすることもできます。 開始するには、Azure DevOps Services アカウント、バージョン管理システム (Azure Repos や GitHub など)、SQL Database 拡張機能がインストールされた Visual Studio Code が必要です。
Azure DevOps Services には、コードを自動的にビルド、テスト、デプロイする Azure Pipelines が含まれます。 Azure Pipelines を使うと、プロジェクト内で Azure SQL Database の変更の継続的インテグレーションと継続的デプロイ (CI/CD) をサポートできます。 この統合により、データベースの変更が一貫して確実に適用されます。
Azure Pipelines は、GitHub や Azure Repos など、さまざまなバージョン管理システムとシームレスに統合されます。 Azure Pipelines では、パイプラインの一部として SQL スクリプトを実行し、Azure PowerShell スクリプトを使用して Azure でファイアウォール規則を作成および削除し、安全で効率的なデータベース管理を行うことができます。
Azure SQL Database のデプロイ オプションの詳細については、Azure DevOps Services のドキュメント「Azure SQL データベースのデプロイ」を参照してください。