この記事では、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 アカウントが必要です。 お持ちでない場合は、無料のアカウントを作成してください。
- このデモでは、Azure OpenAI または OpenAI API を使用します。
- OpenAI Azure使用するには、Azure OpenAI リソースを作成し、モデルをデプロイするためのアクセス許可が必要です。 登録は、 制限付きアクセス モデルまたは変更されたセーフガードに対してのみ必要です。
- OpenAI API を使用するには、 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 コマンドを使用して、リソース グループを作成します。
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 は既にインストールされています。
kubectlコマンドを使用してaz aks install-cliをローカルにインストールします。az aks install-cliNote
Linux ベースのシステムで昇格されたアクセス許可が必要な場合は、
sudo az aks install-cliコマンドを使用します。kubectlコマンドを使用して、Kubernetes クラスターに接続するようにaz aks get-credentialsを構成します。このコマンドは、次の操作を実行します。
- 資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。
-
~/.kube/config(Kubernetes 構成ファイルの既定の場所) を使用します。 --file 引数を使用して、Kubernetes 構成ファイルの別の場所を指定します。
az aks get-credentials --resource-group myResourceGroup --name myAKSClusterkubectl 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などのマネージド サービスを使用します。
アプリケーションの YAML マニフェストを確認します。
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 を選択します。
- Azure ポータルで、Azure OpenAI インスタンスを作成します。
- Microsoft Foundry にサインインします。
- [New Foundry]\(新しい Foundry\) トグルをオフにし、[Foundry でビルドを維持する] で [すべてのリソースを表示] を選択します。
- 作成した Azure OpenAI リソースを選択し、[共有リソース] で [デプロイ] を選択します。
- モデルのデプロイ>基本モデルのデプロイを選択します。
- 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 キー。 |
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-serviceUSE_AZURE_OPENAI環境変数を"True"に設定します。Microsoft Foundry で、Azure OpenAI デプロイ名をコピーし、
AZURE_OPENAI_DEPLOYMENT_NAME値を設定します。Azure ポータルで、Azure OpenAI リソースの [キーとエンドポイント] を選択します。 エンドポイントと API キーをコピーし、
AZURE_OPENAI_ENDPOINTとOPENAI_API_KEYの値を設定します。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に格納します。
アプリケーションをテストする
kubectl get podsコマンドを使用して、デプロイされたポッドの状態を確認します。kubectl get pods続行する前に、すべてのポッドの状態が [実行中 ] であることを確認します。
kubectl get serviceコマンドを使用して、ストア管理者の外部 IP アドレスを取得します。kubectl get service store-adminKubernetes サービスは、パブリック ロード バランサーを介してストア管理者を公開します。 ロード バランサーでは、アドレスの割り当てに数分かかる場合があります。 アドレスが使用可能になるまで 、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 50mstore-frontサービスに対して前の手順を繰り返します。Web ブラウザーで、ストア管理者の外部 IP アドレスに移動します。この例では、アドレスは 40.64.86.161 です。
ストア管理者で、 製品>製品の追加を選択します。
ai-serviceが開始されると、説明フィールドの横に [ASK AI Assistant] ボタンが表示されます。 名前、価格、キーワードを入力し、[ ASK AI Assistant] を選択して製品の説明を生成し、[ 製品の保存] を選択します。ストア管理者に Dog Smart Collar が表示されていることを確認します。
ストア フロントの外部 IP アドレスに移動し、Dog Smart Collar が表示されていることを確認します。
次のステップ
AKS アプリケーションに OpenAI 機能を追加したら、Azure Kubernetes Service (AKS) から Azure OpenAI に
生成 AI のユース ケースの詳細情報については、次のリソースを参照してください。