GitHub Actions を使用して Azure SQL Database に接続する
適用対象: 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.1. デプロイ資格情報を生成する。 |
デプロイする | 1. データベースをデプロイします。 |
デプロイ資格情報を生成する
Azure CLI で az ad sp create-for-rbac コマンドを使用して、サービス プリンシパルを作成します。 このコマンドは、Azure portal で Azure Cloud Shell を使用するか、[試してみる] ボタンを選択して実行します。
az ad sp create-for-rbac --name "myML" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
--json-auth
--json-auth
パラメーターは、Azure CLI バージョン 2.51.0 以降で使用できます。 これ以前のバージョンでは --sdk-auth
を使用し、非推奨の警告が表示されます。
上記の例で、プレースホルダーをご利用のサブスクリプション ID、リソース グループ名、アプリ名に置き換えます。 これにより、以下のようなご自分の App Service アプリにアクセスするためのロールの割り当て資格情報を含む JSON オブジェクトが出力されます。 この JSON オブジェクトを後のためにコピーします。
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
SQL 接続文字列をコピーする
Azure portal でご自分の Azure SQL データベースにアクセスし、 [設定]>[接続文字列] を開きます。 ADO.NET の接続文字列をコピーします。 プレースホルダー your_database
および your_password
の値を置き換えます。
この接続文字列を GitHub シークレット AZURE_SQL_CONNECTION_STRING
として設定します。
GitHub シークレットを構成する
GitHub で、お使いのリポジトリに移動します。
ナビゲーション メニューで [設定] に移動します。
[Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。
[New repository secret](新しいリポジトリ シークレット) を選択します。
Azure CLI コマンドからの JSON 出力全体をシークレットの値フィールドに貼り付けます。 シークレットに
AZURE_CREDENTIALS
と名前を付けます。[Add secret](シークレットの追加) を選択します。
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_CREDENTIALS
GitHub シークレットを使って 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@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }}
Azure SQL のデプロイ アクションを使用して、SQL インスタンスに接続します。 リポジトリのルート レベルに dacpac パッケージ (
Database.dacpac
) を配置する必要があります。 前に作成したAZURE_SQL_CONNECTION_STRING
GitHub シークレットを使用します。- uses: azure/sql-action@v2 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@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - uses: azure/sql-action@v2 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 リポジトリを削除して、デプロイしたリソースをクリーンアップします。