適用対象:Azure SQL Database
Azure SQL Database にデータベースの更新をデプロイするワークフローを使用することによって、GitHub Actions の使用を開始します。
前提条件
必要なもの:
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- dacpac パッケージ (
Database.dacpac) が格納された GitHub リポジトリ。 GitHub アカウントをお持ちでない場合は、無料でサインアップできます。 - Azure SQL Database。 クイック スタート:Azure SQL データベース の単一データベースを作成する
- データベースにインポートする .dacpac ファイル。
ワークフロー ファイルの概要
GitHub Actions ワークフローは、お使いのリポジトリの /.github/workflows/ パスの YAML (.yml) ファイルに定義されます。 このファイルには、ワークフローを構成するステップとパラメーターがあります。
このファイルには 2 つのセクションがあります。
| Section | タスク |
|---|---|
| 認証 | 1.デプロイ資格情報を生成します。 |
| デプロイする | 2. データベースをデプロイします。 |
デプロイ資格情報を生成する
OIDC で Azure ログイン アクションを使用するには、Microsoft Entra アプリケーションまたはユーザー割り当てマネージド ID でフェデレーション ID 資格情報を構成する必要があります。
オプション 1: Microsoft Entra アプリケーション
- Azure portal、Azure CLI、または Azure PowerShell で、サービス プリンシパルを使って Microsoft Entra アプリケーションを作成します。
- 後で GitHub Actions ワークフローで使うため、クライアント ID、サブスクリプション ID、ディレクトリ (テナント) ID の値をコピーしておきます。
- Azure portal、Azure CLI、または Azure PowerShell を使用して、サービス プリンシパルに適切なロールを割り当てます。
- GitHub Actions により GitHub リポジトリに対して発行されたトークンを信頼するように、Microsoft Entra アプリケーションでフェデレーション ID 資格情報を構成します。
オプション 2: ユーザー割り当てマネージド ID
- 「ユーザー割り当てマネージド ID を作成する」の手順を使用して、ユーザー割り当てマネージド ID を作成します。
- 後で GitHub Actions ワークフローで使うため、クライアント ID、サブスクリプション ID、ディレクトリ (テナント) ID の値をコピーしておきます。
- ユーザー割り当てマネージド ID に適切なロールを割り当てます。
- GitHub Actions により GitHub リポジトリに対して発行されたトークンを信頼するように、ユーザー割り当てマネージド ID でフェデレーション ID 資格情報を構成します。
SQL 接続文字列をコピーする
Azure portal でご自分の Azure SQL データベースにアクセスし、 [設定]>[接続文字列] を開きます。
ADO.NET の接続文字列をコピーします。 プレースホルダー your_database および your_password の値を置き換えます。
この接続文字列を GitHub シークレット AZURE_SQL_CONNECTION_STRING として設定します。
GitHub シークレットを構成する
ログイン アクションには、アプリケーションのクライアント ID、ディレクトリ (テナント) ID、サブスクリプション ID を指定する必要があります。 これらの値は、ワークフロー内で直接指定するか、GitHub シークレットに格納してワークフローで参照できます。 GitHub シークレットとして値を保存する方がより安全なオプションです。
GitHub で、お使いのリポジトリに移動します。
[Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。
[New repository secret](新しいリポジトリ シークレット) を選択します。
注
パブリック リポジトリのワークフロー セキュリティを強化するには、リポジトリ シークレットの代わりに環境シークレットを使用します。 環境が承認を必要とするなら、ジョブは必須のレビュー担当者の一人が承認するまで環境のシークレットにアクセスできません。
AZURE_CLIENT_ID、AZURE_TENANT_ID、AZURE_SUBSCRIPTION_IDのシークレットを作成します。 Microsoft Entra アプリケーションまたは GitHub シークレットのユーザー割り当てマネージド ID から次の値をコピーします。GitHub シークレット Microsoft Entra アプリケーションまたはユーザー割り当てマネージド ID AZURE_CLIENT_ID クライアントID AZURE_SUBSCRIPTION_ID サブスクリプション ID AZURE_TENANT_ID ディレクトリ (テナント) ID 注
セキュリティ上の理由から、値をワークフローに直接渡すのではなく、GitHub シークレットを使用することをお勧めします。
SQL 接続文字列 シークレットを追加する
GitHub で、お使いのリポジトリに移動します。
ナビゲーション メニューで [設定] に移動します。
[Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。
[New repository secret](新しいリポジトリ シークレット) を選択します。
SQL 接続文字列を貼り付けます。 シークレットに
AZURE_SQL_CONNECTION_STRINGと名前を付けます。[Add secret](シークレットの追加) を選択します。
ワークフローを追加する
GitHub リポジトリの [Actions](アクション) にアクセスします。
[Set up a workflow yourself](ワークフローを自分でセットアップする) を選択します。
ワークフロー ファイルの
on:セクションの後にあるすべてのものを削除します。 たとえば、残りのワークフローは次のようになります。name: SQL for GitHub Actions on: push: branches: [ main ] pull_request: branches: [ main ]ワークフロー
SQL for GitHub Actionsの名前を変更し、チェックアウトとログインのアクションを追加します。 これらのアクションにより、サイト コードがチェックアウトされ、先ほど作成したAZURE_CREDENTIALSGitHub シークレットを使って Azure に対する認証が行われます。name: SQL for GitHub Actions on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v1 - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Azure SQL のデプロイ アクションを使用して、SQL インスタンスに接続します。 リポジトリのルート レベルに dacpac パッケージ (
Database.dacpac) を配置する必要があります。 前に作成したAZURE_SQL_CONNECTION_STRINGGitHub シークレットを使用します。- uses: azure/sql-action@v2.3 with: connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }} path: './Database.dacpac' action: 'publish'Azure のログアウトにアクションを追加して、ワークフローを完成させます。 完成したワークフローを次に示します。 このファイルは、リポジトリの
.github/workflowsフォルダーに表示されます。name: SQL for GitHub Actions on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v1 - uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/sql-action@v2.3 with: connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }} path: './Database.dacpac' action: 'publish' # Azure logout - name: logout run: | az logout
デプロイを確認する
GitHub リポジトリの [Actions](アクション) にアクセスします。
最初の結果を開くと、ワークフローの実行の詳細なログが表示されます。
リソースをクリーンアップする
Azure SQL データベースとリポジトリが不要になったら、リソース グループと GitHub リポジトリを削除して、デプロイしたリソースをクリーンアップします。