教學課程:使用 Azure 容器應用程式來部署事件驅動作業
Azure 容器應用程式的作業 (部分機器翻譯) 可讓您執行會在執行一段有限時間後結束的容器化工作。 您可以透過手動、依照排程或根據事件來觸發作業的執行。 最適合使用作業來進行的工作包括資料處理、機器學習、資源清理,或任何需要無伺服器暫時性計算資源的案例。
在本教學課程中,您會了解如何使用事件驅動作業 (部分機器翻譯)。
- 建立容器應用程式環境以部署容器應用程式
- 建立 Azure 儲存體佇列以將訊息傳送至容器應用程式
- 建置會執行作業的容器映像
- 將作業部署至容器應用程式環境
- 確認容器應用程式已處理佇列訊息
您建立的作業會針對傳送至 Azure 儲存體佇列的每個訊息來開始執行。 每個作業執行所執行的容器都會執行下列步驟:
- 從佇列中取得一則訊息。
- 將訊息記錄至作業執行記錄。
- 從佇列中刪除該訊息。
- 結束。
重要
縮放器會監視佇列的長度以確定要啟動的工作數。 為了準確調整,在工作執行完成處理訊息之前,請勿從佇列中刪除該訊息。
您在本教學課程中執行的作業,其原始程式碼可在 Azure 範例 GitHub 存放庫 (英文) 中取得。
必要條件
設定
若要從 CLI 登入 Azure,請執行下列命令並遵循提示來完成驗證流程。
az login
確定您是透過升級命令執行最新版的 CLI。
az upgrade
安裝最新版的 Azure 容器應用程式 CLI 延伸模組。
az extension add --name containerapp --upgrade
如果您尚未在 Azure 訂用帳戶中註冊
Microsoft.App
和Microsoft.OperationalInsights
命名空間,請進行註冊。az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights
既然已完成您的 Azure CLI 設定,便可定義本文中使用的環境變數。
RESOURCE_GROUP="jobs-quickstart" LOCATION="northcentralus" ENVIRONMENT="env-jobs-quickstart" JOB_NAME="my-job"
建立容器應用程式環境
由於 Azure 容器應用程式環境可作為容器應用程式和作業的安全界限,因此讓其共用相同的網路並彼此交流。
使用下列命令建立資源群組。
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"
使用下列命令建立容器應用程式環境。
az containerapp env create \ --name "$ENVIRONMENT" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION"
設定儲存體佇列
作業會使用 Azure 儲存體佇列來接收訊息。 在本節中,您會建立儲存體帳戶和佇列。
定義儲存體帳戶的名稱。
STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>" QUEUE_NAME="myqueue"
將
<STORAGE_ACCOUNT_NAME>
取代為儲存體帳戶的唯一名稱。 儲存體帳戶名稱必須是 Azure 中唯一的,且長度為 3 到 24 個字元,僅包含數字和小寫字母。建立 Azure 儲存體帳戶。
az storage account create \ --name "$STORAGE_ACCOUNT_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Standard_LRS \ --kind StorageV2
將佇列的連接字串儲存到變數中。
QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv`
建立訊息佇列。
az storage queue create \ --name "$QUEUE_NAME" \ --account-name "$STORAGE_ACCOUNT_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
建置和部署作業
若要部署作業,您必須先建置作業的容器映像,並將其推送至登錄。 然後,您可以將作業部署至容器應用程式環境。
定義容器映像和登錄的名稱。
CONTAINER_IMAGE_NAME="queue-reader-job:1.0" CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
將
<CONTAINER_REGISTRY_NAME>
取代為容器登錄的唯一名稱。 容器登錄名稱必須是「Azure 內的唯一名稱」,且長度為 5 到 50 個字元,僅包含數字和小寫字母。建立容器登錄庫。
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Basic \ --admin-enabled true
作業的原始程式碼可在 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"
映像現在可在容器登錄中取得了。
在容器應用程式環境中建立作業。
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 個。
若要驗證作業是否有正確設定,您可以將某些訊息傳送至佇列、確認作業執行已啟動,並將訊息記錄至作業執行記錄。
將訊息傳送至佇列。
az storage message put \ --content "Hello Queue Reader Job" \ --queue-name "$QUEUE_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
列出作業的執行。
az containerapp job execution list \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --output json
由於作業會設定為每隔 60 秒評估一次縮放規則,因此最多可能需要一分鐘的時間,作業的執行才會開始。 重複該命令,直到您看到作業執行且其狀態為
Succeeded
。執行下列命令以查看所記錄的訊息。 這些命令需要 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