共用方式為


教學課程:使用 Azure 容器應用程式來部署事件驅動作業

Azure 容器應用程式的作業 (部分機器翻譯) 可讓您執行會在執行一段有限時間後結束的容器化工作。 您可以透過手動、依照排程或根據事件來觸發作業的執行。 最適合使用作業來進行的工作包括資料處理、機器學習、資源清理,或任何需要無伺服器暫時性計算資源的案例。

在本教學課程中,您會了解如何使用事件驅動作業 (部分機器翻譯)。

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

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

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

重要

縮放器會監視佇列的長度以確定要啟動的工作數。 為了準確調整,在工作執行完成處理訊息之前,請勿從佇列中刪除該訊息。

您在本教學課程中執行的作業,其原始程式碼可在 Azure 範例 GitHub 存放庫 (英文) 中取得。

必要條件

設定

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

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

    az upgrade
    
  3. 安裝最新版的 Azure 容器應用程式 CLI 延伸模組。

    az extension add --name containerapp --upgrade
    
  4. 如果您尚未在 Azure 訂用帳戶中註冊 Microsoft.AppMicrosoft.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 容器應用程式環境可作為容器應用程式和作業的安全界限,因此讓其共用相同的網路並彼此交流。

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

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. 使用下列命令建立容器應用程式環境。

    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"
    

建置和部署作業

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

  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. 在容器應用程式環境中建立作業。

    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 要用於作業的環境變數。

    縮放規則設定會定義要監視的事件來源。 其會在每個輪詢間隔進行評估,並判斷要觸發的作業執行數目。 若要深入了解,請參閱設定縮放規則 (部分機器翻譯)。

系統現在會在容器應用程式環境中建立事件驅動作業。

檢查部署

作業會設定為每隔 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

下一步