Azure 容器應用程式中的作業
Azure 容器應用程式作業可讓您執行容器化工作,在有限的持續時間內執行並結束。 您可以使用作業執行工作,例如資料處理、機器學習,或任何視需求處理的案例。
容器應用程式和作業會在同一個環境中執行,使容器應用程式和作業共用網路和記錄等功能。
比較容器應用程式和作業
Azure 容器應用程式中有兩種類型的計算資源:應用程式和作業。
應用程式是持續執行的服務。 如果應用程式中的容器失敗,它會自動重新啟動。 應用程式的範例包含 HTTP API、Web 應用程式和持續處理輸入的背景服務。
作業是啟動、執行有限持續時間,並在完成時結束的工作。 每個作業執行通常會執行單一工作單位。 作業執行會依照排程或回應事件手動啟動。 作業的範例包括依需求和排程工作執行的批次程序。
範例案例
下表比較應用程式和作業的常見案例:
容器 | 計算資源 | 備註 |
---|---|---|
提供 Web 內容和 API 要求的 HTTP 伺服器 | App | 設定HTTP 級別規則。 |
每晚產生財務報告的程序 | 工作 (Job) | 使用排程 作業類型並設定 cron 運算式。 |
持續執行的服務可處理來自 Azure 服務匯流排佇列的訊息 | App | 設定自訂級別規則。 |
處理來自 Azure 佇列的單一訊息或少量訊息並結束的工作 | 工作 (Job) | 使用事件作業類型,並設定自定義調整規則,以在佇列中有訊息時觸發作業執行。 |
依需求觸發並在完成時結束的背景工作 | 工作 (Job) | 使用手動作業類型,並使用 API 手動或以程式設計方式啟動執行。 |
自我控管的 GitHub Actions 執行器或 Azure Pipelines 代理程式 | 工作 (Job) | 使用事件作業類型,並設定 GitHub Actions 或 Azure Pipelines 級別規則。 |
Azure Functions 應用程式 | App | 將 Azure Functions 部署至容器應用程式。 |
使用 Azure WebJobs SDK 的事件導向應用程式 | App | 為每個事件來源設定級別規則。 |
概念
容器應用程式環境是一或多個容器應用程式和作業的安全界限。 作業牽涉到幾個重要概念:
- 作業: 作業會定義用於每個作業執行的預設組態。 組態包含要使用的容器映像、要配置的資源,以及要執行的命令。
- 作業執行: 作業執行是手動、依排程或回應事件所觸發之作業的單一執行。
- 作業複本: 一般作業執行會執行作業組態所定義的一個複本。 在進階案例中,作業執行可以執行多個複本。
權限
若要啟動容器應用程式作業,需要適當的許可權。 請確定您的使用者帳戶或服務主體已指派下列角色:
- Azure Container Apps 參與者: 允許建立和管理容器應用程式和作業的許可權。
- Azure 監視器讀取器(選擇性): 啟用檢視作業的監視數據。
- 自訂角色: 如需更細微的許可權,您可以使用下列動作來建立自定義角色:
- Microsoft.App/containerApps/jobs/start/action
- Microsoft.App/containerApps/jobs/read
- Microsoft.App/containerApps/jobs/executions/read
如需指派角色和許可權的詳細資訊,請參閱 Azure 角色型 存取控制。
作業觸發類型
作業的觸發程序類型決定作業的啟動方式。 可供使用的觸發程序類型如下:
- 手動:手動作業會視需求觸發。
- 排程:在特定時間觸發並可重複執行排程的作業。
- 事件:事件,例如訊息抵達佇列,觸發事件驅動工作。
手動作業
手動作業會隨選使用 Azure CLI、Azure 入口網站 或 Azure Resource Manager API 的要求來觸發。
手動作業的範例包含:
- 一次處理工作,例如將資料從一個系統移轉至另一個系統。
- 以容器應用程式身分執行的電子商務網站會啟動作業執行,以在訂單下單時處理庫存。
若要建立手動作業,請使用作業類型 Manual
。
若要使用 Azure CLI 建立手動作業,請使用 az containerapp job create
命令。 下列範例會在名為 my-resource-group
的資源群組和名為 my-environment
的容器應用程式環境中,建立名為 my-job
的手動作業:
az containerapp job create \
--name "my-job" --resource-group "my-resource-group" --environment "my-environment" \
--trigger-type "Manual" \
--replica-timeout 1800 \
--image "mcr.microsoft.com/k8se/quickstart-jobs:latest" \
--cpu "0.25" --memory "0.5Gi"
mcr.microsoft.com/k8se/quickstart-jobs:latest
映像是等待幾秒鐘執行作業的公開範例容器映像,將訊息列印至主控台然後結束。 若要驗證和使用私人容器映像,請參閱容器 (部分機器翻譯)。
上述命令只會建立作業。 若要開始作業執行,請參閱視需要啟動作業執行 (部分機器翻譯)。
Scheduled jobs
若要建立排程的作業,請使用作業類型 Schedule
。
容器應用程式作業會使用 cron 運算式來定義排程。 這會支援標準 cron 運算式格式,其中包含分鐘、小時、當月日期、月、月和當週日期五個欄位。 以下是 cron 運算式的範例:
運算式 | 描述 |
---|---|
*/5 * * * * |
每隔 5 分鐘執行一次。 |
0 */2 * * * |
每隔 2 小時執行一次。 |
0 0 * * * |
每天午夜執行一次。 |
0 0 * * 0 |
每星期天午夜執行一次。 |
0 0 1 * * |
在每個月第一天的午夜執行。 |
排程工作中的 Cron 運算式會以國際標準時間 (UTC) 進行評估。
若要使用 Azure CLI 建立排程的作業,請使用 az containerapp job create
命令。 下列範例會在名為 my-resource-group
的資源群組和名為 my-environment
的容器應用程式環境中,建立名為 my-job
的排程作業:
az containerapp job create \
--name "my-job" --resource-group "my-resource-group" --environment "my-environment" \
--trigger-type "Schedule" \
--replica-timeout 1800 \
--image "mcr.microsoft.com/k8se/quickstart-jobs:latest" \
--cpu "0.25" --memory "0.5Gi" \
--cron-expression "*/1 * * * *"
mcr.microsoft.com/k8se/quickstart-jobs:latest
映像是等待幾秒鐘執行作業的公開範例容器映像,將訊息列印至主控台然後結束。 若要驗證和使用私人容器映像,請參閱容器 (部分機器翻譯)。
此 cron 運算式 */1 * * * *
每分鐘會執行作業。
事件驅動作業
事件驅動作業是由支援自訂縮放程式的事件所觸發。 事件驅動作業的範例包括:
- 將新訊息新增至 Azure 服務匯流排、Kafka 或 RabbitMQ 等佇列時執行的作業。
- 自我裝載 GitHub Actions 執行器或 Azure DevOps 代理程式在工作流程或管線中排入佇列時執行新工作。
容器應用程式和事件驅動作業會使用 KEDA 調整工具。 這些皆會評估輪詢間隔上的縮放規則,以測量事件來源的事件量,但使用結果的方式不同。
在應用程式中,每個複本會持續處理事件,而縮放規則會決定要執行的複本數量以符合需求。 在事件驅動作業中,每個作業執行通常會處理單一事件,而調整規則會決定要執行的作業執行數目。
當每個事件需要具有專用資源或需要長時間執行的新容器執行個體時,便可使用作業。 事件驅動作業在概念上與 KEDA 縮放作業 類似。
若要建立事件驅動作業,請使用作業類型 Event
。
若要使用 Azure CLI 建立事件驅動作業,請使用 az containerapp job create
命令。 下列範例會在名為 my-resource-group
的資源群組和名為 my-environment
的容器應用程式環境中,建立名為 my-job
的事件驅動作業:
az containerapp job create \
--name "my-job" --resource-group "my-resource-group" --environment "my-environment" \
--trigger-type "Event" \
--replica-timeout 1800 \
--image "docker.io/myuser/my-event-driven-job:latest" \
--cpu "0.25" --memory "0.5Gi" \
--min-executions "0" \
--max-executions "10" \
--scale-rule-name "queue" \
--scale-rule-type "azure-queue" \
--scale-rule-metadata "accountName=mystorage" "queueName=myqueue" "queueLength=1" \
--scale-rule-auth "connection=connection-string-secret" \
--secrets "connection-string-secret=<QUEUE_CONNECTION_STRING>"
此範例會設定 Azure 儲存體佇列縮放規則。
如需完整的教學課程,請參閱部署事件驅動作業。
視需要啟動作業執行
針對任何作業類型,您可以視需要啟動作業執行。
若要使用 Azure CLI 啟動作業執行,請使用 az containerapp job start
命令。 下列範例會在名為 my-resource-group
資源群組中,啟動執行名為 my-job
的作業:
az containerapp job start --name "my-job" --resource-group "my-resource-group"
當您開始執行作業時,便可選擇覆寫作業的組態。 例如,您可以覆寫環境變數或啟動命令,以使用不同的輸入來執行相同的作業。 覆寫的組態僅用於目前的執行,而且不會變更作業的組態。
重要
覆寫組態時,作業的整個範本組態會取代為新的組態。 請確定新的組態包含所有必要的設定。
若要在開始執行時覆寫作業的組態,請使用 az containerapp job start
命令並傳遞包含要用於執行範本的 YAML 檔案。 下列範例會在名為 my-resource-group
的資源群組中,啟動執行名為 my-job
的作業。
使用 az containerapp job show
命令擷取作業的目前組態,並將範本儲存至名為 my-job-template.yaml
的檔案:
az containerapp job show --name "my-job" --resource-group "my-resource-group" --query "properties.template" --output yaml > my-job-template.yaml
此選項 --query "properties.template"
只會傳回作業的範本組態。
編輯 my-job-template.yaml
檔案以覆寫作業的組態。 例如,若要覆寫環境變數,請修改 env
區段:
containers:
- name: print-hello
image: ubuntu
resources:
cpu: 1
memory: 2Gi
env:
- name: MY_NAME
value: Azure Container Apps jobs
args:
- /bin/bash
- -c
- echo "Hello, $MY_NAME!"
使用樣本啟動作業:
az containerapp job start --name "my-job" --resource-group "my-resource-group" \
--yaml my-job-template.yaml
顯示作業執行歷程記錄
每個容器應用程式作業皆會維護最近作業執行的歷程記錄。
若要使用 Azure CLI 取得作業執行的狀態,請使用 az containerapp job execution list
命令。 下列範例會在名為 my-resource-group
的資源群組中,傳回名為 my-job
作業的最新執行狀態:
az containerapp job execution list --name "my-job" --resource-group "my-resource-group"
排程和事件基礎作業的執行歷程記錄僅限於最近 100 次成功和失敗的作業執行。
若要列出作業的所有執行,或從作業取得詳細的輸出,請查詢針對您的容器應用程式環境設定的記錄提供者。
進階作業組態
容器應用程式作業支援進階組態選項,例如容器設定、重試、逾時和平行處理原則。
容器設定
容器設定會定義要在每個作業執行複本中執行的容器。 這些包含環境變數、祕密和資源限制。 如需詳細資訊,請參閱容器 (部分機器翻譯)。 在單一作業中執行多個容器是進階案例。 大部分的作業都會執行單一容器。
工作設定
下表包含您可以設定的作業設定:
設定 | Azure Resource Manager 屬性 | CLI 參數 | 描述 |
---|---|---|---|
工作類型 | triggerType |
--trigger-type |
作業類型。 (Manual 、Schedule 或 Event ) |
複本逾時 | replicaTimeout |
--replica-timeout |
等候複本完成的秒數上限。 |
輪詢間隔 | pollingInterval |
--polling-interval |
輪詢事件之間的等候時間,以秒為單位。 預設值為 30 秒。 |
複本重試限制 | replicaRetryLimit |
--replica-retry-limit |
重試失敗複本的次數上限。 若要在不重試的情況下讓複本失敗,請將值設定為 0 。 |
平行處理原則 | parallelism |
--parallelism |
每次執行作業要執行的複本數量。 對於大部分的工作,請將值設定為 1 。 |
複本完成計數 | replicaCompletionCount |
--replica-completion-count |
要成功完成以成功執行的複本數量。 大部分都等於或小於平行處理原則。 對於大部分的工作,請將值設定為 1 。 |
範例
下列範例會建立具有進階組態選項的作業:
az containerapp job create \
--name "my-job" --resource-group "my-resource-group" --environment "my-environment" \
--trigger-type "Schedule" \
--replica-timeout 1800 --replica-retry-limit 3 --replica-completion-count 5 --parallelism 5 \
--image "myregistry.azurecr.io/quickstart-jobs:latest" \
--cpu "0.25" --memory "0.5Gi" \
--command "/startup.sh" \
--env-vars "MY_ENV_VAR=my-value" \
--cron-expression "0 0 * * *" \
--registry-server "myregistry.azurecr.io" \
--registry-username "myregistry" \
--registry-password "myregistrypassword"
作業限制
不支援下列功能:
- Dapr
- 輸入和相關功能,例如:自訂網域和 SSL 憑證