GitHub リポジトリから App Configuration ストアに構成ファイルをインポートする

コードとしての構成を導入してあり、構成を GitHub で管理している場合は、GitHub Actions を使って、GitHub リポジトリから App Configuration ストアに構成ファイルを自動的にインポートできます。 このようにすると、通常どおり構成ファイルを変更できる一方で、次のような App Configuration ストアの利点を得ることができます。

  • コードの外部での一元化された構成。
  • アプリ全体を再デプロイしない構成の更新。
  • Azure App Service や Functions などのサービスとの統合。

GitHub Actions のワークフローでは、GitHub リポジトリでの自動化されたプロセスを定義します。 GitHub リポジトリから Azure App Configuration ストアに構成ファイルをインポートするには、Azure CLI GitHub アクションを使います。これは、App Configuration ストアにファイルをインポートするための完全な機能を提供します。

認証

構成を Azure App Configuration ストアにインポートするための認証は、次のいずれかの方法を使って行うことができます。

Microsoft Entra ID を使用する

推奨される認証方法は Microsoft Entra ID を使うものであり、Azure リソースに安全に接続できます。 Azure ログイン GitHub アクションを使って、認証プロセスを自動化できます。

Azure ログインを使うと、サービス プリンシパルとシークレット、または OpenID Connect とフェデレーション ID 資格情報を使って、認証を行うことができます。 この例では、OpenID Connect を使って App Configuration ストアにログインします。

OpenID Connect で Azure ログインを使用する

OpenID Connect で Azure ログインを使うには、次のことを行う必要があります。

  1. サービス プリンシパルを使って Microsoft Entra アプリケーションを設定します。
  2. Microsoft Entra アプリケーションに App Configuration データ所有者ロールを割り当てて、GitHub アクションで App Configuration ストアの読み取りと書き込みを行えるようにします。
  3. Microsoft Entra アプリケーションのクライアント ID、テナント ID、サブスクリプション ID をログイン アクションに指定します。 これらの値は、ワークフローで直接指定することも、セキュリティを強化するために GitHub シークレットとして格納することもできます。 次の例では、これらの値はシークレットとして設定されています。 GitHub でのシークレットの使用について詳しくは、「GitHub Actions でのシークレットの使用」をご覧ください。

この GitHub アクションの使用を開始するには、リポジトリにアクセスし、[アクション] タブを選択します。[新しいワークフロー][Set up a workflow yourself] (ワークフローを自分で設定する) の順に選択します。 最後に、マーケットプレースで "Azure Login" を検索します。 見つかったら、アクションをクリックして、示されたスニペットをワークフロー ファイルにコピーします。

[Actions]\(アクション\) タブを選択する

Azure ログイン アクションを選ぶ

Microsoft Entra ID の使用例

# Set permissions for the workflow. Specify 'id-token: write' to allow OIDC token generation at the workflow level.
permissions: 
  id-token: write
  contents: read
 
jobs: 
  syncconfig: 
    runs-on: ubuntu-latest 
    steps: 
      - name: Azure login
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

接続文字列を使用する

または、接続文字列を Azure CLI コマンドに直接渡して認証を行うこともできます。 この方法では、Azure portal から接続文字列を取得し、コマンドまたはスクリプトでそれを使います。

最初に、Azure portal の App Configuration ストアの [アクセスの設定] で接続文字列を確認できます。

次に、この接続文字列を GitHub リポジトリにシークレット変数として設定します。 GitHub でのシークレットの使用について詳しくは、「GitHub Actions でのシークレットの使用」をご覧ください。

接続文字列の使用例

on: 
  push: 
    branches: 
      - 'main' 
    paths: 
      - 'appsettings.json'
 
jobs: 
  syncconfig: 
    runs-on: ubuntu-latest
    
    # pass the secret variable as an environment variable to access it in your CLI action.
    env:
      CONNECTION_STRING: ${{ secrets.<ConnectionString> }}

構成ファイルのインポート

Azure CLI GitHub アクションを使って、構成ファイルを App Configuration ストアにインポートします。 この GitHub アクションの使用を開始するには、リポジトリにアクセスし、[アクション] タブを選択します。[新しいワークフロー][Set up a workflow yourself] (ワークフローを自分で設定する) の順に選択します。 最後に、マーケットプレースで "Azure CLI Action" を検索します。 見つかったら、アクションをクリックして、示されたスニペットをワークフロー ファイルにコピーします。

Azure CLI アクションを選択する

次の例では、変更が appsettings.json にプッシュされたら、Azure CLI アクションを使って構成ファイルを Azure App Configuration ストアにインポートします。 開発者が変更を appsettings.json にプッシュすると、Azure CLI アクションに渡されたスクリプトによって、App Configuration ストアが新しい値で更新されます。

このワークフローの on セクションでは、appsettings.json を含む "プッシュ" が main ブランチに対して "行われたとき" にアクションがトリガーされることが指定されています。 jobs セクションでは、アクションがトリガーされると実行されるジョブの一覧が示されています。 このアクションは、関連するファイルをチェックアウトして、App Configuration ストアを更新します。

on: 
  push: 
    branches: 
      - 'main' 
    paths: 
      - 'appsettings.json'

# Set permissions for the workflow. Specify 'id-token: write' to allow OIDC token generation at the workflow level.
permissions: 
  id-token: write
  contents: read

jobs: 
  syncconfig: 
    runs-on: ubuntu-latest 
    steps: 
      - name: Azure login
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      # checkout done so that files in the repo can be read by the sync 
      - uses: actions/checkout@v1 
      - uses: azure/cli@v2
        with: 
          azcliversion: latest
          inlineScript: |
            az appconfig kv import --endpoint <your-app-configuration-store-endpoint> --auth-mode login -s file --path appsettings.json --format json --yes

Azure App Configuration CLI のインポート コマンドについて詳しくは、Azure AppConfifguration CLI のドキュメントをご覧ください。

インポートで動的ラベルを使用する

各インポートで動的ラベルを使うのは、構成のバージョン管理を明確で正確にしておくのによい方法です。 これを使うと、App Configuration ストアへの各インポートを一意に識別できるため、コードの変更を構成の更新にマップしやすくなります。

インポートでの動的ラベルの使用例

次の例では、インポートされるすべてのキーと値に、コミット ハッシュに基づく一意のラベルを付けています。

 jobs: 
  syncconfig: 
    runs-on: ubuntu-latest 
    steps:      
      # Creates a label based on the branch name and the first 8 characters          
      # of the commit hash 
      - id: determine_label 
        run: echo ::set-output name=LABEL::"${GITHUB_REF#refs/*/}/${GITHUB_SHA:0:8}" 
      # checkout done so that files in the repo can be read by the sync 
      - uses: actions/checkout@v1 
      - uses: azure/cli@v2
        with: 
          azcliversion: latest
          inlineScript: |
            az appconfig kv import --endpoint <your-app-configuration-store-endpoint> --auth-mode login -s file --path appsettings.json --format json --label ${{ steps.determine_label.outputs.LABEL }} --yes

次のステップ

CLI の import コマンドの使用方法については、Azure CLI import コマンドの総合ガイドをご覧ください。

さまざまなファイル コンテンツ プロファイルについては、「構成ファイルの Azure App Configuration サポート」をご覧ください。