Azure Container Apps 中的作業
Azure Container Apps 作業可讓您執行在有限期間內執行的容器化工作並結束。 您可以使用作業執行工作,例如資料處理、機器學習,或任何視需求處理的案例。
容器應用程式和作業會在相同的 環境中執行,讓他們共用網路和記錄等功能。
比較容器應用程式和作業
Azure Container Apps 中有兩種類型的計算資源:應用程式和作業。
應用程式是持續執行的服務。 如果應用程式中的容器失敗,它會自動重新啟動。 應用程式的範例包括 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 部署至 Container Apps。 |
使用 Azure WebJobs SDK 的事件驅動應用程式 | App | 設定每個事件來源的調整規則 。 |
概念
Container Apps 環境是一或多個容器應用程式和作業的安全界限。 作業牽涉到幾個重要概念:
- 作業: 作業會定義用於每個作業執行的預設組態。 組態包含要使用的容器映像、要配置的資源,以及要執行的命令。
- 作業執行: 作業執行是手動、依排程或回應事件所觸發之作業的單一執行。
- 作業複本: 一般作業執行會執行作業組態所定義的一個複本。 在進階案例中,作業執行可以執行多個複本。
作業觸發程序類型
作業的觸發程序類型決定作業的啟動方式。 可供使用的觸發程序類型如下:
- 手動:手動作業會依需求觸發。
- 排程:排程的工作會在特定時間觸發,而且可以重複執行。
- 事件:事件驅動工作是由訊息抵達佇列等事件所觸發。
手動作業
手動作業會隨選使用 Azure CLI、Azure 入口網站 或 Azure Resource Manager API 的要求來觸發。
手動作業的範例包括:
- 一次處理工作,例如將數據從一個系統移轉至另一個系統。
- 以容器應用程式身分執行的電子商務網站會啟動作業執行,以在訂單下單時處理清查。
若要建立手動作業,請使用作業類型 Manual
。
若要使用 Azure CLI 建立手動作業,請使用 az containerapp job create
命令。 下列範例會在名為 的資源群組中建立名為 my-job
my-resource-group
的手動作業,以及名為 my-environment
的 Container Apps 環境:
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
。
Container Apps 作業會使用cron運算式來定義排程。 它支援標準 cron 運算式格式,其中包含五個字段的分鐘、小時、月、月、月和日。 以下是cron表達式的範例:
運算式 | 描述 |
---|---|
*/5 * * * * |
每隔 5 分鐘執行一次。 |
0 */2 * * * |
每隔兩小時執行一次。 |
0 0 * * * |
每天午夜執行。 |
0 0 * * 0 |
每星期天午夜執行一次。 |
0 0 1 * * |
在每個月的第一天午夜執行。 |
排程工作中的 Cron 運算式會以國際標準時間 (UTC) 進行評估。
若要使用 Azure CLI 建立排程工作,請使用 az containerapp job create
命令。 下列範例會在名為 的資源群組中建立名為 my-job
my-resource-group
的排程工作,以及名為 my-environment
的 Container Apps 環境:
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-job
my-resource-group
的事件驅動作業,以及名為 my-environment
的 Container Apps 環境:
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
取得作業執行歷程記錄
每個 Container Apps 作業都會維護最近執行作業的歷程記錄。
若要使用 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 次成功和失敗的作業執行。
若要列出作業的所有執行,或從作業取得詳細的輸出,請查詢針對您的 Container Apps 環境設定的記錄提供者。
進階作業組態
Container Apps 作業支援進階組態選項,例如容器設定、重試、逾時和平行處理原則。
容器設定
容器設定會定義要在每個作業執行複本中執行的容器。 其中包括環境變數、秘密和資源限制。 如需詳細資訊,請參閱 容器。 在單一作業中執行多個容器是進階案例。 大部分的作業都會執行單一容器。
作業設定
下表包含您可以設定的作業設定:
設定 | 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 憑證