この記事では、Azure OpenAI または OpenAI を使用するアプリケーションを AKS にデプロイする方法について説明します。 OpenAI を使うと、コンテンツ生成、要約、セマンティック検索、自然言語によるコード生成などのさまざまな AI モデルを、特定のタスクに合わせて導入することができます。 まず、Azure サブスクリプションに AKS クラスターをデプロイします。 その後、OpenAI サービスとサンプル アプリケーションを展開します。
このサンプルのクラウド ネイティブ アプリケーションは、現実的な実装を代表しているものです。 次のような複数の言語とフレームワークで記述されたアプリケーションが、このマルチコンテナー アプリケーションを構成しています。
- Golang と Gin
- Rust と Actix-Web
- JavaScript と Vue.js および Fastify
- FastAPI を使用したPython
これらのアプリケーションには、顧客とストア管理者向けのフロント エンド、RabbitMQ メッセージ キューと MongoDB データベースにデータを送信するための REST API、トラフィックをシミュレートするコンソール アプリが用意されています。
Note
MongoDB や Rabbit MQ などのステートフル コンテナーを、運用環境用の永続ストレージなしで実行することはお勧めしません。 ここではわかりやすくするために使用しますが、Azure CosmosDB や Azure Service Bus などのマネージド サービスを使用することをお勧めします。
サンプル アプリケーションのGitHubコードベースにアクセスするには、AKS ストア デモを参照してください。
開始する前に
- アクティブなサブスクリプションを持つAzure アカウントが必要です。 お持ちでない場合は、無料のアカウントを作成してください。
- このデモでは、Azure OpenAI サービスまたは OpenAI サービスを使用できます。
- Azure OpenAI Serviceを使用する予定の場合は、Azure サブスクリプションでの利用を有効にするためにAzure OpenAI Serviceのアクセス権をリクエストするフォームを提出する必要があります。
- OpenAI を使う予定の場合は、OpenAI Web サイトでサインアップします。
前提条件
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 --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 という名前のクラスターを作成します。
コマンドを使用して、AKS クラスターを作成します。
az aks create --resource-group myResourceGroup --name myAKSCluster --generate-ssh-keys数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。
クラスターに接続する
Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使用します。 Azure Cloud Shellを使用する場合、kubectl は既にインストールされています。
コマンドを使用して をローカルにインストールします。
az aks install-cliNote
Linux ベースのシステムで管理者特権のアクセス許可が必要な場合は、 コマンドを使用できます。
コマンドを使用して、Kubernetes クラスターに接続するように を構成します。
このコマンドは、次の操作を実行します。
- 資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。
- (Kubernetes 構成ファイルの既定の場所) を使用します。 Kubernetes 構成ファイルに対して別の場所を指定するには、--file 引数を使用します。
az aks get-credentials --resource-group myResourceGroup --name myAKSClusterコマンドを使用して、ご利用のクラスターへの接続を確認します。 このコマンドを実行すると、クラスター ノードの一覧が返されます。
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 ストア アプリケーション マニフェストには、次の Kubernetes デプロイとサービスが含まれています。
- 製品サービス: 製品情報が表示されます。
- 注文サービス: 注文を行います。
- Makeline サービス: キューからの注文を処理し、それらの注文を完了します。
- ネットショップ: 顧客が製品を見て注文するための Web アプリケーション。
- ストア管理者: ストアの従業員がキュー内の注文を確認し、製品情報を管理するための Web アプリケーション。
- 仮想顧客: スケジュールに基づいて注文の作成をシミュレートします。
- 仮想ワーカー: スケジュールに基づいて注文の完了をシミュレートします。
- Mongo DB: 永続化されたデータのインスタンスNoSQL。
- Rabbit MQ: 注文キューのメッセージ キュー。
Note
MongoDB や Rabbit MQ などのステートフル コンテナーを、運用環境用の永続ストレージなしで実行することはお勧めしません。 ここではわかりやすくするために使用しますが、Azure CosmosDB や Azure Service Bus などのマネージド サービスを使用することをお勧めします。
アプリケーションの YAML マニフェストを確認します。
コマンドを使用してアプリケーションをデプロイし、ご利用の 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 を展開する
OpenAI または OpenAI Azure使用して、AKS でアプリケーションを実行できます。
- Azure OpenAI
- OpenAI
- Azure ポータルで、Azure OpenAI インスタンスを作成します。
- 作成した Azure OpenAI インスタンスに移動します。
- [概要] が表示される画面から Microsoft Foundry ポータルに移動します。
- gpt-4o-mini 基本モデルを使用して、新しいチャット展開を作成します。
Azure OpenAI でデプロイを作成する方法について詳しくは、「Get started generating text using Azure OpenAI Service」を参照してください。
AI サービスを展開する
アプリケーションがデプロイされたので、OpenAI を使用してストアのカタログに追加される新しい製品の説明を自動的に生成するPythonベースのマイクロサービスをデプロイできます。
- Azure OpenAI
- OpenAI
という名前のファイルを作成し、そこに次のマニフェストをコピーします。
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環境変数を に設定します。
Foundry から Azure OpenAI デプロイ名を取得し、
AZURE_OPENAI_DEPLOYMENT_NAME値を入力します。リソースの左側のブレードで Keys と Endpoint を選択して、Azure ポータルから Azure OpenAI エンドポイントと Azure OpenAI API キーを取得します。 適宜、YAML の と を更新します。
コマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。
kubectl apply -f ai-service.yaml次の出力例は、正常に作成されたデプロイおよびサービスを示しています。
deployment.apps/ai-service created service/ai-service created
Note
API キーなどの機密情報を Kubernetes マニフェスト ファイルに直接追加することは安全ではなく、また誤ってコード リポジトリにコミットされる可能性もあります。 ここでは、わかりやすくするために追加しました。 運用ワークロードの場合は、代わりに Managed Identity を使用して OpenAI サービスAzure認証するか、シークレットを Azure Key Vault に格納します。
アプリケーションをテストする
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コマンドを使用して、ストア管理者 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`` という名前のサービスについても同じ手順を繰り返します。
Web ブラウザーを開き、サービスの外部 IP アドレスを参照します。 ここで示す例では、40.64.86.161 を開き、ブラウザーにストア管理者を表示します。 ネットショップについても同じ手順を繰り返します。
ストア管理者で製品タブを選択し、次に [製品の追加] を選択します。
`ai-service`` が正常に実行されている場合は、説明フィールドの横に [OpenAI に質問] ボタンが表示されるはずです。 名前、価格、キーワードを入力し、[OpenAI に質問][製品の保存] の順に選択して、製品の説明を生成します。
OpenAI を使って製品の説明を生成する方法のスクリーンショット。
これで、作成した新しい製品が、販売者が使うストア管理者に表示されます。 この画像では、犬のスマート カラーが追加されているのが確認できます。
ストア管理者ページに新しい製品を表示しているスクリーンショット。
また、購入者が使うネットショップにも、作成した新製品が表示されます。 この画像では、犬のスマート カラーが追加されているのが確認できます。 コマンドを使用しネットショップの IP アドレスを取得するのを、忘れないでください。
ネットショップのページに新製品が表示されているスクリーンショット。
次のステップ
AKS アプリケーションに OpenAI 機能を追加したら、Azure Kubernetes Service (AKS) から Azure OpenAI に
生成 AI のユース ケースの詳細情報については、次のリソースを参照してください。