チュートリアル: Dapr バインドを使用したイベント ドリブン作業
このチュートリアルでは、Dapr のバインド API が入力および出力として外部システムと連携することをデモンストレーションするためにマイクロサービスを作成します。 次のことを行います。
- Dapr CLI を使用してアプリケーションをローカル環境で実行します。
- 提供されている Bicep を使用して、Azure Developer CLI を介して Azure Container Apps にアプリケーションをデプロイします。
サービスでは、システム CRON から入力バインド イベントをリッスンし、ローカル データの内容を PostreSql 出力バインドに出力します。
前提条件
- Azure Developer CLI をインストールする
- Dapr のインストールと初期化
- Docker Desktop
- Git
Node.js アプリケーションをローカルで実行する
Azure Container Apps にアプリケーションをデプロイする前に、まず Docker Compose と Dapr を使用して PostgreSQL コンテナーと JavaScript サービスをローカルで実行します。
プロジェクトを準備する
サンプル アプリケーションをローカル コンピューターにクローンします。
git clone https://github.com/Azure-Samples/bindings-dapr-nodejs-cron-postgres.git
サンプルのルート ディレクトリに移動します。
cd bindings-dapr-nodejs-cron-postgres
Dapr CLI を使用してアプリケーションを実行する
サンプルのルート ディレクトリから、ディレクトリを
db
に変更します。cd db
Docker Compose を使用して PostgreSQL コンテナーを実行します。
docker compose up -d
新しいターミナル ウィンドウを開き、サンプル ディレクトリの
/batch
に移動します。cd bindings-dapr-nodejs-cron-postgres/batch
依存関係をインストールします。
npm install
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
./db
ターミナルで、PostgreSQL コンテナーを停止します。docker compose stop
Azure Developer CLI を使用してアプリケーション テンプレートをデプロイする
アプリケーションをローカル環境で実行したので、azd
を使ってバインド アプリケーションを Azure Container Apps にデプロイします。 デプロイ時に、ローカルのコンテナー化された PostgreSQL を Azure PostgreSQL コンポーネントに入れ替えます。
プロジェクトを準備する
サンプルのルート ディレクトリに移動します。
cd bindings-dapr-nodejs-cron-postgres
Azure Developer CLI を使用したプロビジョニングとデプロイ
azd init
を実行してプロジェクトを初期化します。azd init
ターミナルでメッセージが表示されたら、次のパラメーターを指定します。
パラメーター 説明 Environment Name すべての Azure リソースを保持するために作成されたリソース グループのプレフィックス。 Azure の場所 リソースの Azure の場所。 Azure PostgreSQL で使用できる場所を選択してください。 Azure サブスクリプション リソースの Azure サブスクリプション。 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 秒ごとにログに記録しているかどうかを確認します。
ターミナル出力からコンテナー アプリ名をコピーします。
Azure portal にサインインし、名前でコンテナー アプリ リソースを検索します。
コンテナー アプリ ダッシュボードで、[監視]>[ログ ストリーム] を選択します。
コンテナーが先ほどのターミナルと同じ出力をログに記録しているかどうかを確認します。
何が起きましたか?
azd up
コマンドが正常に完了した場合、次のようになります。
- Azure Developer CLI は、サンプル プロジェクトの
./infra
ディレクトリで参照されている Azure リソースを、指定した Azure サブスクリプションにプロビジョニングしました。 これにより Azure portal から、これらの Azure リソースを表示できるようになりました。 - Azure Container Apps にデプロイされたアプリ。 ポータルから、完全に機能するアプリを参照できます。
Python アプリケーションをローカルで実行する
プロジェクトを準備する
サンプル アプリケーションをローカル コンピューターにクローンします。
git clone https://github.com/Azure-Samples/bindings-dapr-python-cron-postgres.git
サンプルのルート ディレクトリに移動します。
cd bindings-dapr-python-cron-postgres
Dapr CLI を使用してアプリケーションを実行する
Azure Container Apps にアプリケーションをデプロイする前に、まず Docker Compose と Dapr を使用して PostgreSQL コンテナーと Python サービスをローカルで実行します。
サンプルのルート ディレクトリから、ディレクトリを
db
に変更します。cd db
Docker Compose を使用して PostgreSQL コンテナーを実行します。
docker compose up -d
新しいターミナル ウィンドウを開き、サンプル ディレクトリの
/batch
に移動します。cd bindings-dapr-python-cron-postgres/batch
依存関係をインストールします。
pip install -r requirements.txt
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
./db
ターミナルで、PostgreSQL コンテナーを停止します。docker compose stop
Azure Developer CLI を使用してアプリケーション テンプレートをデプロイする
アプリケーションをローカル環境で実行したので、azd
を使ってバインド アプリケーションを Azure Container Apps にデプロイします。 デプロイ時に、ローカルのコンテナー化された PostgreSQL を Azure PostgreSQL コンポーネントに入れ替えます。
プロジェクトを準備する
サンプルのルート ディレクトリに移動します。
cd bindings-dapr-python-cron-postgres
Azure Developer CLI を使用したプロビジョニングとデプロイ
azd init
を実行してプロジェクトを初期化します。azd init
ターミナルでメッセージが表示されたら、次のパラメーターを指定します。
パラメーター 説明 Environment Name すべての Azure リソースを保持するために作成されたリソース グループのプレフィックス。 Azure の場所 リソースの Azure の場所。 Azure PostgreSQL で使用できる場所を選択してください。 Azure サブスクリプション リソースの Azure サブスクリプション。 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 秒ごとにログに記録しているかどうかを確認します。
ターミナル出力からコンテナー アプリ名をコピーします。
Azure portal にサインインし、名前でコンテナー アプリ リソースを検索します。
コンテナー アプリ ダッシュボードで、[監視]>[ログ ストリーム] を選択します。
コンテナーが先ほどのターミナルと同じ出力をログに記録しているかどうかを確認します。
何が起きましたか?
azd up
コマンドが正常に完了した場合、次のようになります。
- Azure Developer CLI は、サンプル プロジェクトの
./infra
ディレクトリで参照されている Azure リソースを、指定した Azure サブスクリプションにプロビジョニングしました。 これにより Azure portal から、これらの Azure リソースを表示できるようになりました。 - Azure Container Apps にデプロイされたアプリ。 ポータルから、完全に機能するアプリを参照できます。
.NET アプリケーションをローカルで実行する
プロジェクトを準備する
サンプル アプリケーションをローカル コンピューターにクローンします。
git clone https://github.com/Azure-Samples/bindings-dapr-csharp-cron-postgres.git
サンプルのルート ディレクトリに移動します。
cd bindings-dapr-csharp-cron-postgres
Dapr CLI を使用してアプリケーションを実行する
Azure Container Apps にアプリケーションをデプロイする前に、まず Docker Compose と Dapr を使用して PostgreSQL コンテナーと .NET サービスをローカルで実行します。
サンプルのルート ディレクトリから、ディレクトリを
db
に変更します。cd db
Docker Compose を使用して PostgreSQL コンテナーを実行します。
docker compose up -d
新しいターミナル ウィンドウを開き、サンプル ディレクトリの
/batch
に移動します。cd bindings-dapr-csharp-cron-postgres/batch
依存関係をインストールします。
dotnet build
.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
./db
ターミナルで、PostgreSQL コンテナーを停止します。docker compose stop
Azure Developer CLI を使用してアプリケーション テンプレートをデプロイする
アプリケーションをローカル環境で実行したので、azd
を使ってバインド アプリケーションを Azure Container Apps にデプロイします。 デプロイ時に、ローカルのコンテナー化された PostgreSQL を Azure PostgreSQL コンポーネントに入れ替えます。
プロジェクトを準備する
サンプルのルート ディレクトリに移動します。
cd bindings-dapr-csharp-cron-postgres
Azure Developer CLI を使用したプロビジョニングとデプロイ
azd init
を実行してプロジェクトを初期化します。azd init
ターミナルでメッセージが表示されたら、次のパラメーターを指定します。
パラメーター 説明 Environment Name すべての Azure リソースを保持するために作成されたリソース グループのプレフィックス。 Azure の場所 リソースの Azure の場所。 Azure PostgreSQL で使用できる場所を選択してください。 Azure サブスクリプション リソースの Azure サブスクリプション。 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 秒ごとにログに記録しているかどうかを確認します。
ターミナル出力からコンテナー アプリ名をコピーします。
Azure portal にサインインし、名前でコンテナー アプリ リソースを検索します。
コンテナー アプリ ダッシュボードで、[監視]>[ログ ストリーム] を選択します。
コンテナーが先ほどのターミナルと同じ出力をログに記録しているかどうかを確認します。
何が起きましたか?
azd up
コマンドが正常に完了した場合、次のようになります。
- Azure Developer CLI は、サンプル プロジェクトの
./infra
ディレクトリで参照されている Azure リソースを、指定した Azure サブスクリプションにプロビジョニングしました。 これにより Azure portal から、これらの Azure リソースを表示できるようになりました。 - Azure Container Apps にデプロイされたアプリ。 ポータルから、完全に機能するアプリを参照できます。
リソースをクリーンアップする
このアプリケーションを引き続き使用しない場合は、次のコマンドを使用して、プロビジョニングした Azure リソースを削除します。
azd down