クイック スタート: Azure Kubernetes Service (AKS) または Arc 対応 Kubernetes 用の Dapr 拡張機能を使用してアプリケーションをデプロイする

このクイック スタートでは、AKS または Arc 対応 Kubernetes クラスターで Dapr 拡張機能 を使用します。 hello world の例をデプロイします。これは、メッセージを生成する Python アプリケーションと、メッセージを使用して保持する Node.js アプリケーションで構成されます。

前提条件

リポジトリの複製

  1. コマンドを使用してgit cloneを複製します。

    git clone https://github.com/Azure-Samples/dapr-aks-extension-quickstart.git
    
  2. dapr-aks-extension-quickstart ディレクトリに変更します。

    cd dapr-aks-extension-quickstart
    

Redis ストアを作成して構成する

Azure ポータルを開き、Azure Managed Redis 作成フローを開始します。

  1. Azure Managed Redis インスタンスの作成に関するクイックスタートに従って、推奨される情報を入力します。

  2. [作成] を選択して、Redis インスタンスのデプロイを開始します。

リソース情報を確認する

  1. Redis リソースがデプロイされたら、その概要ページに移動します。

  2. 次の点に注意してください。

    • リソースの概要ページの [要点 ] セクションにあるホスト名。 ホスト名の形式は次のようになります: <your-cache-name>.<region>.redis.azure.net
    • 設定>詳細設定にある SSL ポート。 既定値は 10000 です。
  3. ターミナルで、既定のデータベースでアクセス キー認証を有効にします。

    az redisenterprise database update \
        --cluster-name <REDIS_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --access-keys-auth Enabled
    
  4. 既定のデータベースの主キーを取得し、環境変数に保存します。

    export REDIS_PRIMARY_KEY=$(az redisenterprise database list-keys \
        --cluster-name <REDIS_NAME> \
        --resource-group <RESOURCE_GROUP> \
        --query primaryKey \
        -o tsv)
    

パブリック ネットワーク アクセスを有効にする

このシナリオでは、Azure Managed Redis インスタンスはパブリック ネットワーク アクセスを使用します。 このクイック スタートが完了したら、 必ずリソースをクリーンアップ してください。

  1. リソース メニューの [設定] で、[ネットワーク形成] を選びます。

  2. [パブリック ネットワーク アクセス][有効] に設定します。

Dapr コンポーネントを構成する

redis.yaml ファイルでは、TLS でアクセス キー認証を使用するようにコンポーネントを構成します。

- name: redisPassword
    secretKeyRef:
        name: redis-secret
        key: redisPassword
- name: useEntraID
    value: "false"
- name: enableTLS
  value: true
  1. 好みのコード エディターで、サンプル リポジトリの デプロイ ディレクトリに移動し、 redis.yaml を開きます。

  2. redisHostの場合は、プレースホルダーの<REDIS_HOST>:10000値を、Azure ポータルから前に保存した Azure Managed Redis ホスト名に置き換えます。

    - name: redisHost
      value: <your-cache-name>.<region>.redis.azure.net:10000
    
  3. redisPasswordによって使用される 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 アプリを構成する

  1. deploy ディレクトリに移動し、workload-identity.yaml を開きます

  2. <MANAGED_IDENTITY_CLIENT_ID>を、作成したユーザー割り当てマネージド ID のクライアント ID に置き換えます。

  3. アプリ マニフェストをデプロイする前に、サービス アカウント マニフェストを適用します。

    kubectl apply -f ./deploy/workload-identity.yaml
    

node.yaml では、ポッド スペックはワークロード ID ラベルと共有workload-saサービス アカウントを使用します。

labels:
  app: node
  azure.workload.identity/use: "true"

構成を適用する

  1. kubectl apply コマンドを使用して、クラスターに Node.js アプリのデプロイを適用します。

    kubectl apply -f ./deploy/node.yaml
    
  2. Kubernetes デプロイは非同期であるため、次の手順に進む前に、次のコマンドを使用してデプロイが完了していることを確認します。

    kubectl rollout status deploy/nodeapp
    
  3. kubectl get svc コマンドを使用して、サービスにアクセスします。

    kubectl get svc nodeapp
    
  4. 出力内の EXTERNAL-IP をメモし、環境変数として設定します。

    export EXTERNAL_IP=<EXTERNAL-IP>
    

Node.js サービスを確認する

  1. curl を使用して、EXTERNAL-IP でサービスを呼び出します。

    curl $EXTERNAL_IP/ports
    

    出力例

    {"DAPR_HTTP_ENDPOINT":"http://localhost:3500","DAPR_GRPC_ENDPOINT":"http://localhost:50001"}
    
  2. アプリケーションに命令を送信します。

    curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
    
  3. 命令を確認します。

    curl $EXTERNAL_IP/order
    

    想定される出力

    { "orderId": "42" }
    

Dapr サイドカーを使用して Python アプリをデプロイする

Python アプリを構成する

python.yaml では、ポッド スペックはワークロード ID ラベルと共有workload-saサービス アカウントを使用します。

labels:
    app: python
    azure.workload.identity/use: "true"

構成を適用する

  1. kubectl apply コマンドを使用して、Python アプリを Kubernetes クラスターにデプロイします。

    kubectl apply -f ./deploy/python.yaml
    
  2. Kubernetes デプロイは非同期であるため、次の手順に進む前に、次のコマンドを使用してデプロイが完了していることを確認します。

    kubectl rollout status deploy/pythonapp
    

メッセージを監視し、永続化を確認する

Node.js と Python の両方のアプリケーションがデプロイされたので、メッセージを見ることができます。

  1. 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
    
  2. curl を使用して、Node.js アプリの命令エンドポイントを呼び出して、最新の命令を取得します。

    curl $EXTERNAL_IP/order
    

    応答に最新の JSON 出力が表示されます。

リソースをクリーンアップする

このクイック スタートのリソースを使用する予定がなくなった場合は、 az group delete コマンドを使用して、リソース グループ、クラスター、名前空間、およびすべての関連リソースを削除できます。

az group delete --name <your-resource-group>

次のステップ