Azure Kubernetes Service (AKS) で OpenAI を使用するアプリケーションをデプロイする

この記事では、Azure Kubernetes Service (AKS)に AKS ストア デモ アプリケーションをデプロイし、OpenAI または OpenAI API Azure構成して製品の説明を生成します。

クラウドネイティブ アプリケーションのサンプルは、次のような複数の言語とフレームワークで記述されたサービスで構成されます。

  • Golang と Gin
  • Rust と Actix-Web
  • JavaScript と Vue.js および Fastify
  • FastAPI を使用したPython

これらのアプリケーションは、買い物客や店舗管理者向けのフロントエンド、RabbitMQ メッセージ キューと DocumentDB データベースにデータを送信する REST API、トラフィックをシミュレートするコンソール アプリを提供します。

Note

運用環境で永続的なストレージを使用せずに、DocumentDB や RabbitMQ などのステートフル コンテナーを実行しないでください。 この記事では、わかりやすくするために永続的なストレージなしでそれらを使用します。 運用ワークロードの場合は、Azure Cosmos DBやAzure Service Busなどのマネージド サービスを使用します。

サンプル アプリケーションのGitHubコードベースにアクセスするには、AKS ストア デモを参照してください。

開始する前に

前提条件

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Get started with Azure Cloud Shell」を参照してください。

  • CLI 参照コマンドをローカルで実行する場合は、Azure CLIinstallします。 Windowsまたは macOS で実行している場合は、Docker コンテナーでAzure CLIを実行することを検討してください。 詳細については、「 Docker コンテナーでAzure CLIを実行する方法を参照してください。

    • ローカル インストールを使用している場合は、az login コマンドを使用してAzure CLIにサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「Azure CLI を使用して Azure に認証する」を参照してください。

    • メッセージが表示されたら、最初に使用するときにAzure CLI拡張機能をインストールします。 拡張機能の詳細については、「Azure CLIを参照してください。

    • az version を実行して、インストールされているバージョンと依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

リソース グループを作成する

Azure リソース グループ は、Azureリソースをデプロイおよび管理する論理グループです。 リソース グループを作成する際は、場所の指定を求めるプロンプトが表示されます。 この場所は、リソース グループ メタデータのストレージの場所であり、リソースの作成時に別のリージョンを指定しない場合はAzureでリソースが実行されます。

次の例では、 myResourceGroup という名前のリソース グループを eastus の場所に作成します。

az group create コマンドを使用して、リソース グループを作成します。

az group create --name myResourceGroup --location eastus

リソース グループが正常に作成された場合の出力例を以下に示します。

{
  "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
  "location": "eastus",
  "managedBy": null,
  "name": "myResourceGroup",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

AKS クラスターを作成する

次の例では、myResourceGroup に myAKSCluster という名前のクラスターを作成します。

az aks create コマンドを使用して、AKS クラスターを作成します。

az aks create --resource-group myResourceGroup --name myAKSCluster --generate-ssh-keys

数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。

クラスターに接続する

Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使用します。 Azure Cloud Shell を使用している場合、kubectl は既にインストールされています。

  1. kubectl コマンドを使用して az aks install-cli をローカルにインストールします。

    az aks install-cli
    

    Note

    Linux ベースのシステムで昇格されたアクセス許可が必要な場合は、 sudo az aks install-cli コマンドを使用します。

  2. kubectl コマンドを使用して、Kubernetes クラスターに接続するように az aks get-credentials を構成します。

    このコマンドは、次の操作を実行します。

    • 資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。
    • ~/.kube/config (Kubernetes 構成ファイルの既定の場所) を使用します。 --file 引数を使用して、Kubernetes 構成ファイルの別の場所を指定します。
    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. kubectl get コマンドを使用して、ご利用のクラスターへの接続を確認します。 このコマンドを実行すると、クラスター ノードの一覧が返されます。

    kubectl get nodes
    

    次の出力例は、前の手順で作成したノードを示しています。 各ノードの状態が Ready であることを確認します。

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-31469198-vmss000000   Ready    agent   3h29m   v1.25.6
    aks-nodepool1-31469198-vmss000001   Ready    agent   3h29m   v1.25.6
    aks-nodepool1-31469198-vmss000002   Ready    agent   3h29m   v1.25.6
    

Note

プライベート AKS クラスターの場合は、クラスターと同じ仮想ネットワーク内のエンドポイントから接続します。 構成手順については、「 プライベート AKS クラスターの作成」を参照してください。

アプリケーションの配置

AKS ストア アプリケーション マニフェストには、次の Kubernetes デプロイとサービスが含まれています。

  • 製品サービス: 製品情報を表示します。
  • 注文サービス: 注文を行います。
  • Makeline サービス: キューからの注文を処理し、それらの注文を完了します。
  • ストア フロント: 顧客が製品を表示して注文するための Web アプリケーション。
  • ストア管理者: ストアの従業員がキュー内の注文を確認し、製品情報を管理するための Web アプリケーション。
  • 仮想顧客: スケジュールに基づいて注文の作成をシミュレートします。
  • 仮想ワーカー: スケジュールに基づいて注文の完了をシミュレートします。
  • DocumentDB: 永続化されたデータのインスタンスをNoSQLします。
  • RabbitMQ: 注文キュー用のメッセージキュー。

Note

運用環境で永続的なストレージを使用せずに、DocumentDB や RabbitMQ などのステートフル コンテナーを実行しないでください。 この記事では、わかりやすくするために永続的なストレージなしでそれらを使用します。 運用ワークロードの場合は、Azure Cosmos DBやAzure Service Busなどのマネージド サービスを使用します。

  1. アプリケーションの YAML マニフェストを確認します。

  2. kubectl apply コマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-all-in-one.yaml
    

OpenAI サービスをデプロイする

AKS で実行されているアプリケーションAzure OpenAI または OpenAI API を選択します。

  1. Azure ポータルで、Azure OpenAI インスタンスを作成します。
  2. Microsoft Foundry にサインインします。
  3. [New Foundry]\(新しい Foundry\) トグルをオフにし、[Foundry でビルドを維持する] で [すべてのリソースを表示] を選択します。
  4. 作成した Azure OpenAI リソースを選択し、[共有リソース] で [デプロイ] を選択します。
  5. モデルのデプロイ>基本モデルのデプロイを選択します。
  6. gpt-4o-mini 基本モデルを選択し、デプロイ名を入力して、モデルをデプロイします。 次のセクションのデプロイ名を保存します。

Azure OpenAI デプロイの作成の詳細については、「Azure OpenAI を使用してテキストの生成を開始する」を参照してください。

AI マイクロサービスをデプロイする

OpenAI を使用して製品の説明を自動的に生成する、Pythonベースの AI マイクロサービスをデプロイします。 このマイクロサービスは、前のセクションでデプロイした AKS ストア アプリケーションに接続します。

「OpenAI サービスのデプロイ」セクションで作成した OpenAI リソースとモデルのデプロイAzure使用します。 AI マイクロサービス マニフェストで次の環境変数を構成します。

環境変数 価値
USE_AZURE_OPENAI Azure OpenAI を使用するには、"True"に設定します。
AZURE_OPENAI_DEPLOYMENT_NAME Microsoft Foundry のgpt-4o-mini モデル デプロイの名前。
AZURE_OPENAI_ENDPOINT Azure OpenAI リソースの [キーとエンドポイント] ページのエンドポイント。
OPENAI_API_KEY Azure OpenAI リソースの [キーとエンドポイント] ページの API キー。
  1. ai-service.yaml という名前のファイルを作成し、そこに次のマニフェストをコピーします。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ai-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ai-service
      template:
        metadata:
          labels:
            app: ai-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: ai-service
              image: ghcr.io/azure-samples/aks-store-demo/ai-service:2.2.0
              ports:
                - containerPort: 5001
              env:
                - name: USE_AZURE_OPENAI
                  value: "True"
                - name: AZURE_OPENAI_DEPLOYMENT_NAME
                  value: ""
                - name: AZURE_OPENAI_ENDPOINT
                  value: ""
                - name: OPENAI_API_KEY
                  value: ""
              resources:
                requests:
                  cpu: 20m
                  memory: 50Mi
                limits:
                  cpu: 50m
                  memory: 128Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ai-service
    spec:
      type: ClusterIP
      ports:
        - name: http
          port: 5001
          targetPort: 5001
      selector:
        app: ai-service
    
  2. USE_AZURE_OPENAI 環境変数を "True" に設定します。

  3. Microsoft Foundry で、Azure OpenAI デプロイ名をコピーし、AZURE_OPENAI_DEPLOYMENT_NAME値を設定します。

  4. Azure ポータルで、Azure OpenAI リソースの [キーとエンドポイント] を選択します。 エンドポイントと API キーをコピーし、 AZURE_OPENAI_ENDPOINTOPENAI_API_KEY の値を設定します。

  5. kubectl apply コマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。

    kubectl apply -f ai-service.yaml
    

    次の出力例は、正常に作成されたデプロイおよびサービスを示しています。

      deployment.apps/ai-service created
      service/ai-service created
    

Note

Kubernetes マニフェストに API キーを直接格納することは安全ではありません。ソース管理でシークレットを公開する可能性があります。 この例では、わかりやすくするためにマニフェスト値を使用します。 運用ワークロードの場合は、マネージド ID を使用して OpenAI Azure認証するか、シークレットをAzure Key Vaultに格納します。

アプリケーションをテストする

  1. kubectl get pods コマンドを使用して、デプロイされたポッドの状態を確認します。

    kubectl get pods
    

    続行する前に、すべてのポッドの状態が [実行中 ] であることを確認します。

  2. kubectl get service コマンドを使用して、ストア管理者の外部 IP アドレスを取得します。

    kubectl get service store-admin
    

    Kubernetes サービスは、パブリック ロード バランサーを介してストア管理者を公開します。 ロード バランサーでは、アドレスの割り当てに数分かかる場合があります。 アドレスが使用可能になるまで 、EXTERNAL-IP 値は 保留中 と表示されます。

    NAME          TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
    store-admin   LoadBalancer   10.0.142.228   40.64.86.161    80:32494/TCP   50m
    
  3. store-front サービスに対して前の手順を繰り返します。

  4. Web ブラウザーで、ストア管理者の外部 IP アドレスに移動します。この例では、アドレスは 40.64.86.161 です

  5. ストア管理者で、 製品>製品の追加を選択します。

  6. ai-serviceが開始されると、説明フィールドの横に [ASK AI Assistant] ボタンが表示されます。 名前、価格、キーワードを入力し、[ ASK AI Assistant] を選択して製品の説明を生成し、[ 製品の保存] を選択します。

  7. ストア管理者に Dog Smart Collar が表示されていることを確認します。

    ストア管理者の新しい製品を示すスクリーンショット。

  8. ストア フロントの外部 IP アドレスに移動し、Dog Smart Collar が表示されていることを確認します。

    ストア フロントの新しい製品を示すスクリーンショット。

次のステップ

AKS アプリケーションに OpenAI 機能を追加したら、Azure Kubernetes Service (AKS) から Azure OpenAI に安全にアクセスできます。

生成 AI のユース ケースの詳細情報については、次のリソースを参照してください。