Azure Database for MySQL フレキシブル サーバー にデータベースの更新をデプロイするワークフローを使用することによって、GitHub Actions の使用を開始します。
前提条件
必要なものは次のとおりです。
アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
GitHub アカウント。 GitHub アカウントをお持ちでない場合は、無料でサインアップできます。
サンプル データ (
data.sql) が格納された GitHub リポジトリ。重要
このクイックスタートでは、関連付けられた IP アドレスを必要に応じてファイアウォール規則に追加できるよう、GitHub リポジトリがコンピューターに複製されていることを前提としています。
Azure Database for MySQLのフレキシブル サーバー インスタンス。
ワークフロー ファイルの概要
GitHub Actions ワークフローは、お使いのリポジトリの /.github/workflows/ パスの YAML (.yml) ファイルに定義されます。 この定義には、ワークフローを構成するさまざまな手順とパラメーターが含まれます。
このファイルには 2 つのセクションがあります。
| Section | タスク |
|---|---|
| 認証 | 1.デプロイ資格情報を生成します。 |
| デプロイする | 1. データベースをデプロイします。 |
デプロイ資格情報を生成する
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 資格情報を構成します。
MySQL 接続文字列をコピーする
Azure portal で、Azure Database for MySQL フレキシブル サーバー インスタンスに移動し、[設定]>[接続文字列] を開きます。
ADO.NET の接続文字列をコピーします。 プレースホルダー your_database および your_password の値を置き換えます。
重要
- Azure Database for MySQL 単一サーバーの場合は、Uid=adminusername@servername を使用します。 @servername は必須です。
- Azure Database for MySQL フレキシブル サーバーの場合は、 なしで @servername を使用します。
この接続文字列を GitHub シークレットとして使用します。
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 シークレットを使用することをお勧めします。
ワークフローを追加する
GitHub リポジトリの [Actions](アクション) にアクセスします。
[Set up a workflow yourself](ワークフローを自分でセットアップする) を選択します。
ワークフロー ファイルの
on:セクションの後にあるすべてのものを削除します。 たとえば、残りのワークフローは次の例のようになります。name: CI on: push: branches: [ main ] pull_request: branches: [ main ]ワークフロー
MySQL for GitHub Actionsの名前を変更し、チェックアウトとログインのアクションを追加します。 これらのアクションにより、サイト コードがチェックアウトされ、先ほど作成したAZURE_CREDENTIALSGitHub シークレットを使って Azure に対する認証が行われます。name: MySQL 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 MySQL のデプロイ アクションを使用して、MySQL インスタンスに接続します。
MYSQL_SERVER_NAMEをご自分のサーバーの名前に置き換えます。 リポジトリのルート レベルにdata.sqlという名前の MySQL データ ファイルを配置する必要があります。- uses: azure/mysql@v1 with: server-name: MYSQL_SERVER_NAME connection-string: ${{ secrets.AZURE_MYSQL_CONNECTION_STRING }} sql-file: './data.sql'Azure のサインアウトにアクションを追加して、ワークフローを完成させます。 完成したワークフローを次に示します。 このファイルは、リポジトリの
.github/workflowsフォルダーに表示されます。name: MySQL 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/mysql@v1 with: server-name: MYSQL_SERVER_NAME connection-string: ${{ secrets.AZURE_MYSQL_CONNECTION_STRING }} sql-file: './data.sql' # Azure logout - name: logout run: | az logout
デプロイを確認する
GitHub リポジトリの [Actions](アクション) にアクセスします。
最初の結果を開くと、ワークフローの実行の詳細なログが表示されます。
リソースをクリーンアップする
Azure Database for MySQL フレキシブル サーバーのデータベースとリポジトリが不要になったら、リソース グループと GitHub リポジトリを削除して、デプロイしたリソースをクリーンアップします。