Azure Kubernetes Service (AKS) で OpenAI を使うアプリケーションをデプロイする
[アーティクル] 2024/08/02
8 人の共同作成者
フィードバック
この記事の内容
開始する前に
前提条件
リソース グループを作成する
AKS クラスターを作成する
クラスターに接続する
アプリケーションの配置
OpenAI をデプロイする
AI サービスをデプロイする
アプリケーションをテストする
次のステップ
さらに 6 個を表示
この記事では、AKS で Azure OpenAI または OpenAI を使うアプリケーションをデプロイする方法について学習します。 OpenAI を使うと、特定のタスクに合わせて、コンテンツ生成、概要、セマンティック検索、自然言語などのさまざまな AI モデルをコード生成に適応させることができます。 まず、Azure サブスクリプションに AKS クラスターをデプロイします。 その後、OpenAI サービスとサンプル アプリケーションをデプロイします。
サンプル クラウド ネイティブ アプリケーションは、実際の実装を代表しています。 マルチコンテナー アプリケーションは、次のような複数の言語とフレームワークで記述されたアプリケーションで構成されています。
Golang と Gin
Rust と Actix-Web
JavaScript と Vue.js および Fastify
Python と FastAPI
これらのアプリケーションには、顧客とストア管理者向けのフロント エンド、RabbitMQ メッセージ キューと MongoDB データベースにデータを送信するための REST API、トラフィックをシミュレートするコンソール アプリが用意されています。
注意
MongoDB や Rabbit MQ などのステートフル コンテナーを運用環境の永続ストレージなしで実行することはお勧めしません。 わかりやすくするためにここではこれらを使用しますが、Azure CosmosDB や Azure Service Bus などのマネージド サービスを使うことをお勧めします。
サンプル アプリケーションの GitHub コードベースにアクセスする場合は、「AKS Store Demo 」を参照してください。
アクティブなサブスクリプションを含む Azure アカウントが必要です。 お持ちでない場合は、無料のアカウントを作成してください 。
このデモでは、Azure OpenAI サービスまたは OpenAI サービスを使用できます。
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"
}
次の例では、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
は既にインストールされています。
az aks install-cli
コマンドを使用して kubectl
をローカルにインストールします。
az aks install-cli
注意
Linux ベースのシステムで管理者特権のアクセス許可が必要な場合は、sudo az aks install-cli
コマンドを使用できます。
az aks get-credentials
コマンドを使用して、Kubernetes クラスターに接続するように kubectl
を構成します。
このコマンドは、次の操作を実行します。
資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。
~/.kube/config
(Kubernetes 構成ファイル の既定の場所) を使用します。 Kubernetes 構成ファイルに対して別の場所を指定するには、--file 引数を使用します。
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
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
注意
プライベート クラスターの場合、パブリック IP アドレスを介してノードに接続しようとすると、ノードに到達できない可能性があります。 これを修正するには、接続元のクラスターと同じ VNET 内にエンドポイントを作成する必要があります。 手順に従って、プライベート AKS クラスターを作成 し、接続します。
AKS Store アプリケーション の場合、マニフェストには次の Kubernetes デプロイとサービスが含まれています。
製品サービス : 製品情報が表示されます。
注文サービス : 注文を行います。
Makeline サービス : キューの注文を処理し、注文を完了します。
ネットショップ : 顧客が製品を見て注文するための Web アプリケーション。
Store Admin : ストアの従業員がキュー内の注文を確認し、製品情報を管理するための Web アプリケーション。
仮想顧客 : スケジュールに基づいて注文の作成をシミュレートします。
仮想ワーカー : スケジュールに基づいて注文の完了をシミュレートします。
Mongo DB : 保持されているデータの NoSQL インスタンス。
Rabbit MQ : 注文キューのメッセージ キュー。
注意
MongoDB や Rabbit MQ などのステートフル コンテナーを運用環境の永続ストレージなしで実行することはお勧めしません。 わかりやすくするためにここではこれらを使用しますが、Azure CosmosDB や 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
次の出力例は、正常に作成されたデプロイおよびサービスを示しています。
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
Azure OpenAI または OpenAI を使って、AKS 上でアプリケーションを実行できます。
アプリケーションがデプロイされたので、OpenAI を使ってストアのカタログに追加される新しい製品の説明を自動的に生成する Python ベースのマイクロサービスをデプロイできます。
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
環境変数 USE_AZURE_OPENAI
を "True"
に設定します。
Azure OpenAI スタジオ から Azure OpenAI デプロイ名を取得し、AZURE_OPENAI_DEPLOYMENT_NAME
の値を入力します。
Azure portal から、リソースの左ブレードにある [キーとエンドポイント] を選択して、Azure OpenAI エンドポイントと Azure OpenAI API キーを取得します。 適宜、YAML の AZURE_OPENAI_ENDPOINT
と OPENAI_API_KEY
を更新します。
kubectl apply
コマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。
kubectl apply -f ai-service.yaml
次の出力例は、正常に作成されたデプロイおよびサービスを示しています。
deployment.apps/ai-service created
service/ai-service created
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: "False"
- name: OPENAI_API_KEY
value: ""
- name: OPENAI_ORG_ID
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
環境変数 USE_AZURE_OPENAI
を "False"
に設定します。
環境変数 OPENAI_API_KEY
に最後の手順 で生成した OpenAI キーを貼り付けて設定します。
OpenAI の組織 ID を見つけて 値をコピーし、OPENAI_ORG_ID
環境変数を設定します。
kubectl apply
コマンドを使用してアプリケーションをデプロイし、ご利用の YAML マニフェストの名前を指定します。
kubectl apply -f ai-service.yaml
次の出力例は、正常に作成されたデプロイおよびサービスを示しています。
deployment.apps/ai-service created
service/ai-service created
注意
API キーなどの機密情報を Kubernetes マニフェスト ファイルに直接追加することは安全ではなく、誤ってコード リポジトリにコミットされる可能性があります。 ここでは、わかりやすくするために追加しました。 運用環境ワークロードの場合は、代わりにマネージド ID を使って Azure OpenAI サービスの認証を受けるか、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
kubectl get service
コマンドを使用して、Store Admin Web アプリケーションとネットショップ Web アプリケーションの IP を取得します。
kubectl get service store-admin
このアプリケーションは、Kubernetes サービスによってプロビジョニングされたパブリック ロード バランサーを介して、Store Admin サイトをインターネットに公開しています。 このプロセスが完了するまでに数分かかることがあります。 サービスが起動して 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 を開き、ブラウザーに Store Admin を表示します。 ネットショップについても同じ手順を繰り返します。
Store Admin で製品タブをクリックし、[製品の追加] を選択します。
''ai-service'' が正常に実行されている場合は、説明フィールドの横に [OpenAI に聞く] ボタンが表示されるはずです。 名前、価格、キーワードを入力し、[OpenAI に聞く] >[製品の保存] を選択し、製品の説明を生成します。
これで、販売者が使う Store Admin に作成した新しい製品が表示されます。 この画像では、Jungle Monkey Chew Toy が追加されたことを確認できます。
購入者が使うネットショップにも、作成した新製品が表示されます。 この画像では、Jungle Monkey Chew Toy が追加されたことを確認できます。 必ず、kubectl get service
コマンドを使ってネットショップの IP アドレスを取得してください。
AKS アプリケーションに OpenAI 機能を追加したので、Azure Kubernetes Service (AKS) から Azure OpenAI へのアクセスをセキュリティで保護 できます。
生成 AI のユース ケースについて詳しくは、次のリソースを参照してください。