教學課程:使用 Azure Container Apps 部署事件驅動作業
Azure Container Apps 作業 可讓您執行容器化工作,以有限持續時間執行並結束。 您可以手動、依排程或根據事件觸發作業執行。 作業最適合用於數據處理、機器學習,或任何需要無伺服器暫時計算資源之案例的工作。
在本教學課程中,您將瞭解如何使用 事件驅動工作。
- 建立容器應用程式環境以部署容器應用程式
- 建立 Azure 儲存體佇列以將訊息傳送至容器應用程式
- 建置執行作業的容器映像
- 將作業部署至容器應用程式環境
- 確認容器應用程式已處理佇列訊息
您建立的作業會針對傳送至 Azure 儲存體 佇列的每個訊息啟動執行。 每個作業執行都會執行執行下列步驟的容器:
- 從佇列取得一則訊息。
- 將訊息記錄至作業執行記錄。
- 從佇列中刪除訊息。
- 出口。
重要
縮放程式會監視佇列的長度,以判斷要啟動的作業數目。 若要進行精確的調整,在作業執行完成處理之前,請勿從佇列中刪除訊息。
您在本教學課程中執行的作業原始碼可在 Azure 範例 GitHub 存放庫中取得。
必要條件
設定
若要從 CLI 登入 Azure,請執行下列命令,並遵循提示來完成驗證程式。
az login
請確定您是透過升級命令執行最新版的 CLI。
az upgrade
安裝最新版的 Azure Container Apps CLI 擴充功能。
az extension add --name containerapp --upgrade
Microsoft.App
如果您尚未在 Azure 訂用帳戶中註冊 和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 Container Apps 環境可作為容器應用程式和作業的安全界限,讓它們可以共用相同的網路並彼此通訊。
使用下列命令建立資源群組。
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"
使用下列命令建立 Container Apps 環境。
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 Apps 環境。
定義容器映像和登錄的名稱。
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"
映像現在可在容器登錄中使用。
在 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 次執行。
若要確認作業已正確設定,您可以將某些訊息傳送至佇列、確認作業執行已啟動,並將訊息記錄至作業執行記錄。
將訊息傳送至佇列。
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