チュートリアル: Dapr バインドを使用したイベント ドリブン作業

このチュートリアルでは、Dapr のバインド API が入力および出力として外部システムと連携することをデモンストレーションするためにマイクロサービスを作成します。 次のことを行います。

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

サービスでは、システム CRON から入力バインド イベントをリッスンし、ローカル データの内容を PostreSql 出力バインドに出力します。

バインド アプリケーションの図。

前提条件

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

Azure Container Apps にアプリケーションをデプロイする前に、まず Docker Compose と Dapr を使用して PostgreSQL コンテナーと JavaScript サービスをローカルで実行します。

プロジェクトを準備する

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

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

    cd bindings-dapr-nodejs-cron-postgres
    

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

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

    cd db
    
  2. Docker Compose を使用して PostgreSQL コンテナーを実行します。

    docker compose up -d
    
  3. 新しいターミナル ウィンドウを開き、サンプル ディレクトリの /batch に移動します。

    cd bindings-dapr-nodejs-cron-postgres/batch
    
  4. 依存関係をインストールします。

    npm install
    
  5. JavaScript サービス アプリケーションを実行します。

    dapr run --app-id batch-sdk --app-port 5002 --dapr-http-port 3500 --resources-path ../components -- node index.js
    

    dapr run コマンドは、バインド アプリケーションをローカル環境で実行します。 アプリケーションが正常に実行されると、ターミナル ウィンドウに出力バインド データが表示されます。

    想定される出力

    バッチ サービスでは、システム CRON から入力バインド イベントをリッスンし、ローカル データの内容を PostgreSQL 出力バインドに出力します。

    == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"}
    == APP == Finished processing batch
    == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"}
    == APP == Finished processing batch
    == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"}
    == APP == Finished processing batch
    
  6. ./db ターミナルで、PostgreSQL コンテナーを停止します。

    docker compose stop
    

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

アプリケーションをローカル環境で実行したので、azd を使ってバインド アプリケーションを Azure Container Apps にデプロイします。 デプロイ時に、ローカルのコンテナー化された PostgreSQL を Azure PostgreSQL コンポーネントに入れ替えます。

プロジェクトを準備する

サンプルのルート ディレクトリに移動します。

cd bindings-dapr-nodejs-cron-postgres

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

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

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

    パラメーター 説明
    Environment Name すべての Azure リソースを保持するために作成されたリソース グループのプレフィックス。
    Azure の場所 リソースの Azure の場所。 Azure PostgreSQL で使用できる場所を選択してください
    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/#blade/HubsExtension/DeploymentDetailsBlade/overview
    
      (✓) 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: Azure Database for PostgreSQL flexible server: postgres-server
      (✓) Done: Key vault: key-vault-name
      (✓) Done: Container Apps Environment: container-apps-env-name
      (✓) Done: Container App: container-app-name
    
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service api
      - Endpoint: https://your-container-app-endpoint.region.azurecontainerapps.io/
    
    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-subscription-ID/resourceGroups/your-resource-group/overview
    

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

Azure portal で、バッチ コンテナー アプリが Azure PostgreSQL への各挿入を 10 秒ごとにログに記録しているかどうかを確認します。

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

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

  3. コンテナー アプリ ダッシュボードで、[監視]>[ログ ストリーム] を選択します。

    Azure Container Apps のサイド メニューからのログ ストリームへの移動のスクリーンショット。

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

    Azure portal でのコンテナー アプリのログ ストリームのスクリーンショット。

何が起きましたか?

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

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

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

プロジェクトを準備する

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

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

    cd bindings-dapr-python-cron-postgres
    

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

Azure Container Apps にアプリケーションをデプロイする前に、まず Docker Compose と Dapr を使用して PostgreSQL コンテナーと Python サービスをローカルで実行します。

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

    cd db
    
  2. Docker Compose を使用して PostgreSQL コンテナーを実行します。

    docker compose up -d
    
  3. 新しいターミナル ウィンドウを開き、サンプル ディレクトリの /batch に移動します。

    cd bindings-dapr-python-cron-postgres/batch
    
  4. 依存関係をインストールします。

    pip install -r requirements.txt
    
  5. Python サービス アプリケーションを実行します。

    dapr run --app-id batch-sdk --app-port 5001 --dapr-http-port 3500 --resources-path ../components -- python3 app.py
    

    dapr run コマンドは、バインド アプリケーションをローカル環境で実行します。 アプリケーションが正常に実行されると、ターミナル ウィンドウに出力バインド データが表示されます。

    想定される出力

    バッチ サービスでは、システム CRON から入力バインド イベントをリッスンし、ローカル データの内容を PostgreSQL 出力バインドに出力します。

    == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"}
    == APP == Finished processing batch
    == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"}
    == APP == Finished processing batch
    == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"}
    == APP == Finished processing batch
    
  6. ./db ターミナルで、PostgreSQL コンテナーを停止します。

    docker compose stop
    

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

アプリケーションをローカル環境で実行したので、azd を使ってバインド アプリケーションを Azure Container Apps にデプロイします。 デプロイ時に、ローカルのコンテナー化された PostgreSQL を Azure PostgreSQL コンポーネントに入れ替えます。

プロジェクトを準備する

サンプルのルート ディレクトリに移動します。

cd bindings-dapr-python-cron-postgres

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

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

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

    パラメーター 説明
    Environment Name すべての Azure リソースを保持するために作成されたリソース グループのプレフィックス。
    Azure の場所 リソースの Azure の場所。 Azure PostgreSQL で使用できる場所を選択してください
    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/#blade/HubsExtension/DeploymentDetailsBlade/overview
    
      (✓) 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: Azure Database for PostgreSQL flexible server: postgres-server
      (✓) Done: Key vault: key-vault-name
      (✓) Done: Container Apps Environment: container-apps-env-name
      (✓) Done: Container App: container-app-name
    
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service api
      - Endpoint: https://your-container-app-endpoint.region.azurecontainerapps.io/
    
    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-subscription-ID/resourceGroups/your-resource-group/overview
    

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

Azure portal で、バッチ コンテナー アプリが Azure PostgreSQL への各挿入を 10 秒ごとにログに記録しているかどうかを確認します。

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

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

  3. コンテナー アプリ ダッシュボードで、[監視]>[ログ ストリーム] を選択します。

    Azure Container Apps のサイド メニューからのログ ストリームへの移動のスクリーンショット。

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

    Azure portal でのコンテナー アプリのログ ストリームのスクリーンショット。

何が起きましたか?

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

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

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

プロジェクトを準備する

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

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

    cd bindings-dapr-csharp-cron-postgres
    

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

Azure Container Apps にアプリケーションをデプロイする前に、まず Docker Compose と Dapr を使用して PostgreSQL コンテナーと .NET サービスをローカルで実行します。

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

    cd db
    
  2. Docker Compose を使用して PostgreSQL コンテナーを実行します。

    docker compose up -d
    
  3. 新しいターミナル ウィンドウを開き、サンプル ディレクトリの /batch に移動します。

    cd bindings-dapr-csharp-cron-postgres/batch
    
  4. 依存関係をインストールします。

    dotnet build
    
  5. .NET サービス アプリケーションを実行します。

    dapr run --app-id batch-sdk --app-port 7002 --resources-path ../components -- dotnet run
    

    dapr run コマンドは、バインド アプリケーションをローカル環境で実行します。 アプリケーションが正常に実行されると、ターミナル ウィンドウに出力バインド データが表示されます。

    想定される出力

    バッチ サービスでは、システム CRON から入力バインド イベントをリッスンし、ローカル データの内容を PostgreSQL 出力バインドに出力します。

    == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"}
    == APP == Finished processing batch
    == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"}
    == APP == Finished processing batch
    == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"}
    == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"}
    == APP == Finished processing batch
    
  6. ./db ターミナルで、PostgreSQL コンテナーを停止します。

    docker compose stop
    

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

アプリケーションをローカル環境で実行したので、azd を使ってバインド アプリケーションを Azure Container Apps にデプロイします。 デプロイ時に、ローカルのコンテナー化された PostgreSQL を Azure PostgreSQL コンポーネントに入れ替えます。

プロジェクトを準備する

サンプルのルート ディレクトリに移動します。

cd bindings-dapr-csharp-cron-postgres

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

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

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

    パラメーター 説明
    Environment Name すべての Azure リソースを保持するために作成されたリソース グループのプレフィックス。
    Azure の場所 リソースの Azure の場所。 Azure PostgreSQL で使用できる場所を選択してください
    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/#blade/HubsExtension/DeploymentDetailsBlade/overview
    
      (✓) 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: Azure Database for PostgreSQL flexible server: postgres-server
      (✓) Done: Key vault: key-vault-name
      (✓) Done: Container Apps Environment: container-apps-env-name
      (✓) Done: Container App: container-app-name
    
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service api
      - Endpoint: https://your-container-app-endpoint.region.azurecontainerapps.io/
    
    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-subscription-ID/resourceGroups/your-resource-group/overview
    

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

Azure portal で、バッチ コンテナー アプリが Azure PostgreSQL への各挿入を 10 秒ごとにログに記録しているかどうかを確認します。

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

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

  3. コンテナー アプリ ダッシュボードで、[監視]>[ログ ストリーム] を選択します。

    Azure Container Apps のサイド メニューからのログ ストリームへの移動のスクリーンショット。

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

    Azure portal でのコンテナー アプリのログ ストリームのスクリーンショット。

何が起きましたか?

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

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

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

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

azd down

次のステップ