Share via


教學課程:使用 Azure Resource Manager 或 Bicep 範本將 Dapr 應用程式部署至 Azure 容器應用程式

Dapr (分散式應用程式執行階段) 是一種執行階段,可協助您建置復原性無狀態和具狀態微服務。 在本教學課程中,我們透過 Azure Resource Manager (ARM) 或 Bicep 範本,將範例 Dapr 解決方案部署到 Azure 容器應用程式。

您將學習如何:

  • 建立 Azure Blob 儲存體作為 Dapr 狀態存放區
  • 部署容器應用程式環境以裝載容器應用程式
  • 部署兩個已啟用 dapr 的容器應用程式:一個可產生訂單,另一個可取用訂單並加以儲存
  • 將使用者指派的身分識別指派給容器應用程式,並提供適當的角色指派,以向 Dapr 狀態存放區進行驗證
  • 確認兩個微服務之間的互動。

使用 Azure 容器應用程式,您可以在組建微服務時取得完全受控的 Dapr API 版本。 當您在 Azure 容器應用程式中使用 Dapr 時,您可以讓側車 (Sidecar) 在微服務旁邊執行,以提供一組豐富的功能。

在本教學課程中,您會從 Dapr Hello World 快速入門來部署解決方案。

此應用程式包含:

  • 用戶端 (Python) 容器應用程式,以產生訊息。
  • 服務 (節點) 容器應用程式,以取用和保存狀態存放區中的這些訊息

下列架構圖說明構成本教學課程的元件:

Azure Container Apps 上 Dapr Hello World 微服務的架構圖表

必要條件

  • 需要具作用中訂用帳戶的 Azure 帳戶。 若您還沒有帳戶,可以免費建立帳戶
  • GitHub 帳戶。 如果您還沒有帳戶,請免費註冊。

設定

若要從 CLI 登入 Azure,請執行下列命令,並遵循提示來完成驗證程序。

az login

若要確保您執行最新版的 CLI,請執行升級命令。

az upgrade

接下來,安裝或更新 CLI 的 Azure Container Apps 擴充功能。

az extension add --name containerapp --upgrade

現在已安裝目前的擴充功能或模組,請註冊 Microsoft.AppMicrosoft.OperationalInsights 命名空間。

注意

Azure 容器應用程式資源已從 Microsoft.Web 命名空間移轉至 Microsoft.App 命名空間。 如需詳細資訊,請參閱 2022 年 3 月將命名空間從 Microsoft.Web 移轉至 Microsoft.App

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

設定環境變數

設定下列環境變數。 以您的值取代 <PLACEHOLDERS> :

RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"

建立 Azure 資源群組

建立資源群組來組織與容器應用程式部署相關的服務。

az group create \
  --name $RESOURCE_GROUP \
  --location "$LOCATION"

準備 GitHub 存放庫

移至存放庫,其中保存用來部署解決方案的 ARM 和 Bicep 範本。

選取存放庫頂端的 [分支] 按鈕,將存放庫派生到您的帳戶。

現在,您可以複製分支以在本機使用。

使用下列 git 命令,將分支存放庫複製到 acadapr-templates 目錄。

git clone https://github.com/$GITHUB_USERNAME/Tutorial-Deploy-Dapr-Microservices-ACA.git acadapr-templates

部署

範本會部署:

  • 容器應用程式環境
  • 與容器應用程式環境相關聯的 Log Analytics 工作區
  • 用於分散式追蹤的 Application Insights 資源
  • Blob 儲存體帳戶和預設儲存體容器
  • Blob 儲存體帳戶的 Dapr 元件
  • 已啟用 Dapr 的節點容器應用程式,具有使用者指派的受控識別:hello-k8s-node
  • 已啟用 Dapr 的 Python 容器應用程式:hello-k8s-python
  • 節點應用程式的 Active Directory 角色指派,供 Dapr 元件用來建立 Blob 儲存體的連線

瀏覽至 acadapr-templates 目錄,然後執行下列命令:

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.json \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

可能會顯示警告 (BCP081)。 此警告不會對應用程式的成功部署造成影響。

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.bicep \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

此命令會部署:

  • 用於裝載 Hello World Dapr 解決方案的容器應用程式環境和相關聯的 Log Analytics 工作區
  • 用於 Dapr 分散式追蹤的 Application Insights 執行個體
  • targetPort: 3000 上執行的 nodeapp 應用程式伺服器,已啟用 Dapr,並使用 "appId": "nodeapp""appPort": 3000 及使用者指派的身分識別 (可透過儲存體資料參與者角色指派來存取 Azure Blob 儲存體) 來設定
  • nodeapp 的 Dapr 元件,僅供 "type": "state.azure.blobstorage" 用於儲存狀態
  • 已啟用 Dapr 的無周邊 pythonapp,使用 Dapr 服務引動過程來叫用 nodeapp 服務

確認結果

確認成功狀態持續性

您可藉由檢視 Azure 儲存體帳戶中的資料,確認服務運作正常。

  1. 在瀏覽器中,開啟 Azure 入口網站

  2. 移至資源群組中新建立的儲存體帳戶。

  3. 從左側功能表中選取 [容器]

  4. 選取已建立的容器。

  5. 確認您可在容器中看到名為 order 的檔案。

  6. 選取 檔案。

  7. 選取 [編輯] 索引標籤。

  8. 選取 [重新整理] 按鈕以觀察更新。

檢視記錄檔

透過容器應用程式記錄的資料會儲存在 Log Analytics 工作區的 ContainerAppConsoleLogs_CL 自訂資料表中。 您可以透過 Azure 入口網站或從命令列檢視記錄。 在查詢記錄的資料之前,先等候幾分鐘,分析才會首次送達。

使用下列命令來檢視 bash 或 PowerShell 中的記錄。

LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`
az monitor log-analytics query \
  --workspace "$LOG_ANALYTICS_WORKSPACE_CLIENT_ID" \
  --analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'nodeapp' and (Log_s contains 'persisted' or Log_s contains 'order') | project ContainerAppName_s, Log_s, TimeGenerated | take 5" \
  --out table

下列輸出示範預計來自命令的回應類型。

ContainerAppName_s    Log_s                            TableName      TimeGenerated
--------------------  -------------------------------  -------------  ------------------------
nodeapp               Got a new order! Order ID: 61    PrimaryResult  2021-10-22T21:31:46.184Z
nodeapp               Successfully persisted state.    PrimaryResult  2021-10-22T21:31:46.184Z
nodeapp               Got a new order! Order ID: 62    PrimaryResult  2021-10-22T22:01:57.174Z
nodeapp               Successfully persisted state.    PrimaryResult  2021-10-22T22:01:57.174Z
nodeapp               Got a new order! Order ID: 63    PrimaryResult  2021-10-22T22:45:44.618Z

清除資源

完成後,請執行下列命令來刪除資源群組,以及您在本教學課程中建立的所有資源。

az group delete \
  --resource-group $RESOURCE_GROUP

注意

由於 pythonapp 持續呼叫 nodeapp,其訊息會保存在您設定的狀態存放區中,因此務必完成這些清除步驟,以避免持續計費的作業。


提示

有問題嗎? 在 Azure 容器應用程式存放庫中提出問題,讓我們在 GitHub 上了解該問題。

下一步