次の方法で共有


クイック スタート: Azure Kubernetes Service で Azure App Configuration を使用する

Kubernetes では、ConfigMaps から構成を使用するようにポッドを設定します。 これにより、お使いのコンテナー イメージから構成を切り離して、アプリケーションを簡単に移植できるようになります。 Azure App Configuration Kubernetes プロバイダーを使用すると、Azure App Configuration のキー値と Key Vault 参照から ConfigMaps とシークレットを構築できます。 これにより、Azure App Configuration を利用して、アプリケーション コードを変更することなく、一元化されたストレージと構成の管理を行うことができます。

ConfigMap は、環境変数またはマウントされたファイルとして使用できます。 このクイック スタートでは、Azure Kubernetes Service ワークロードに Azure App Configuration Kubernetes Provider を組み込み、JSON ファイルから構成を使用する単純な ASP.NET Core アプリを実行します。

ヒント

Azure App Configuration にアクセスするために Kubernetes でホストされているワークロードのオプションを参照してください。

Note

このクイック スタートでは、Azure App Configuration Kubernetes プロバイダーの設定について説明します。 必要に応じて、次の Azure Developer CLI コマンドと azure-appconfig-aks テンプレートを使用して、Azure リソースをプロビジョニングし、このクイックスタートで使用するサンプル アプリケーションをデプロイできます。 このテンプレートの詳細については、GitHub の azure-appconfig-aks リポジトリを参照してください。

azd init -t azure-appconfig-aks
azd up

前提条件

AKS で実行されているアプリケーションを作成する

このセクションでは、Azure Kubernetes Service (AKS) で実行されている単純な ASP.NET Core Web アプリケーションを作成します。 アプリケーションは、ローカル JSON ファイルから構成を読み取ります。 次のセクションでは、アプリケーション コードを変更せずに、Azure App Configuration から構成を使用できるようにします。 ファイルから構成を読み取る AKS アプリケーションが既にある場合は、このセクションをスキップし、「App Configuration Kubernetes Providerを使用する」に進んでください。 プロバイダーによって生成された構成ファイルが、アプリケーションで使用されるファイル パスと一致することを確認するだけで済みます。

アプリケーションの作成

  1. .NET コマンドライン インターフェイス (CLI) を使用して次のコマンドを実行し、新しい ASP.NET Core Web アプリ プロジェクトを新しい MyWebApp ディレクトリに作成します。

    dotnet new webapp --output MyWebApp --framework net6.0
    
  2. Pages ディレクトリで Index.cshtml を開き、次のコードでコンテンツを更新します。

    @page
    @model IndexModel
    @using Microsoft.Extensions.Configuration
    @inject IConfiguration Configuration
    @{
        ViewData["Title"] = "Home page";
    }
    
    <style>
        h1 {
            color: @Configuration["Settings:FontColor"];
        }
    </style>
    
    <div class="text-center">
        <h1>@Configuration["Settings:Message"]</h1>
    </div>
    
  3. プロジェクトのルートに config ディレクトリを作成し、次の内容を含む mysettings.json ファイルを追加します。

    {
      "Settings": {
        "FontColor": "Black",
        "Message": "Message from the local configuration"
      }
    }
    
  4. program.cs を開き、 AddJsonFile メソッドを呼び出して JSON ファイルを構成ソースに追加します。

    // Existing code in Program.cs
    // ... ...
    
    // Add a JSON configuration source 
    builder.Configuration.AddJsonFile("config/mysettings.json", reloadOnChange: true, optional: false);
    
    var app = builder.Build();
    
    // The rest of existing code in program.cs
    // ... ...
    

アプリケーションのコンテナー格納

  1. dotnet publish コマンドを実行して、リリース モードでアプリをビルドし、発行されたディレクトリ にアセットを作成します。

    dotnet publish -c Release -o published
    
  2. プロジェクト ディレクトリのルートに Dockerfile という名前のファイルを作成し、それをテキスト エディターで開いて、次の内容を入力します。 Dockerfile は、拡張子のないテキスト ファイルであり、コンテナー イメージの作成に使用されます。

    FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
    WORKDIR /app
    COPY published/ ./
    ENTRYPOINT ["dotnet", "MyWebApp.dll"]
    
  3. 次のコマンドを実行して、aspnetapp という名前のコンテナー イメージをビルドします。

    docker build --tag aspnetapp .
    

Azure Container Registry にイメージをプッシュする

  1. az acr login コマンドを実行して、コンテナー レジストリにログインします。 次の例では、myregistry という名前のレジストリにログインします。 レジストリ名をご自分のものに置き換えてください。

    az acr login --name myregistry
    

    ログインが成功すると、コマンドが Login Succeeded を返します。

  2. docker tag を使用して、イメージ aspnetapp 用のタグ myregistry.azurecr.io/aspnetapp:v1 を作成します。

    docker tag aspnetapp myregistry.azurecr.io/aspnetapp:v1
    

    ヒント

    既存の Docker イメージとタグの一覧を確認するには、docker image ls を実行します。 このシナリオでは、少なくとも 2 つのイメージ (aspnetappmyregistry.azurecr.io/aspnetapp) が表示されるはずです。

  3. docker push を使用してイメージをコンテナー レジストリにアップロードします。 たとえば、次のコマンドを使用すると、レジストリ myregistry の下にある、v1 というタグが付いた aspnetapp という名前のリポジトリにイメージがプッシュされます。

    docker push myregistry.azurecr.io/aspnetapp:v1
    

アプリケーションの配置

  1. ご自分のプロジェクトのルート ディレクトリに、Deployment ディレクトリを作成します。

  2. 次の内容を含む deployment.yaml ファイルを Deployment ディレクトリに追加して、デプロイを作成します。 template.spec.containers.image の値を、前の手順でコピーしたイメージに置き換えます。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aspnetapp-demo
      labels:
        app: aspnetapp-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aspnetapp-demo
      template:
        metadata:
          labels:
            app: aspnetapp-demo
        spec:
          containers:
          - name: aspnetapp
            image: myregistry.azurecr.io/aspnetapp:v1
            ports:
            - containerPort: 80
    
  3. 次の内容を含む service.yaml ファイルを Deployment ディレクトリに追加して、LoadBalancer サービスを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: aspnetapp-demo-service
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: aspnetapp-demo
    
  4. 次のコマンドを実行して、アプリケーションを AKS クラスターにデプロイします。

    kubectl create namespace appconfig-demo
    kubectl apply -f ./Deployment -n appconfig-demo
    
  5. 次のコマンドを実行して、LoadBalancer サービスによって公開される外部 IP アドレスを取得します。

    kubectl get service aspnetapp-demo-service -n appconfig-demo
    
  6. ブラウザーの画面を開き、前の手順で特定した IP アドレスに移動します。 Web ページは次のようになります。

    configMap を使用する前の Kubernetes プロバイダーを示すスクリーンショット。

App Configuration Kubernetes プロバイダー を使用する

AKS で実行されているアプリケーションを作成したので、Kubernetes コントローラーとして実行されている AKS クラスターに App Configuration Kubernetes プロバイダーをデプロイします。 プロバイダーは App Configuration ストアからデータを取得し、データ ボリュームにマウントされた JSON ファイルとして使用可能な ConfigMap を作成します。

Azure App Configuration ストアを設定する

App Configuration ストアに次のキー値を追加し、[ラベル][コンテンツのタイプ] を既定値のままにします。 Azure portal または CLI を使用してストアにキーと値を追加する方法の詳細については、キーと値の作成に関する記事を参照してください。

キー Value
Settings:FontColor
Settings:Message "Azure App Configuration からの挨拶"

App Configuration Kubernetes プロバイダーを設定する

  1. 次のコマンドを実行して、ご自分の AKS クラスターのアクセス資格情報を取得します。 nameresource-group パラメーターの値をご自分の AKS インスタンスのものに置き換えます。

    az aks get-credentials --name <your-aks-instance-name> --resource-group <your-aks-resource-group>
    
  2. helm を使用して、Azure App Configuration Kubernetes プロバイダーをご自分の AKS クラスターにインストールします。

    helm install azureappconfiguration.kubernetesprovider \
         oci://mcr.microsoft.com/azure-app-configuration/helmchart/kubernetes-provider \
         --namespace azappconfig-system \
         --create-namespace
    

    ヒント

    App Configuration Kubernetes プロバイダーは、AKS 拡張機能としても使用できます。 この統合により、Azure CLI、ARM テンプレート、または Bicep テンプレートを使用したシームレスなインストールと管理が可能になります。 AKS 拡張機能を使用すると、マイナー/パッチ バージョンの自動更新が容易になり、システムが常に最新の状態であることが確実になります。 詳細なインストール手順については、「Azure Kubernetes Service 用 Azure App Configuration 拡張機能」を参照してください。

  3. 次の内容を含む appConfigurationProvider.yaml ファイルを Deployment ディレクトリに追加して、AzureAppConfigurationProvider リソースを作成します。 AzureAppConfigurationProvider は、Azure App Configuration ストアからダウンロードするデータを定義し、ConfigMap を作成するカスタム リソースです。

    apiVersion: azconfig.io/v1
    kind: AzureAppConfigurationProvider
    metadata:
      name: appconfigurationprovider-sample
    spec:
      endpoint: <your-app-configuration-store-endpoint>
      target:
        configMapName: configmap-created-by-appconfig-provider
        configMapData: 
          type: json
          key: mysettings.json
      auth:
        workloadIdentity:
          managedIdentityClientId: <your-managed-identity-client-id>
    

    endpoint フィールドの値を、ご自分の Azure App Configuration ストアのエンドポイントに置き換えます。 ワークロード ID を使用 の手順に従い、作成したユーザー割り当てマネージド ID のクライアント ID で auth セクションを更新します。

    Note

    AzureAppConfigurationProvider は宣言型 API オブジェクトです。 これにより、App Configuration ストア内のデータから作成された ConfigMap の必要な状態が次の動作で定義されます。

    • 同じ名前の ConfigMap が同じ名前空間に既に存在する場合、ConfigMap の作成は失敗します。
    • ConfigMap は、他の方法で削除または変更された場合、App Configuration ストア内の現在のデータに基づいてリセットされます。
    • App Configuration Kubernetes プロバイダーがアンインストールされると、ConfigMap は削除されます。
  4. Deployment ディレクトリ内の deployment.yaml ファイルを更新して、ConfigMap configmap-created-by-appconfig-provider をマウントされたデータ ボリュームとして使用します。 volumeMounts.mountPath が、Dockerfile で指定された WORKDIR と、前に作成した config ディレクトリと一致していることを確認することが重要です。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aspnetapp-demo
      labels:
        app: aspnetapp-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aspnetapp-demo
      template:
        metadata:
          labels:
            app: aspnetapp-demo
        spec:
          containers:
          - name: aspnetapp
            image: myregistry.azurecr.io/aspnetapp:v1
            ports:
            - containerPort: 80
            volumeMounts:
            - name: config-volume
              mountPath: /app/config
          volumes:
          - name: config-volume 
            configMap: 
              name: configmap-created-by-appconfig-provider
    
  5. 次のコマンドを実行して、変更をデプロイします。 既存の AKS アプリケーションを使用している場合は、名前空間を置き換えます。

    kubectl apply -f ./Deployment -n appconfig-demo
    
  6. ブラウザーを更新します。 更新されたコンテンツがページに表示されます。

    configMap を使用した後の Kubernetes プロバイダーを示すスクリーンショット。

トラブルシューティング

App Configuration ストアからのデータがアプリケーションによって取得されていない場合は、次のコマンドを実行して、ConfigMap が正しく作成されていることを検証します。

kubectl get configmap configmap-created-by-appconfig-provider -n appconfig-demo

ConfigMap が作成されていない場合は、次のコマンドを実行してデータ取得の状態を表示します。

kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml

App Configuration ストアからのデータが Azure App Configuration Kubernetes プロバイダーによって正常に取得されていると、次の例に示すように、出力の status セクションの下の phase プロパティは COMPLETE になります。

$ kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml

apiVersion: azconfig.io/v1
kind: AzureAppConfigurationProvider
  ... ... ...
status:
  lastReconcileTime: "2023-04-06T06:17:06Z"
  lastSyncTime: "2023-04-06T06:17:06Z"
  message: Complete sync settings to ConfigMap or Secret
  phase: COMPLETE

フェーズが COMPLETE でない場合、データは App Configuration ストアから正しくダウンロードされていません。 次のコマンドを実行して、Azure App Configuration Kubernetes プロバイダーのログを表示します。

kubectl logs deployment/az-appconfig-k8s-provider -n azappconfig-system

このログを使用して、詳細なトラブルシューティングを行います。 たとえば、App Configuration ストアへの要求に対する応答が RESPONSE 403: 403 Forbidden である場合、これは、App Configuration Kubernetes プロバイダーに App Configuration ストアへのアクセスに必要なアクセス許可がないことを示している可能性があります。 ワークロード ID を使用する 手順に従って、関連付けられているマネージド ID に適切なアクセス許可が割り当てられていることを確認します。

リソースをクリーンアップする

AKS クラスターを維持する場合は、AKS クラスターから App Configuration Kubernetes プロバイダーをアンインストールします。

helm uninstall azureappconfiguration.kubernetesprovider --namespace azappconfig-system

この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。

重要

リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。

  1. Azure portal にサインインし、 [リソース グループ] を選択します。
  2. [名前でフィルター] ボックスにリソース グループの名前を入力します。
  3. 結果一覧でリソース グループ名を選択し、概要を表示します。
  4. [リソース グループの削除] を選択します。
  5. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。

しばらくすると、リソース グループとそのすべてのリソースが削除されます。

Note

Azure Developer CLI を使用してリソースを設定する場合は、azd down コマンドを実行して、azure-appconfig-aks テンプレートによって作成されたすべてのリソースを削除できます。

次のステップ

このクイック スタートでは次の作業を行います。

  • Azure Kubernetes Service (AKS) で実行されているアプリケーションを作成しました。
  • App Configuration Kubernetes プロバイダーを使用して、AKS クラスターを App Configuration ストアに接続しました。
  • App Configuration ストアのデータを含む ConfigMap を作成しました。
  • アプリケーション コードを変更せずに、App Configuration ストアからの構成を使用してアプリケーションを実行しました。

構成が動的に更新されるように AKS ワークロードを更新する方法については、次のチュートリアルに進んでください。

Azure App Configuration Kubernetes プロバイダーの詳細については、「Azure App Configuration Kubernetes プロバイダー リファレンス」を参照してください。