共用方式為


快速入門:使用 Azure CLI 將 Dapr 應用程式部署至 Azure Container Apps

Dapr (分散式應用程式執行階段) 可協助開發人員組建易復原且可靠的微服務。 在本快速入門中,您將瞭解如何讓 Dapr Sidecars 與微服務容器應用程式一起執行。 您將會:

  • 為您的容器應用程式建立容器應用程式環境和 Azure 部落格記憶體狀態存放區。
  • 部署發佈訊息的 Python 容器應用程式。
  • 部署Node.js容器應用程式,以訂閱訊息,並將其保存在狀態存放區中。
  • 使用 Azure 入口網站 確認兩個微服務之間的互動。

Azure 容器應用程式上的 Dapr Hello World 微服務的架構圖

本快速入門會鏡像您在開放原始碼 Dapr Hello World 快速入門中部署的應用程式。

設定

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

az login

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

az upgrade

接下來,安裝或更新 CLI 的 Azure 容器應用程式延伸模組。

如果您在 Azure CLI 中執行 az containerapp 命令或 Azure PowerShell 模組中的 Cmdlet Az.App 時收到遺漏參數的錯誤,請確定您已安裝最新版的 Azure 容器應用程式延伸模組。

az extension add --name containerapp --upgrade

注意

從 2024 年 5 月開始,Azure CLI 延伸模組預設不會再啟用預覽功能。 若要存取容器應用程式預覽功能,請使用 --allow-preview true 安裝容器應用程式延伸模組。

az extension add --name containerapp --upgrade --allow-preview true

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

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"

建立環境

Azure 容器應用程式中的環境會在容器應用程式群組周圍建立安全界限。 部署至相同環境的容器應用程式會部署在相同的虛擬網路中,並將記錄寫入相同的 Log Analytics 工作區。

若要建立環境,請執行下列命令:

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION"

設定狀態存放區

建立 Azure Blob 儲存體帳戶

部署環境之後,請部署Node.js容器應用程式用來儲存數據的 Azure Blob 儲存體 帳戶。 部署服務之前,請選擇記憶體帳戶的名稱。 儲存體帳戶名稱必須是 Azure 中唯一的,長度為 3 到 24 個字元,且必須僅包含數字和小寫字母。

STORAGE_ACCOUNT_NAME="<storage account name>"

使用下列命令來建立 Azure 儲存體帳戶。

az storage account create \
  --name $STORAGE_ACCOUNT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --sku Standard_RAGRS \
  --kind StorageV2

為節點應用程式設定使用者指派的身分識別

雖然 Container Apps 同時支援使用者指派和系統指派的受控識別,但使用者指派的身分識別提供已啟用 Dapr 的Node.js應用程式,並具有存取 Blob 記憶體帳戶的許可權。

  1. 建立使用者指派的身分識別。

    az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity"     --output json
    
  2. 擷取 principalIdid 屬性,並儲存在變數中。

    PRINCIPAL_ID=$(az identity show -n "nodeAppIdentity" --resource-group     $RESOURCE_GROUP --query principalId | tr -d \")
    IDENTITY_ID=$(az identity show -n "nodeAppIdentity" --resource-group     $RESOURCE_GROUP --query id | tr -d \")
    CLIENT_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP     --query clientId | tr -d \")
    
  3. 擷取您目前訂用帳戶的訂用帳戶識別碼。

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  4. Storage Blob Data Contributor 角色指派給使用者指派的身分識別。

    az role assignment create --assignee $PRINCIPAL_ID  \
    --role "Storage Blob Data Contributor" \
    --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/    Microsoft.Storage/storageAccounts/$STORAGE_ACCOUNT_NAME"
    

設定狀態存放區元件

雖然您有多個選項可透過 Dapr 向外部資源進行驗證。 此範例使用以 Azure 為基礎的狀態存放區,因此您可以使用受控識別,從Node.js應用程式直接存取 Blob 存放區。

  1. 在文本編輯器中,建立名為 statestore.yaml 的檔案,其中包含您從先前步驟取得的屬性。

    # statestore.yaml for Azure Blob storage component
    componentType: state.azure.blobstorage
    version: v1
    metadata:
      - name: accountName
        value: "<STORAGE_ACCOUNT_NAME>"
      - name: containerName
        value: mycontainer
      - name: azureClientId
        value: "<MANAGED_IDENTITY_CLIENT_ID>"
    scopes:
      - nodeapp
    

    此檔案可協助您的 Dapr 應用程式存取您的狀態存放區。

  2. 流覽至您儲存 yaml 檔案的目錄,然後執行下列命令,以在 Container Apps 環境中設定 Dapr 元件。

    az containerapp env dapr-component set \
        --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --dapr-component-name statestore \
        --yaml statestore.yaml
    

部署Node.js應用程式

az containerapp create \
  --name nodeapp \
  --resource-group $RESOURCE_GROUP \
  --user-assigned $IDENTITY_ID \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image dapriosamples/hello-k8s-node:latest \
  --min-replicas 1 \
  --max-replicas 1 \
  --enable-dapr \
  --dapr-app-id nodeapp \
  --dapr-app-port 3000 \
  --env-vars 'APP_PORT=3000'

如果您正在使用 Azure Container Registry,請在命令中包含 --registry-server <REGISTRY_NAME>.azurecr.io 旗標。

根據預設,系統會從 Docker Hub 提取映像。

部署 Python 應用程式

az containerapp create \
  --name pythonapp \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image dapriosamples/hello-k8s-python:latest \
  --min-replicas 1 \
  --max-replicas 1 \
  --enable-dapr \
  --dapr-app-id pythonapp

如果您正在使用 Azure Container Registry,請在命令中包含 --registry-server <REGISTRY_NAME>.azurecr.io 旗標。

驗證結果

確認成功狀態持續性

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

  1. 在瀏覽器中開啟 Azure 入口網站,然後瀏覽至您的儲存體帳戶。

  2. 選取左側功能表中的 [資料記憶體>容器]。

  3. 選取容器應用程式。

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

  5. 選取 檔案。

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

  7. 選取 [重新整理] 按鈕,觀察資料自動更新的方式。

檢視記錄檔

容器應用程式裡的記錄會儲存在 Log Analytics 工作區的 ContainerAppConsoleLogs_CL 自訂資料表中。 您可以透過 Azure 入口網站或 CLI 來檢視記錄。 資料表一開始出現在工作區時可能會稍微延遲。

使用下列 CLI 命令,使用命令行檢視記錄。

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 | sort by TimeGenerated | take 5" \
  --out table

下列輸出示範預計透過 CLI 命令的回應類型。

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

清除資源

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

如果您想要刪除在本逐步解說中建立的資源,請執行下列命令。

警告

此命令會刪除指定的資源群組和其中包含的所有資源。 如果本教學課程範圍以外的資源存在於指定的資源群組中,則也會一併刪除。

az group delete --resource-group $RESOURCE_GROUP

提示

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

下一步