Share via


教學課程:使用 Azure Container Apps 部署事件驅動作業

Azure Container Apps 作業 可讓您執行容器化工作,以有限持續時間執行並結束。 您可以手動、依排程或根據事件觸發作業執行。 作業最適合用於數據處理、機器學習,或任何需要無伺服器暫時計算資源之案例的工作。

在本教學課程中,您將瞭解如何使用 事件驅動工作

  • 建立容器應用程式環境以部署容器應用程式
  • 建立 Azure 儲存體佇列以將訊息傳送至容器應用程式
  • 建置執行作業的容器映像
  • 將作業部署至容器應用程式環境
  • 確認容器應用程式已處理佇列訊息

您建立的作業會針對傳送至 Azure 儲存體 佇列的每個訊息啟動執行。 每個作業執行都會執行執行下列步驟的容器:

  1. 從佇列取得一則訊息。
  2. 將訊息記錄至作業執行記錄。
  3. 從佇列中刪除訊息。
  4. 出口。

重要

縮放程式會監視佇列的長度,以判斷要啟動的作業數目。 若要進行精確的調整,在作業執行完成處理之前,請勿從佇列中刪除訊息。

您在本教學課程中執行的作業原始碼可在 Azure 範例 GitHub 存放庫中取得。

必要條件

設定

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

    az login
    
  2. 請確定您是透過升級命令執行最新版的 CLI。

    az upgrade
    
  3. 安裝最新版的 Azure Container Apps CLI 擴充功能。

    az extension add --name containerapp --upgrade
    
  4. Microsoft.App如果您尚未在 Azure 訂用帳戶中註冊 和 Microsoft.OperationalInsights 命名空間,請註冊 和命名空間。

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    
  5. 現在,您的 Azure CLI 設定已完成,您可以定義本文中使用的環境變數。

    RESOURCE_GROUP="jobs-quickstart"
    LOCATION="northcentralus"
    ENVIRONMENT="env-jobs-quickstart"
    JOB_NAME="my-job"
    

建立容器應用程式環境

Azure Container Apps 環境可作為容器應用程式和作業的安全界限,讓它們可以共用相同的網路並彼此通訊。

  1. 使用下列命令建立資源群組。

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. 使用下列命令建立 Container Apps 環境。

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

設定儲存體佇列

作業會使用 Azure 儲存體 佇列來接收訊息。 在本節中,您會建立記憶體帳戶和佇列。

  1. 定義記憶體帳戶的名稱。

    STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"
    QUEUE_NAME="myqueue"
    

    以記憶體帳戶的唯一名稱取代 <STORAGE_ACCOUNT_NAME> 。 儲存體帳戶名稱必須是 Azure 中唯一的,且長度為 3 到 24 個字元,僅包含數字和小寫字母。

  2. 建立 Azure 儲存體帳戶。

    az storage account create \
        --name "$STORAGE_ACCOUNT_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Standard_LRS \
        --kind StorageV2
    
  3. 將佇列的 連接字串 儲存到變數中。

    QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv`
    
  4. 建立消息佇列。

    az storage queue create \
        --name "$QUEUE_NAME" \
        --account-name "$STORAGE_ACCOUNT_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    

建置和部署作業

若要部署作業,您必須先建置作業的容器映像,並將其推送至登錄。 然後,您可以將作業部署到 Container Apps 環境。

  1. 定義容器映像和登錄的名稱。

    CONTAINER_IMAGE_NAME="queue-reader-job:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    以容器登入的唯一名稱取代 <CONTAINER_REGISTRY_NAME> 。 容器登錄名稱在 Azure 內必須是唯一的,且長度必須介於 5 到 50 個字元之間,且長度只包含數位和小寫字母。

  2. 建立容器登錄。

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic \
        --admin-enabled true
    
  3. 作業的原始程式碼可在 GitHub取得。 執行下列命令以複製存放庫,並使用 命令在雲端 az acr build 中建置容器映射。

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        "https://github.com/Azure-Samples/container-apps-event-driven-jobs-tutorial.git"
    

    映像現在可在容器登錄中使用。

  4. 在 Container Apps 環境中建立作業。

    az containerapp job create \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --environment "$ENVIRONMENT" \
        --trigger-type "Event" \
        --replica-timeout "1800" \
        --min-executions "0" \
        --max-executions "10" \
        --polling-interval "60" \
        --scale-rule-name "queue" \
        --scale-rule-type "azure-queue" \
        --scale-rule-metadata "accountName=$STORAGE_ACCOUNT_NAME" "queueName=$QUEUE_NAME" "queueLength=1" \
        --scale-rule-auth "connection=connection-string-secret" \
        --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
        --cpu "0.5" \
        --memory "1Gi" \
        --secrets "connection-string-secret=$QUEUE_CONNECTION_STRING" \
        --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io" \
        --env-vars "AZURE_STORAGE_QUEUE_NAME=$QUEUE_NAME" "AZURE_STORAGE_CONNECTION_STRING=secretref:connection-string-secret"
    

    下表描述命令中使用的索引鍵參數。

    參數 描述
    --replica-timeout 復本可以執行的持續時間上限。
    --min-executions 每個輪詢間隔執行的作業執行數目下限。
    --max-executions 每個輪詢間隔要執行的作業執行數目上限。
    --polling-interval 要評估縮放規則的輪詢間隔。
    --scale-rule-name 縮放規則的名稱。
    --scale-rule-type 要使用的縮放規則類型。
    --scale-rule-metadata 縮放規則的元數據。
    --scale-rule-auth 調整規則的驗證。
    --secrets 要用於作業的秘密。
    --registry-server 要用於作業的容器登錄伺服器。 針對 Azure Container Registry,命令會自動設定驗證。
    --env-vars 要用於作業的環境變數。

    調整規則組態會定義要監視的事件來源。 它會在每個輪詢間隔上進行評估,並判斷要觸發的作業執行數目。 若要深入瞭解,請參閱 設定調整規則

事件驅動作業現在會在 Container Apps 環境中建立。

檢查部署

作業會設定為每隔 60 秒評估一次調整規則,以檢查佇列中的訊息數目。 針對每個評估期間,它會針對佇列中的每個訊息啟動新的作業執行,最多 10 次執行。

若要確認作業已正確設定,您可以將某些訊息傳送至佇列、確認作業執行已啟動,並將訊息記錄至作業執行記錄。

  1. 將訊息傳送至佇列。

    az storage message put \
        --content "Hello Queue Reader Job" \
        --queue-name "$QUEUE_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    
  2. 列出作業的執行。

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output json
    

    由於作業已設定為每隔 60 秒評估一次調整規則,因此可能需要最多一分鐘的時間,作業執行才會啟動。 重複命令,直到您看到作業執行,且其狀態為 Succeeded

  3. 執行下列命令以查看記錄的訊息。 這些命令需要 Log Analytics 擴充功能,因此請接受要求時安裝延伸模組的提示。

    LOG_ANALYTICS_WORKSPACE_ID=`az containerapp env show --name $ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`
    
    az monitor log-analytics query \
        --workspace "$LOG_ANALYTICS_WORKSPACE_ID" \
        --analytics-query "ContainerAppConsoleLogs_CL | where ContainerJobName_s == '$JOB_NAME' | order by _timestamp_d asc"
    

    ContainerAppConsoleLogs_CL 數據表就緒之前,命令會傳回錯誤: BadArgumentError: The request had some invalid properties。 請等候幾分鐘後再試。

提示

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

清除資源

完成後,請執行下列命令來刪除包含您容器應用程式資源的資源群組。

警告

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

az group delete \
    --resource-group $RESOURCE_GROUP

下一步