はじめに
こんにちは、ACS事業部の吉川です。
ふとしたことから、Azure CLIに以下のようなコマンドが増えていることに気が付きました。
$ az aks --help ~中略~ copilot : Start a chat with the Azure Kubernetes Service expert. API keys for OpenAI or Azure are required. ~後略~
何ができるコマンドなのでしょうか。ちょっと試してみましょう。
aks-preview拡張機能をインストールする
az aks copilot
は aks-previewという拡張機能に追加されたコマンドです。
利用するためには以下のようにインストールします。
az extension add --name aks-preview
過去にインストール済みの方は以下コマンドで更新しましょう。
az extension update --name aks-preview
今回インストールされたバージョンは、0.5.156
でした。
az extension list
{ "experimental": false, "extensionType": "whl", "name": "aks-preview", "path": "/home/azureuser/.azure/cliextensions/aks-preview", "preview": true, "version": "0.5.156" }
OpenAI用の環境変数を設定する
使い方を確認するためにヘルプを確認します。
$ az aks copilot --help This command is from the following extension: aks-preview Command az aks copilot : Start a chat with the Azure Kubernetes Service expert. API keys for OpenAI or Azure are required. This command initiates a chat assistant with expertise in Azure Kubernetes Service, offering guidance on troubleshooting issues using az commands. You have two options, OpenAI option, sign in to https://www.openai.com/, navigate to the API key section in your account dashboard (https://platform.openai.com/signup), follow the instructions to create a new API key, and choose models from https://platform.openai.com/docs/models/. export OPENAI_API_KEY=xxx, export OPENAI_API_MODEL=gpt-3.5-turbo Azure OpenAI option, after creating a new Cognitive Services resource (https://azure.microsoft.com/en- us/services/cognitive-services/), you can find the OPENAI_API_KEY and OPENAI_API_BASE in the "Keys and Endpoint" section of the resource's management page on the Azure portal (https://portal.azure.com/). OPENAI_API_DEPLOYMENT can be found in the "Model deployments" section, and OPENAI_API_TYPE should be "azure" for this option. export OPENAI_API_KEY=xxx, export OPENAI_API_BASE=https://xxxinstance.openai.azure.com/, export OPENAI_API_DEPLOYMENT=gpt-4-32k-0314, export OPENAI_API_TYPE=azure. ~以下略~
見たところ、OpenAI と Azure OpenAI Service のどちらも利用可能で、対応した環境変数を設定してあげればよさそうですね。
本記事のタイトルどおり、今回はAzure OpenAI Serviceを利用しました。以下のように設定します。
export OPENAI_API_KEY=<Azure OpenAIのAPIキー> export OPENAI_API_BASE=<Azure OpenAIのエンドポイントURL> export OPENAI_API_DEPLOYMENT=<モデルのデプロイメント名> export OPENAI_API_TYPE=azure
もちろんですが、Azure CLIを実行する端末からのアクセスを許可するよう、Azure OpenAI Serviceのネットワーク設定も必要です。先日投稿した以下記事を参考にしてください。
いざ実行
拡張機能をインストールし環境変数を設定したら、もう使える状態です。
さっそく以下コマンドを実行してみましょう。
az aks copilot
すると、以下のように対話型のプロンプトが表示されます。
Please enter your request below. For example: Create a AKS cluster Prompt:
例文通り、Create a AKS cluster
と問い合わせしてみましょう。
Prompt: Create a AKS cluster To create an AKS cluster using the `az` command, you can use the following Bash script: ```bash #!/bin/bash # Set variables resourceGroup="<resource_group_name>" clusterName="<cluster_name>" location="<location>" # Create resource group az group create --name $resourceGroup --location $location # Create AKS cluster az aks create --resource-group $resourceGroup --name $clusterName --location $location --node-count 3 --node-vm-size Standard_DS2_v2 --generate-ssh-keys ``` In the script above, you need to replace `<resource_group_name>`, `<cluster_name>`, and `<location>` with your desired values. The `--node-count` specifies the number of nodes in the cluster, and `--node-vm-size` specifies the size of each node. The `--generate-ssh-keys` flag generates SSH keys for the cluster. To execute the script, save it to a file (e.g., `create_cluster.sh`), make it executable (`chmod +x create_cluster.sh`), and run it (`./create_cluster.sh`). Menu: [p: re-Prompt, r: Run, q: Quit]
AKSクラスター作成用のBashスクリプトを提示してくれました。
なお、今回は gpt-35-turbo のモデルを利用しています。利用するモデルによって回答内容が変わる可能性はあるので、その点はご留意ください。
回答のあとに Menu:
と表示され、再度入力を待ち受ける状態になりました。r: Run
という選択肢が気になるので、r
を入力してみます。
Menu: [p: re-Prompt, r: Run, q: Quit]<"r" を入力> #!/bin/bash # Set variables resourceGroup="<resource_group_name>" clusterName="<cluster_name>" location="<location>" # Create resource group az group create --name $resourceGroup --location $location # Create AKS cluster az aks create --resource-group $resourceGroup --name $clusterName --location $location --node-count 3 --node-vm-size Standard_DS2_v2 --generate-ssh-keys Hit `c` to cancel, `r` to run the script:
回答内にあったBashスクリプトをそのまま実行してくれるみたいです。再度確認のプロンプトが表示されるので、もう一度 r
を入力してみます。
Hit `c` to cancel, `r` to run the script: <"r" を入力> (InvalidResourceGroup) The provided resource group name '<resource_group_name>' has these invalid characters: '<>'. The name can only be a letter, digit, '-', '.', '(', ')' or '_'. For more details, visit https://aka.ms/ResourceGroupNamingRestrictions . Code: InvalidResourceGroup Message: The provided resource group name '<resource_group_name>' has these invalid characters: '<>'. The name can only be a letter, digit, '-', '.', '(', ')' or '_'. For more details, visit https://aka.ms/ResourceGroupNamingRestrictions . The behavior of this command has been altered by the following extension: aks-preview --name cannot exceed 63 characters and can only contain letters, numbers, or dashes (-).
エラーとなってしまいました。<resource_group_name>
という名前でそのままリソースグループを作成しようとしたため、命名規則に引っ掛かっています。リソースグループ名の入力を求めるほど親切ではないようですね。
では、プロンプトでもう少し丁寧に指定してみましょう。
Prompt: Create AKS cluster. Resource Group is rg-sample. Region is japaneast. Cluster name is aks-sample. Sure! Here's an updated version of the script to create an AKS cluster with the provided details: ```bash #!/bin/bash # Set variables resourceGroup="rg-sample" clusterName="aks-sample" location="japaneast" # Create resource group az group create --name $resourceGroup --location $location # Create AKS cluster az aks create --resource-group $resourceGroup --name $clusterName --location $location --node-count 3 --node-vm-size Standard_DS2_v2 --generate-ssh-keys ``` In the script above, the resource group name is set to "rg-sample", the cluster name is set to "aks-sample", and the location is set to "japaneast". The cluster will have 3 nodes, and each node will use the "Standard_DS2_v2" VM size. SSH keys will be generated for the cluster. To execute the script, save it to a file (e.g., `create_cluster.sh`), make it executable (`chmod +x create_cluster.sh`), and run it (`./create_cluster.sh`).
今度はちゃんと変数に値が入ったスクリプトを提示してくれました。
先ほどと同様 r
を入力し実行してみます。
Menu: [p: re-Prompt, r: Run, q: Quit]<"r" を入力> #!/bin/bash # Set variables resourceGroup="rg-sample" clusterName="aks-sample" location="japaneast" # Create resource group az group create --name $resourceGroup --location $location # Create AKS cluster az aks create --resource-group $resourceGroup --name $clusterName --location $location --node-count 3 --node-vm-size Standard_DS2_v2 --generate-ssh-keys Hit `c` to cancel, `r` to run the script:<"r" を入力> ~以降Azure CLIの出力が続く~
今度はコマンドが正常に実行され、リソースが作成されました。
日本語で問い合わせてみる
OpenAIをバックエンドに利用しているのであれば、日本語で問い合わせても大丈夫な気がしますね。早速やってみましょう。
Please enter your request below. For example: Create a AKS cluster Prompt: AKSクラスターを作成したい 以下のBashスクリプトを使用して、Azure Kubernetes Service(AKS)クラスターを作成することができます。スクリプト内のコメン トには、各ステップの説明が含まれています。 ```bash #!/bin/bash # リソースグループの名前を指定します resourceGroupName="myResourceGroup" # AKSクラスターの名前を指定します clusterName="myAKSCluster" # リージョンを指定します location="japaneast" # リソースグループを作成します az group create --name $resourceGroupName --location $location # AKSクラスターを作成します az aks create --resource-group $resourceGroupName --name $clusterName --node-count 3 --generate-ssh-keys # AKSクラスターの認証情報を取得します az aks get-credentials --resource-group $resourceGroupName --name $clusterName # AKSクラスターの状態を確認します az aks show --resource-group $resourceGroupName --name $clusterName --output table ``` このスクリプトでは、`az group create`コマンドを使用してリソースグループを作成し、`az aks create`コマンドを使用してAKSク ラスターを作成します。`--node-count`パラメーターを変更することで、クラスターのノード数を調整することができます。 また、`az aks get-credentials`コマンドを使用してAKSクラスターの認証情報を取得し、`az aks show`コマンドを使用してクラスターの状態を確認します。 スクリプトを実行する前に、Azure CLIがインストールされていることを確認してください。また、Azureにログインしていることも必要です。ログインしていない場合は、`az login`コマンドを実行してログインしてください。 スクリプトを実行すると、指定したリソースグループとAKSクラスターが作成され、クラスターの認証情報と状態が表示されます。 Menu: [p: re-Prompt, r: Run, q: Quit]
日本語で入力すると回答も日本語で返してくれます。日本語で問い合わせたからか、リージョンも東日本が指定されているのが面白いですね。
いろいろ試してみる
AKSクラスターの状態確認を依頼する
Prompt: AKSクラスター上の起動していないPodを確認してほしい 以下のBashスクリプトを使用して、AKSクラスター上の起動していないPodを確認できます。 ```bash #!/bin/bash # AKSクラスターのリソースグループ名とクラスター名を指定してください resource_group="<リソースグループ名>" cluster_name="<クラスター名>" # AKSクラスターのコンテキストを設定します az aks get-credentials --resource-group $resource_group --name $cluster_name # 起動していないPodを確認します kubectl get pods --field-selector=status.phase!=Running ``` 上記のスクリプトでは、`resource_group`と`cluster_name`の変数にAKSクラスターのリソースグループ名とクラスター名を指定する 必要があります。これらの値を適切な値に置き換えてスクリプトを実行してください。 スクリプトの実行後、`kubectl get pods --field-selector=status.phase!=Running`コマンドが実行され、起動していないPodの一覧が表示されます。
確認用のコマンドを提示するのみで、直接的な確認はしてくれないようです。
この辺りはK8sGPTのほうが高機能なようですね。K8sGPTについては以下の記事で紹介しています。
マニフェストを出力する
Azure CLIのコマンドだけでなく、YAMLでのマニフェストファイルを作ってもらいましょう。
Prompt: nginxのPodをレプリカ数1で起動するDeploymentのマニフェストを書いてほしい Sure! Here's a Bash script that will create a Kubernetes Deployment manifest for running an nginx Pod with 1 replica: ```bash #!/bin/bash # Set the resource group and AKS cluster name resourceGroup="<resource-group-name>" aksClusterName="<aks-cluster-name>" # Set the deployment name and namespace deploymentName="nginx-deployment" namespace="default" # Set the image and port for the nginx container image="nginx:latest" port=80 # Create the Deployment manifest cat <<EOF > nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: $deploymentName namespace: $namespace spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: $image ports: - containerPort: $port EOF # Apply the Deployment manifest to the AKS cluster az aks get-credentials --resource-group $resourceGroup --name $aksClusterName --overwrite-existing kubectl apply -f nginx-deployment.yaml ``` In this script, you need to replace `<resource-group-name>` with the name of your Azure resource group, `<aks-cluster-name>` with the name of your AKS cluster, and any other values as needed. The script first sets the resource group and AKS cluster name variables. Then, it sets the deployment name, namespace, image, and port variables for the nginx container. Next, it uses a HEREDOC to create the Deployment manifest in a file called `nginx-deployment.yaml`. The manifest specifies the API version, kind, metadata, and spec for the Deployment. It sets the number of replicas to 1, selects the nginx Pods using the `app: nginx` label, and defines the nginx container with the specified image and port. Finally, the script uses the `az aks get-credentials` command to authenticate with the AKS cluster, and then applies the Deployment manifest to the cluster using the `kubectl apply` command. You can run this script in a Bash environment to create the nginx Deployment in your AKS cluster. Menu: [p: re-Prompt, r: Run, q: Quit]
YAMLを出力するBashスクリプトが提示されました。
プロンプトからそのまま実行させる都合上、Bashスクリプトの形式で出力するようシステムプロンプトで制限されているようです。
AKSと関係ない話をしてみる
Prompt: WHAT DO YOU GET IF YOU MULTIPLY SIX BY NINE The product of multiplying six by nine is fifty-four (54). However, it seems like you are referencing a joke from "The Hitchhiker's Guide to the Galaxy" by Douglas Adams, where the answer to the ultimate question of life, the universe, and everything is humorously stated as 42. If you are referring to this joke, please let me know how I can assist you with Azure Kubernetes Service (AKS) automation. Menu: [p: re-Prompt, q: Quit]
AKSに関係ないことを聞いても一応答えてはくれました。
おわりに
Azure CLIに追加された aks copilot
を試用してみました。
現時点では、AKSを操作するためのスクリプトを、チャットベースの問い合わせで提示してくれる というもののようです。
詳しい内部実装については以下のプルリクエストで追加されたファイルを確認するとよいでしょう。
今年のMicrosoft Buildでチラッと触れられていたAKS Copilotとは別物なのかな?という気がしますが、AKSに関するコマンドにはかなりの数のオプションが存在するため、チャットベースで希望の操作ができるというだけでも便利に使えそうです。
【PR】
私達ACS事業部はAzure・AKSなどのクラウドネイティブ技術を活用した内製化のご支援をしております。
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。