次の方法で共有


チュートリアル: Dapr サービス呼び出しを使用したマイクロサービス通信

このチュートリアルでは、自動 mTLS を使用した安全な方法で、かつ Dapr のサービス呼び出し API を介した組み込み再試行を使用して確実に通信する、2 つのマイクロサービスを作成して実行します。 次のことを行います。

  • ローカルでアプリケーションを実行する。
  • 提供されている Bicep を使用して、Azure Developer CLI を介して Azure Container Apps にアプリケーションをデプロイします。

サンプルのサービス呼び出しプロジェクトには次のものが含まれます。

  1. ループで HTTP プロキシを使用して order-processor サービスの要求を呼び出す checkout サービス。
  2. checkout サービスから要求を受信する order-processor サービス。

サービス呼び出しサービスの図。

前提条件

Node.js アプリケーションをローカルで実行する

Azure Container Apps にアプリケーションをデプロイする前に、まず Dapr を使用して order-processor サービスと checkout サービスをローカルで実行します。

プロジェクトを準備する

  1. サンプル アプリケーションをローカル コンピューターに複製します。

    git clone https://github.com/Azure-Samples/svc-invoke-dapr-nodejs.git
    
  2. サンプルのルート ディレクトリに移動します。

    cd svc-invoke-dapr-nodejs
    

Dapr CLI を使用してアプリケーションを実行する

最初に order-processor サービスを実行します。

  1. サンプルのルート ディレクトリから、ディレクトリを order-processor に変更します。

    cd order-processor
    
  2. 依存関係をインストールします。

    npm install
    
  3. order-processor サービスを実行します。

    dapr run --app-port 5001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- npm start
    
  4. 新しいターミナル ウィンドウで、サンプルのルート ディレクトリから checkout 呼び出し元サービスに移動します。

    cd checkout
    
  5. 依存関係をインストールします。

    npm install
    
  6. checkout サービスを実行します。

    dapr run  --app-id checkout --app-protocol http --dapr-http-port 3500 -- npm start
    

    想定される出力

    どちらのターミナルでも、checkout サービスはループ内の order-processor サービスへの注文を呼び出します。

    checkout の出力:

    == APP == Order passed: {"orderId":1}
    == APP == Order passed: {"orderId":2}
    == APP == Order passed: {"orderId":3}
    == APP == Order passed: {"orderId":4}
    == APP == Order passed: {"orderId":5}
    == APP == Order passed: {"orderId":6}
    == APP == Order passed: {"orderId":7}
    == APP == Order passed: {"orderId":8}
    == APP == Order passed: {"orderId":9}
    == APP == Order passed: {"orderId":10}
    == APP == Order passed: {"orderId":11}
    == APP == Order passed: {"orderId":12}
    == APP == Order passed: {"orderId":13}
    == APP == Order passed: {"orderId":14}
    == APP == Order passed: {"orderId":15}
    == APP == Order passed: {"orderId":16}
    == APP == Order passed: {"orderId":17}
    == APP == Order passed: {"orderId":18}
    == APP == Order passed: {"orderId":19}
    == APP == Order passed: {"orderId":20}
    

    order-processor の出力:

    == APP == Order received: { orderId: 1 }
    == APP == Order received: { orderId: 2 }
    == APP == Order received: { orderId: 3 }
    == APP == Order received: { orderId: 4 }
    == APP == Order received: { orderId: 5 }
    == APP == Order received: { orderId: 6 }
    == APP == Order received: { orderId: 7 }
    == APP == Order received: { orderId: 8 }
    == APP == Order received: { orderId: 9 }
    == APP == Order received: { orderId: 10 }
    == APP == Order received: { orderId: 11 }
    == APP == Order received: { orderId: 12 }
    == APP == Order received: { orderId: 13 }
    == APP == Order received: { orderId: 14 }
    == APP == Order received: { orderId: 15 }
    == APP == Order received: { orderId: 16 }
    == APP == Order received: { orderId: 17 }
    == APP == Order received: { orderId: 18 }
    == APP == Order received: { orderId: 19 }
    == APP == Order received: { orderId: 20 }
    
  7. 両方のターミナルで Cmd/Ctrl + C を押してサービス間の呼び出しを終了します。

Azure Developer CLI を使用してアプリケーション テンプレートをデプロイする

azd を使用して、アプリケーションを Azure Container Apps にデプロイします。

プロジェクトを準備する

新しいターミナル ウィンドウで、サンプルのルート ディレクトリに移動します。

cd svc-invoke-dapr-nodejs

Azure Developer CLI を使用したプロビジョニングとデプロイ

  1. azd init を実行してプロジェクトを初期化します。

    azd init
    
  2. ターミナルでメッセージが表示されたら、次のパラメーターを指定します。

    パラメーター 説明
    Environment Name すべての Azure リソースを保持するために作成されたリソース グループのプレフィックス。
    Azure の場所 リソースの Azure の場所。
    Azure サブスクリプション リソースの Azure サブスクリプション。
  3. azd up を実行して、1 つのコマンドでインフラストラクチャをプロビジョニングしてアプリケーションを Azure Container Apps にデプロイします。

    azd up
    

    この処理は、完了までに時間がかかる場合があります。 azd up コマンドが完了すると、CLI 出力に、デプロイの進行状況を監視するための 2 つの Azure portal リンクが表示されます。 また、出力では、次の azd up の方法も示されます。

    • azd provision を使用して、./infra ディレクトリ内の指定されている Bicep ファイルを使用して、必要なすべての Azure リソースを作成して構成します。 Azure Developer CLI によってプロビジョニングされると、Azure portal からこれらのリソースにアクセスできます。 Azure リソースをプロビジョニングするファイルは次のとおりです。
      • main.parameters.json
      • main.bicep
      • 機能別に整理された app リソース ディレクトリ
      • azd テンプレートで使用される Bicep モジュールを含む core リファレンス ライブラリ
    • azd deploy を使用したコードのデプロイ

    想定される出力

    Initializing a new project (azd init)
    
    Provisioning Azure resources (azd provision)
    Provisioning Azure resources can take some time
    
      You can view detailed progress in the Azure Portal:
      https://portal.azure.com
    
      (✓) Done: Resource group: resource-group-name
      (✓) Done: Log Analytics workspace: log-analytics-name
      (✓) Done: Application Insights: app-insights-name
      (✓) Done: Portal dashboard: dashboard-name
      (✓) Done: Container Apps Environment: container-apps-env-name
      (✓) Done: Container App: ca-checkout-name
      (✓) Done: Container App: ca-order-processor-name
    
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service api
      - Endpoint: https://ca-order-processor-name.eastus.azurecontainerapps.io/
      (✓) Done: Deploying service worker
    
    SUCCESS: Your Azure app has been deployed!
    You can view the resources created under the resource group resource-group-name in Azure Portal:
    https://portal.azure.com/#@/resource/subscriptions/<your-azure-subscription>/resourceGroups/resource-group-name/overview
    

デプロイが成功したことを確認する

Azure portal で、checkout サービスから order-processor サービスに注文が渡されたことを確認します。

  1. ターミナル出力から checkout コンテナー アプリ名をコピーします。

  2. Azure portal にサインインし、名前でコンテナー アプリ リソースを検索します。

  3. Container Apps ダッシュボードで、[監視]>[ログ ストリーム] を選択します。

    Azure portal の [ログ ストリーム] ページに移動するスクリーンショット。

  4. checkout コンテナーが先ほどのターミナルと同じ出力をログに記録しているかどうかを確認します。

    Azure portal のチェックアウト サービス コンテナーのログ ストリームのスクリーンショット。

  5. order-processor サービスに対して同じことを行います。

    Azure portal の注文プロセッサ サービス コンテナーのログ ストリームのスクリーンショット。

何が起きましたか?

azd up コマンドが正常に完了した場合、次のようになります。

  • Azure Developer CLI は、サンプル プロジェクトの ./infra ディレクトリで参照されている Azure リソースを、指定した Azure サブスクリプションにプロビジョニングしました。 これにより Azure portal から、これらの Azure リソースを表示できるようになりました。
  • Azure Container Apps にデプロイされたアプリ。 ポータルから、完全に機能するアプリを参照できます。

Python アプリケーションをローカルで実行する

Azure Container Apps にアプリケーションをデプロイする前に、まず Dapr を使用して order-processor サービスと checkout サービスをローカルで実行します。

プロジェクトを準備する

  1. サンプル アプリケーションをローカル コンピューターに複製します。

    git clone https://github.com/Azure-Samples/svc-invoke-dapr-python.git
    
  2. サンプルのルート ディレクトリに移動します。

    cd svc-invoke-dapr-python
    

Dapr CLI を使用してアプリケーションを実行する

最初に order-processor サービスを実行します。

  1. サンプルのルート ディレクトリから、ディレクトリを order-processor に変更します。

    cd order-processor
    
  2. 依存関係をインストールします。

    pip3 install -r requirements.txt
    
  3. order-processor サービスを実行します。

    dapr run --app-port 8001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- python3 app.py
    
  4. 新しいターミナル ウィンドウで、サンプルのルート ディレクトリから checkout 呼び出し元サービスに移動します。

    cd checkout
    
  5. 依存関係をインストールします。

    pip3 install -r requirements.txt
    
  6. checkout サービスを実行します。

    dapr run  --app-id checkout --app-protocol http --dapr-http-port 3500 -- python3 app.py
    

    想定される出力

    どちらのターミナルでも、checkout サービスはループ内の order-processor サービスへの注文を呼び出します。

    checkout の出力:

    == APP == Order passed: {"orderId":1}
    == APP == Order passed: {"orderId":2}
    == APP == Order passed: {"orderId":3}
    == APP == Order passed: {"orderId":4}
    == APP == Order passed: {"orderId":5}
    == APP == Order passed: {"orderId":6}
    == APP == Order passed: {"orderId":7}
    == APP == Order passed: {"orderId":8}
    == APP == Order passed: {"orderId":9}
    == APP == Order passed: {"orderId":10}
    == APP == Order passed: {"orderId":11}
    == APP == Order passed: {"orderId":12}
    == APP == Order passed: {"orderId":13}
    == APP == Order passed: {"orderId":14}
    == APP == Order passed: {"orderId":15}
    == APP == Order passed: {"orderId":16}
    == APP == Order passed: {"orderId":17}
    == APP == Order passed: {"orderId":18}
    == APP == Order passed: {"orderId":19}
    == APP == Order passed: {"orderId":20}
    

    order-processor の出力:

    == APP == Order received: { orderId: 1 }
    == APP == Order received: { orderId: 2 }
    == APP == Order received: { orderId: 3 }
    == APP == Order received: { orderId: 4 }
    == APP == Order received: { orderId: 5 }
    == APP == Order received: { orderId: 6 }
    == APP == Order received: { orderId: 7 }
    == APP == Order received: { orderId: 8 }
    == APP == Order received: { orderId: 9 }
    == APP == Order received: { orderId: 10 }
    == APP == Order received: { orderId: 11 }
    == APP == Order received: { orderId: 12 }
    == APP == Order received: { orderId: 13 }
    == APP == Order received: { orderId: 14 }
    == APP == Order received: { orderId: 15 }
    == APP == Order received: { orderId: 16 }
    == APP == Order received: { orderId: 17 }
    == APP == Order received: { orderId: 18 }
    == APP == Order received: { orderId: 19 }
    == APP == Order received: { orderId: 20 }
    
  7. 両方のターミナルで Cmd/Ctrl + C を押してサービス間の呼び出しを終了します

Azure Developer CLI を使用してアプリケーション テンプレートをデプロイする

azd を使用して、アプリケーションを Azure Container Apps にデプロイします。

プロジェクトを準備する

  1. 新しいターミナル ウィンドウで、サンプルのルート ディレクトリに移動します。

    cd svc-invoke-dapr-python
    

Azure Developer CLI を使用したプロビジョニングとデプロイ

  1. azd init を実行してプロジェクトを初期化します。

    azd init
    
  2. ターミナルでメッセージが表示されたら、次のパラメーターを指定します。

    パラメーター 説明
    Environment Name すべての Azure リソースを保持するために作成されたリソース グループのプレフィックス。
    Azure の場所 リソースの Azure の場所。
    Azure サブスクリプション リソースの Azure サブスクリプション。
  3. azd up を実行して、1 つのコマンドでインフラストラクチャをプロビジョニングしてアプリケーションを Azure Container Apps にデプロイします。

    azd up
    

    この処理は、完了までに時間がかかる場合があります。 azd up コマンドが完了すると、CLI 出力に、デプロイの進行状況を監視するための 2 つの Azure portal リンクが表示されます。 また、出力では、次の azd up の方法も示されます。

    • azd provision を使用して、./infra ディレクトリ内の指定されている Bicep ファイルを使用して、必要なすべての Azure リソースを作成して構成します。 Azure Developer CLI によってプロビジョニングされると、Azure portal からこれらのリソースにアクセスできます。 Azure リソースをプロビジョニングするファイルは次のとおりです。
      • main.parameters.json
      • main.bicep
      • 機能別に整理された app リソース ディレクトリ
      • azd テンプレートで使用される Bicep モジュールを含む core リファレンス ライブラリ
    • azd deploy を使用したコードのデプロイ

    想定される出力

    Initializing a new project (azd init)
    
    Provisioning Azure resources (azd provision)
    Provisioning Azure resources can take some time
    
      You can view detailed progress in the Azure Portal:
      https://portal.azure.com
    
      (✓) Done: Resource group: resource-group-name
      (✓) Done: Log Analytics workspace: log-analytics-name
      (✓) Done: Application Insights: app-insights-name
      (✓) Done: Portal dashboard: dashboard-name
      (✓) Done: Container Apps Environment: container-apps-env-name
      (✓) Done: Container App: ca-checkout-name
      (✓) Done: Container App: ca-order-processor-name
    
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service api
      - Endpoint: https://ca-order-processor-name.eastus.azurecontainerapps.io/
      (✓) Done: Deploying service worker
    
    SUCCESS: Your Azure app has been deployed!
    You can view the resources created under the resource group resource-group-name in Azure Portal:
    https://portal.azure.com/#@/resource/subscriptions/<your-azure-subscription>/resourceGroups/resource-group-name/overview
    

デプロイが成功したことを確認する

Azure portal で、checkout サービスから order-processor サービスに注文が渡されたことを確認します。

  1. ターミナル出力から checkout コンテナー アプリ名をコピーします。

  2. Azure portal にサインインし、名前でコンテナー アプリ リソースを検索します。

  3. Container Apps ダッシュボードで、[監視]>[ログ ストリーム] を選択します。

    Azure portal の [ログ ストリーム] ページに移動するスクリーンショット。

  4. checkout コンテナーが先ほどのターミナルと同じ出力をログに記録しているかどうかを確認します。

    Azure portal のチェックアウト サービス コンテナーのログ ストリームのスクリーンショット。

  5. order-processor サービスに対して同じことを行います。

    Azure portal の注文プロセッサ サービス コンテナーのログ ストリームのスクリーンショット。

何が起きましたか?

azd up コマンドが正常に完了した場合、次のようになります。

  • Azure Developer CLI は、サンプル プロジェクトの ./infra ディレクトリで参照されている Azure リソースを、指定した Azure サブスクリプションにプロビジョニングしました。 これにより Azure portal から、これらの Azure リソースを表示できるようになりました。
  • Azure Container Apps にデプロイされたアプリ。 ポータルから、完全に機能するアプリを参照できます。

.NET アプリケーションをローカルで実行する

Azure Container Apps にアプリケーションをデプロイする前に、まず Dapr を使用して order-processor サービスと checkout サービスをローカルで実行します。

プロジェクトを準備する

  1. サンプル アプリケーションをローカル コンピューターに複製します。

    git clone https://github.com/Azure-Samples/svc-invoke-dapr-csharp.git
    
  2. サンプルのルート ディレクトリに移動します。

    cd svc-invoke-dapr-csharp
    

Dapr CLI を使用してアプリケーションを実行する

まず、order-processor 呼び出し先サービスを実行することから始めます。

  1. サンプルのルート ディレクトリから、ディレクトリを order-processor に変更します。

    cd order-processor
    
  2. 依存関係をインストールします。

    dotnet build
    
  3. order-processor サービスを実行します。

    dapr run --app-port 7001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- dotnet run
    
  4. 新しいターミナル ウィンドウで、サンプルのルート ディレクトリから checkout 呼び出し元サービスに移動します。

    cd checkout
    
  5. 依存関係をインストールします。

    dotnet build
    
  6. checkout サービスを実行します。

    dapr run  --app-id checkout --app-protocol http --dapr-http-port 3500 -- dotnet run
    

    想定される出力

    どちらのターミナルでも、checkout サービスはループ内の order-processor サービスへの注文を呼び出します。

    checkout の出力:

    == APP == Order passed: {"orderId":1}
    == APP == Order passed: {"orderId":2}
    == APP == Order passed: {"orderId":3}
    == APP == Order passed: {"orderId":4}
    == APP == Order passed: {"orderId":5}
    == APP == Order passed: {"orderId":6}
    == APP == Order passed: {"orderId":7}
    == APP == Order passed: {"orderId":8}
    == APP == Order passed: {"orderId":9}
    == APP == Order passed: {"orderId":10}
    == APP == Order passed: {"orderId":11}
    == APP == Order passed: {"orderId":12}
    == APP == Order passed: {"orderId":13}
    == APP == Order passed: {"orderId":14}
    == APP == Order passed: {"orderId":15}
    == APP == Order passed: {"orderId":16}
    == APP == Order passed: {"orderId":17}
    == APP == Order passed: {"orderId":18}
    == APP == Order passed: {"orderId":19}
    == APP == Order passed: {"orderId":20}
    

    order-processor の出力:

    == APP == Order received: { orderId: 1 }
    == APP == Order received: { orderId: 2 }
    == APP == Order received: { orderId: 3 }
    == APP == Order received: { orderId: 4 }
    == APP == Order received: { orderId: 5 }
    == APP == Order received: { orderId: 6 }
    == APP == Order received: { orderId: 7 }
    == APP == Order received: { orderId: 8 }
    == APP == Order received: { orderId: 9 }
    == APP == Order received: { orderId: 10 }
    == APP == Order received: { orderId: 11 }
    == APP == Order received: { orderId: 12 }
    == APP == Order received: { orderId: 13 }
    == APP == Order received: { orderId: 14 }
    == APP == Order received: { orderId: 15 }
    == APP == Order received: { orderId: 16 }
    == APP == Order received: { orderId: 17 }
    == APP == Order received: { orderId: 18 }
    == APP == Order received: { orderId: 19 }
    == APP == Order received: { orderId: 20 }
    
  7. 両方のターミナルで Cmd/Ctrl + C を押してサービス間の呼び出しを終了します。

Azure Developer CLI を使用してアプリケーション テンプレートをデプロイする

azd を使用して、アプリケーションを Azure Container Apps にデプロイします。

プロジェクトを準備する

新しいターミナル ウィンドウで、サンプルのルート ディレクトリに移動します。

cd svc-invoke-dapr-csharp

Azure Developer CLI を使用したプロビジョニングとデプロイ

  1. azd init を実行してプロジェクトを初期化します。

    azd init
    
  2. ターミナルでメッセージが表示されたら、次のパラメーターを指定します。

    パラメーター 説明
    Environment Name すべての Azure リソースを保持するために作成されたリソース グループのプレフィックス。
    Azure の場所 リソースの Azure の場所。
    Azure サブスクリプション リソースの Azure サブスクリプション。
  3. azd up を実行して、1 つのコマンドでインフラストラクチャをプロビジョニングしてアプリケーションを Azure Container Apps にデプロイします。

    azd up
    

    この処理は、完了までに時間がかかる場合があります。 azd up コマンドが完了すると、CLI 出力に、デプロイの進行状況を監視するための 2 つの Azure portal リンクが表示されます。 また、出力では、次の azd up の方法も示されます。

    • azd provision を使用して、./infra ディレクトリ内の指定されている Bicep ファイルを使用して、必要なすべての Azure リソースを作成して構成します。 Azure Developer CLI によってプロビジョニングされると、Azure portal からこれらのリソースにアクセスできます。 Azure リソースをプロビジョニングするファイルは次のとおりです。
      • main.parameters.json
      • main.bicep
      • 機能別に整理された app リソース ディレクトリ
      • azd テンプレートで使用される Bicep モジュールを含む core リファレンス ライブラリ
    • azd deploy を使用したコードのデプロイ

    想定される出力

    Initializing a new project (azd init)
    
    Provisioning Azure resources (azd provision)
    Provisioning Azure resources can take some time
    
      You can view detailed progress in the Azure Portal:
      https://portal.azure.com
    
      (✓) Done: Resource group: resource-group-name
      (✓) Done: Log Analytics workspace: log-analytics-name
      (✓) Done: Application Insights: app-insights-name
      (✓) Done: Portal dashboard: dashboard-name
      (✓) Done: Container Apps Environment: container-apps-env-name
      (✓) Done: Container App: ca-checkout-name
      (✓) Done: Container App: ca-order-processor-name
    
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service api
      - Endpoint: https://ca-order-processor-name.eastus.azurecontainerapps.io/
      (✓) Done: Deploying service worker
    
    SUCCESS: Your Azure app has been deployed!
    You can view the resources created under the resource group resource-group-name in Azure Portal:
    https://portal.azure.com/#@/resource/subscriptions/<your-azure-subscription>/resourceGroups/resource-group-name/overview
    

デプロイが成功したことを確認する

Azure portal で、checkout サービスから order-processor サービスに注文が渡されたことを確認します。

  1. ターミナル出力から checkout コンテナー アプリ名をコピーします。

  2. Azure portal にサインインし、名前でコンテナー アプリ リソースを検索します。

  3. Container Apps ダッシュボードで、[監視]>[ログ ストリーム] を選択します。

    Azure portal の [ログ ストリーム] ページに移動するスクリーンショット。

  4. checkout コンテナーが先ほどのターミナルと同じ出力をログに記録しているかどうかを確認します。

    Azure portal のチェックアウト サービス コンテナーのログ ストリームのスクリーンショット。

  5. order-processor サービスに対して同じことを行います。

    Azure portal の注文プロセッサ サービス コンテナーのログ ストリームのスクリーンショット。

何が起きましたか?

azd up コマンドが正常に完了した場合、次のようになります。

  • Azure Developer CLI は、サンプル プロジェクトの ./infra ディレクトリで参照されている Azure リソースを、指定した Azure サブスクリプションにプロビジョニングしました。 これにより Azure portal から、これらの Azure リソースを表示できるようになりました。
  • Azure Container Apps にデプロイされたアプリ。 ポータルから、完全に機能するアプリを参照できます。

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

このアプリケーションを引き続き使用しない場合は、次のコマンドを使用して、プロビジョニングした Azure リソースを削除します。

azd down

次のステップ