次の方法で共有


Azure Kubernetes Service (AKS) で OpenAI を使うアプリケーションを展開する

この記事では、AKS で Azure OpenAI または OpenAI を使うアプリケーションの展開方法を確認することができます。 OpenAI を使うと、コンテンツ生成、要約、セマンティック検索、自然言語によるコード生成などのさまざまな AI モデルを、特定のタスクに合わせて導入することができます。 まず、Azure サブスクリプションに AKS クラスターを展開することから始めます。 その後、OpenAI サービスとサンプル アプリケーションを展開します。

このサンプルのクラウド ネイティブ アプリケーションは、現実的な実装を代表しているものです。 次のような複数の言語とフレームワークで記述されたアプリケーションが、このマルチコンテナー アプリケーションを構成しています。

  • Golang と Gin
  • Rust と Actix-Web
  • JavaScript と Vue.js および Fastify
  • Python と FastAPI

これらのアプリケーションには、顧客とストア管理者向けのフロント エンド、RabbitMQ メッセージ キューと MongoDB データベースにデータを送信するための REST API、トラフィックをシミュレートするコンソール アプリが用意されています。

Note

MongoDB や Rabbit MQ などのステートフル コンテナーを、運用環境用の永続ストレージなしで実行することはお勧めしません。 ここでは、わかりやすさのためにこれらを使用しますが、Azure CosmosDB や Azure Service Bus などのマネージド サービスを使うことが推奨されます。

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

開始する前に

前提条件

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

  • CLI リファレンス コマンドをローカル環境で実行したい場合は、Azure CLI をインストールします。 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 構成ファイルの既定の場所) を使用します。 Kubernetes 構成ファイルに対して別の場所を指定するには、--file 引数を使用します。
    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

プライベート クラスターの場合、パブリック IP アドレスを介してノードに接続しようとすると、ノードに到達できない可能性があります。 これを修正するには、接続元のクラスターと同じ VNET 内にエンドポイントを作成する必要があります。 手順に従いプライベート AKS クラスターを作成し、それに接続します。

アプリケーションの配置

AKS AI デモのアーキテクチャ図。

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

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

Note

MongoDB や Rabbit MQ などのステートフル コンテナーを、運用環境用の永続ストレージなしで実行することはお勧めしません。 ここでは、わかりやすさのためにこれらを使用しますが、Azure CosmosDB や 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
    

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

    deployment.apps/mongodb created
    service/mongodb created
    deployment.apps/rabbitmq created
    service/rabbitmq created
    deployment.apps/order-service created
    service/order-service created
    deployment.apps/makeline-service created
    service/makeline-service created
    deployment.apps/product-service created
    service/product-service created
    deployment.apps/store-front created
    service/store-front created
    deployment.apps/store-admin created
    service/store-admin created
    deployment.apps/virtual-customer created
    deployment.apps/virtual-worker created
    

OpenAI を展開する

Azure OpenAI または OpenAI のいずれかを使用し、AKS 上でアプリケーションを実行できます。

  1. Azure portal で Azure OpenAI インスタンスを作成します。
  2. 作成した Azure OpenAI インスタンスに移動します。
  3. [概要] ブレードから、Azure AI Foundry ポータルに移動します。
  4. gpt-4o-mini 基本モデルを使用して、新しいチャット展開を作成します。

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

AI サービスを展開する

この段階でアプリケーションが展開されているので、OpenAI を使用する Python ベースのマイクロサービスを展開すれば、ストアのカタログに追加される新しい製品の説明を自動的に生成させることができます。

  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:latest
              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. Azure AI Foundry から Azure OpenAI デプロイ名を取得し、AZURE_OPENAI_DEPLOYMENT_NAME値を入力します。

  4. Azure portal から、リソースの左ブレードにある [キーとエンドポイント] を選択して、Azure OpenAI エンドポイントと Azure OpenAI API キーを取得します。 適宜、YAML の 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

API キーなどの機密情報を Kubernetes マニフェスト ファイルに直接追加することは安全ではなく、また誤ってコード リポジトリにコミットされる可能性もあります。 ここでは、わかりやすくするために追加しました。 運用環境ワークロード向けには、代わりにマネージド ID を使って Azure OpenAI サービスの認証を受けるか、Azure Key Vault にシークレットを格納します。

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

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

    kubectl get pods
    

    次の手順に進む前に、すべてのポッドが "実行中" であることを確認します。

    NAME                                READY   STATUS    RESTARTS   AGE
    makeline-service-7db94dc7d4-8g28l   1/1     Running   0          99s
    mongodb-78f6d95f8-nptbz             1/1     Running   0          99s
    order-service-55cbd784bb-6bmfb      1/1     Running   0          99s
    product-service-6bf4d65f74-7cbvk    1/1     Running   0          99s
    rabbitmq-9855984f9-94nlm            1/1     Running   0          99s
    store-admin-7f7d768c48-9hn8l        1/1     Running   0          99s
    store-front-6786c64d97-xq5s9        1/1     Running   0          99s
    virtual-customer-79498f8667-xzsb7   1/1     Running   0          99s
    virtual-worker-6d77fff4b5-7g7rj     1/1     Running   0          99s
    
  2. kubectl get service コマンドを使用して、ストア管理者 Web アプリケーションとネットショップ Web アプリケーションの IP を取得します。

    kubectl get service store-admin
    

    このアプリケーションは、Kubernetes サービスによってプロビジョニングされたパブリック ロード バランサーを介して、ストア管理者サイトをインターネットに公開しています。 このプロセスが完了するまでに数分かかることがあります。 サービスが起動して IP アドレスが表示されるまでの初期には、外部 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
    

    `store-front`` という名前のサービスについても同じ手順を繰り返します。

  3. Web ブラウザーを開き、サービスの外部 IP アドレスを参照します。 ここで示す例では、40.64.86.161 を開き、ブラウザーにストア管理者を表示します。 ネットショップについても同じ手順を繰り返します。

  4. ストア管理者で製品タブを選択し、次に [製品の追加] を選択します。

  5. `ai-service`` が正常に実行されている場合は、説明フィールドの横に [OpenAI に質問] ボタンが表示されるはずです。 名前、価格、キーワードを入力し、[OpenAI に質問]>[製品の保存] の順に選択して、製品の説明を生成します。

    OpenAI を使って製品の説明を生成する方法のスクリーンショット。

  6. これで、作成した新しい製品が、販売者が使うストア管理者に表示されます。 この画像では、犬のスマート カラーが追加されているのが確認できます。

    ストア管理者ページに新しい製品を表示しているスクリーンショット。

  7. また、購入者が使うネットショップにも、作成した新製品が表示されます。 この画像では、犬のスマート カラーが追加されているのが確認できます。 kubectl get service コマンドを使用しネットショップの IP アドレスを取得するのを、忘れないでください。

    ネットショップのページに新製品が表示されているスクリーンショット。

次のステップ

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

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