クイックスタート: Azure Kubernetes Service (AKS) または Arc 対応 Kubernetes 用の Dapr クラスター拡張機能を使用してアプリケーションをデプロイする
このクイックスタートでは、AKS または Arc 対応 Kubernetes クラスターで Dapr クラスター拡張機能を使用します。 hello world
の例をデプロイします。これは、メッセージを生成する Python アプリケーションと、メッセージを使用して保持する Node.js アプリケーションで構成されます。
前提条件
- Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、無料のアカウントを作成できます。
- Azure CLI または Azure PowerShell がインストールされている。
- 次のような AKS クラスター:
- ワークロード ID が有効
- マネージド ID が同じサブスクリプションに作成されている
- Kubernetes サービス アカウント
- フェデレーション ID 資格情報
- AKS クラスターにインストールされた Dapr クラスター拡張機能
- kubectl がローカルにインストールされていること。
リポジトリの複製
git clone
コマンドを使用して、Dapr quickstarts リポジトリをクローンします。git clone https://github.com/Azure-Samples/dapr-aks-extension-quickstart.git
dapr-aks-extension-quickstart
ディレクトリに変更します。
Redis ストアを作成して構成する
Azure portal を開いて、Azure Cache for Redis の作成フローを開始します。
- 「オープンソースの Redis Cache を作成する」のクイックスタートの手順に従って、推奨される情報を入力します。
- [作成] を選択して、Redis インスタンスのデプロイを開始します。
リソース情報を確認する
- Redis リソースがデプロイされたら、その概要ページに移動します。
- 次の値を書き留めておきます。
- キャッシュの概要ページの [Essentials] セクションにあるホスト名。 ホスト名の形式は次のようになります:
xxxxxx.redis.cache.windows.net
。 - キャッシュの [詳細設定] ブレードにある SSL ポート。 既定値は
6380
です。
- キャッシュの概要ページの [Essentials] セクションにあるホスト名。 ホスト名の形式は次のようになります:
- [認証] ブレードに移動し、リソースで Microsoft Entra 認証が有効になっていることを確認します。
マネージド ID の追加
[認証] ブレードで、前提条件として作成したマネージド ID の名前を、[Enable Microsoft Entra Authentication]\(Microsoft Entra 認証を有効にする\) チェックボックスの下のフィールドに入力します。
マネージド ID が Redis ユーザー割り当てデータ所有者アクセス ポリシーのアクセス許可として追加されていることを確認します。
パブリック ネットワーク アクセスを有効にする
このシナリオでは、Redis Cache は公衆ネットワーク アクセスを使用します。 このクイック スタートが完了したらリソースをクリーンアップしてください。
- [プライベート エンドポイント] ブレードに移動します。
- 上部のメニューから [パブリック ネットワーク アクセスを有効にする] をクリックします。
Dapr コンポーネントを構成する
redis.yaml
では、コンポーネントは、AKS クラスターで有効になっているワークロード ID を使用して Entra ID 認証を使用するように構成されています。 アクセス キーは必要ありません。
- name: useEntraID
value: "true"
- name: enableTLS
value: true
好みのコード エディターで、サンプルの
deploy
ディレクトリに移動し、redis.yaml
を開きます。redisHost
の場合は、プレースホルダーの<REDIS_HOST>:<REDIS_PORT>
値を、Azure portal から以前に保存した Redis Cache のホスト名と SSL ポートに置き換えます。- name: redisHost value: <your-cache-name>.redis.cache.windows.net:6380
構成を適用する
kubectl apply
コマンドを使用してredis.yaml
ファイルを適用します。kubectl apply -f ./deploy/redis.yaml
kubectl get components.redis
コマンドを使用して、状態ストアが正常に構成されたことを確認します。kubectl get components.redis -o yaml
想定される出力
component.dapr.io/statestore created
Dapr サイドカーを使用して Node.js アプリをデプロイする
Node.js アプリを構成する
node.yaml
では、ポッド スペックにはワークロード ID を使用するために追加されたラベルがあります。
labels:
app: node
azure.workload.identity/use: "true"
deploy
ディレクトリに移動してnode.yaml
を開きます。serviceAccountName
のプレースホルダーの<SERVICE_ACCOUNT_NAME>
値を、作成したサービス アカウント名に置き換えます。- この値は、フェデレーション ID 資格情報の作成に使用したのと同じサービス アカウントにします。
構成を適用する
kubectl apply
コマンドを使用して、クラスターに Node.js アプリのデプロイを適用します。kubectl apply -f ./deploy/node.yaml
Kubernetes デプロイは非同期であるため、次の手順に進む前に、次のコマンドを使用してデプロイが完了していることを確認します。
kubectl rollout status deploy/nodeapp
kubectl get svc
コマンドを使用して、サービスにアクセスします。kubectl get svc nodeapp
出力内の
EXTERNAL-IP
をメモします。
Node.js サービスを確認する
curl
を使用して、EXTERNAL-IP
でサービスを呼び出します。curl $EXTERNAL_IP/ports
出力例
{"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"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 を使用するために追加されたラベルがあります。
labels:
app: node
azure.workload.identity/use: "true"
deploy
ディレクトリに移動してpython.yaml
を開きます。serviceAccountName
のプレースホルダーの<SERVICE_ACCOUNT_NAME>
値を、作成したサービス アカウント名に置き換えます。- この値は、フェデレーション ID 資格情報の作成に使用したのと同じサービス アカウントにします。
構成を適用する
kubectl apply
コマンドを使用して、Python アプリを Kubernetes クラスターにデプロイします。kubectl apply -f ./deploy/python.yaml
Kubernetes デプロイは非同期であるため、次の手順に進む前に、次のコマンドを使用してデプロイが完了していることを確認します。
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 state
curl
を使用して、Node.js アプリの命令エンドポイントを呼び出して、最新の命令を取得します。curl $EXTERNAL_IP/order
応答に最新の JSON 出力が表示されます。
リソースをクリーンアップする
このクイックスタートのリソースを今後使用する予定がない場合は、リソース グループを削除することで、関連付けられているすべてのリソースを削除できます。
az group delete コマンドを使用して、リソース グループ、クラスター、名前空間、すべての関連リソースを削除します。
az group delete --name MyResourceGroup
次のステップ
Azure Kubernetes Service