このクイック スタートでは、AKS または Arc 対応 Kubernetes クラスターで Dapr 拡張機能 を使用します。
hello world の例をデプロイします。これは、メッセージを生成する Python アプリケーションと、メッセージを使用して保持する Node.js アプリケーションで構成されます。
前提条件
- Azure サブスクリプション。 お持ちでない場合は、 無料アカウントを作成できます。
- Azure CLI がインストールされていること
- AKS クラスターの内容:
- ワークロード ID が有効
- マネージド ID が同じサブスクリプションに作成されている
- Kubernetes サービス アカウント
- フェデレーションアイデンティティ認証情報
- AKS クラスターにインストールされている Dapr 拡張機能
- ローカルにインストールされた kubectl
リポジトリの複製
-
git clone https://github.com/Azure-Samples/dapr-aks-extension-quickstart.git dapr-aks-extension-quickstartディレクトリに変更します。cd dapr-aks-extension-quickstart
Redis ストアを作成して構成する
Azure ポータルを開き、Azure Managed Redis 作成フローを開始します。
Azure Managed Redis インスタンスの作成に関するクイックスタートに従って、推奨される情報を入力します。
[作成] を選択して、Redis インスタンスのデプロイを開始します。
リソース情報を確認する
Redis リソースがデプロイされたら、その概要ページに移動します。
次の点に注意してください。
- リソースの概要ページの [要点 ] セクションにあるホスト名。 ホスト名の形式は次のようになります:
<your-cache-name>.<region>.redis.azure.net。 -
設定>詳細設定にある SSL ポート。 既定値は
10000です。
- リソースの概要ページの [要点 ] セクションにあるホスト名。 ホスト名の形式は次のようになります:
ターミナルで、既定のデータベースでアクセス キー認証を有効にします。
az redisenterprise database update \ --cluster-name <REDIS_NAME> \ --resource-group <RESOURCE_GROUP> \ --access-keys-auth Enabled既定のデータベースの主キーを取得し、環境変数に保存します。
export REDIS_PRIMARY_KEY=$(az redisenterprise database list-keys \ --cluster-name <REDIS_NAME> \ --resource-group <RESOURCE_GROUP> \ --query primaryKey \ -o tsv)
パブリック ネットワーク アクセスを有効にする
このシナリオでは、Azure Managed Redis インスタンスはパブリック ネットワーク アクセスを使用します。 このクイック スタートが完了したら、 必ずリソースをクリーンアップ してください。
リソース メニューの [設定] で、[ネットワーク形成] を選びます。
[パブリック ネットワーク アクセス] を [有効] に設定します。
Dapr コンポーネントを構成する
redis.yaml ファイルでは、TLS でアクセス キー認証を使用するようにコンポーネントを構成します。
- name: redisPassword
secretKeyRef:
name: redis-secret
key: redisPassword
- name: useEntraID
value: "false"
- name: enableTLS
value: true
好みのコード エディターで、サンプル リポジトリの デプロイ ディレクトリに移動し、 redis.yaml を開きます。
redisHostの場合は、プレースホルダーの<REDIS_HOST>:10000値を、Azure ポータルから前に保存した Azure Managed Redis ホスト名に置き換えます。- name: redisHost value: <your-cache-name>.<region>.redis.azure.net:10000redisPasswordによって使用される Kubernetes シークレットを作成します。kubectl create secret generic redis-secret \ --from-literal=redisPassword="$REDIS_PRIMARY_KEY"
構成を適用する
コマンドを使用して kubectl apply ファイルを適用します。
kubectl apply -f ./deploy/redis.yaml
想定される出力
component.dapr.io/statestore created
Dapr サイドカーを使用して Node.js アプリをデプロイする
Node.js アプリを構成する
deployディレクトリに移動し、workload-identity.yaml を開きます。<MANAGED_IDENTITY_CLIENT_ID>を、作成したユーザー割り当てマネージド ID のクライアント ID に置き換えます。アプリ マニフェストをデプロイする前に、サービス アカウント マニフェストを適用します。
kubectl apply -f ./deploy/workload-identity.yaml
node.yaml では、ポッド スペックはワークロード ID ラベルと共有workload-saサービス アカウントを使用します。
labels:
app: node
azure.workload.identity/use: "true"
構成を適用する
kubectl applyコマンドを使用して、クラスターに Node.js アプリのデプロイを適用します。kubectl apply -f ./deploy/node.yamlKubernetes デプロイは非同期であるため、次の手順に進む前に、次のコマンドを使用してデプロイが完了していることを確認します。
kubectl rollout status deploy/nodeappkubectl get svcコマンドを使用して、サービスにアクセスします。kubectl get svc nodeapp出力内の
EXTERNAL-IPをメモし、環境変数として設定します。export EXTERNAL_IP=<EXTERNAL-IP>
Node.js サービスを確認する
curlを使用して、EXTERNAL-IPでサービスを呼び出します。curl $EXTERNAL_IP/ports出力例
{"DAPR_HTTP_ENDPOINT":"http://localhost:3500","DAPR_GRPC_ENDPOINT":"http://localhost:50001"}アプリケーションに命令を送信します。
curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder命令を確認します。
curl $EXTERNAL_IP/order想定される出力
{ "orderId": "42" }
Dapr サイドカーを使用して Python アプリをデプロイする
Python アプリを構成する
python.yaml では、ポッド スペックはワークロード ID ラベルと共有workload-saサービス アカウントを使用します。
labels:
app: python
azure.workload.identity/use: "true"
構成を適用する
kubectl applyコマンドを使用して、Python アプリを Kubernetes クラスターにデプロイします。kubectl apply -f ./deploy/python.yamlKubernetes デプロイは非同期であるため、次の手順に進む前に、次のコマンドを使用してデプロイが完了していることを確認します。
kubectl rollout status deploy/pythonapp
メッセージを監視し、永続化を確認する
Node.js と Python の両方のアプリケーションがデプロイされたので、メッセージを見ることができます。
kubectl logsコマンドを使用して、Node.js アプリのログを取得します。kubectl logs --selector=app=node -c node --tail=-1想定される出力
Got a new order! Order ID: 1 Successfully persisted state Got a new order! Order ID: 2 Successfully persisted state Got a new order! Order ID: 3 Successfully persisted statecurlを使用して、Node.js アプリの命令エンドポイントを呼び出して、最新の命令を取得します。curl $EXTERNAL_IP/order応答に最新の JSON 出力が表示されます。
リソースをクリーンアップする
このクイック スタートのリソースを使用する予定がなくなった場合は、 az group delete コマンドを使用して、リソース グループ、クラスター、名前空間、およびすべての関連リソースを削除できます。
az group delete --name <your-resource-group>