Share via


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 ActionsAzure Pipelines 調整規則。
Azure Functions 應用程式 App 將 Azure Functions 部署至 Container Apps
使用 Azure WebJobs SDK 的事件驅動應用程式 App 設定每個事件來源的調整規則

概念

Container Apps 環境是一或多個容器應用程式和作業的安全界限。 作業牽涉到幾個重要概念:

  • 作業: 作業會定義用於每個作業執行的預設組態。 組態包含要使用的容器映像、要配置的資源,以及要執行的命令。
  • 作業執行: 作業執行是手動、依排程或回應事件所觸發之作業的單一執行。
  • 作業複本: 一般作業執行會執行作業組態所定義的一個複本。 在進階案例中,作業執行可以執行多個複本。

Azure Container Apps 作業概觀。

作業觸發程序類型

作業的觸發程序類型決定作業的啟動方式。 可供使用的觸發程序類型如下:

  • 手動:手動作業會依需求觸發。
  • 排程:排程的工作會在特定時間觸發,而且可以重複執行。
  • 事件:事件驅動工作是由訊息抵達佇列等事件所觸發。

手動作業

手動作業會隨選使用 Azure CLI、Azure 入口網站 或 Azure Resource Manager API 的要求來觸發。

手動作業的範例包括:

  • 一次處理工作,例如將數據從一個系統移轉至另一個系統。
  • 以容器應用程式身分執行的電子商務網站會啟動作業執行,以在訂單下單時處理清查。

若要建立手動作業,請使用作業類型 Manual

若要使用 Azure CLI 建立手動作業,請使用 az containerapp job create 命令。 下列範例會在名為 的資源群組中建立名為 my-jobmy-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-jobmy-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 * * * * 會每分鐘執行一次作業。

事件驅動工作

事件驅動工作是由支援 自定義縮放程式的事件所觸發。 事件驅動作業的範例包括:

容器應用程式和事件驅動作業會使用 KEDA 縮放程式。 它們都會評估輪詢間隔上的調整規則,以測量事件來源的事件量,但使用結果的方式不同。

在應用程式中,每個復本會持續處理事件,而調整規則會決定要執行的複本數目以符合需求。 在事件驅動作業中,每個作業執行通常會處理單一事件,而調整規則會決定要執行的作業執行數目。

當每個事件需要具有專用資源的新容器實例,或需要長時間執行時,請使用作業。 事件驅動作業在概念上類似於 KEDA調整作業

若要建立事件驅動作業,請使用作業類型 Event

若要使用 Azure CLI 建立事件驅動作業,請使用 az containerapp job create 命令。 下列範例會在名為 的資源群組中建立名為 my-jobmy-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 作業的類型。 (ManualScheduleEvent
複本逾時 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 憑證

下一步