Azure Container Apps의 작업

Azure Container Apps 작업을 사용하면 한정된 기간 동안 실행되는 컨테이너화된 작업을 실행하고 종료할 수 있습니다. 작업을 사용하여 데이터 처리, 기계 학습 또는 주문형 처리가 필요한 시나리오와 같은 작업을 수행할 수 있습니다.

컨테이너 앱과 작업은 동일한 환경에서 실행되므로 네트워킹 및 로깅과 같은 기능을 공유할 수 있습니다.

컨테이너 앱 및 작업 비교

Azure Container Apps에는 앱과 작업이라는 두 가지 유형의 컴퓨팅 리소스가 있습니다.

앱은 지속적으로 실행되는 서비스입니다. 앱의 컨테이너가 실패하면 자동으로 다시 시작됩니다. 앱의 예로는 입력을 지속적으로 처리하는 HTTP API, 웹앱 및 백그라운드 서비스가 있습니다.

작업(Job)은 시작되어 한정된 기간 동안 실행되었다가 완료 시 종료되는 작업(Task)입니다. 작업(Job)의 각 실행은 일반적으로 단일 작업(Work) 단위를 수행합니다. 작업 실행은 수동으로, 일정에 따라 또는 이벤트에 대한 응답으로 시작됩니다. 작업(Job)의 예로는 요청 시 실행되는 일괄 처리 프로세스와 예약된 작업(Task)이 포함됩니다.

예제 시나리오

다음 표에서는 앱 및 작업에 대한 일반적인 시나리오를 비교합니다.

컨테이너 컴퓨팅 리소스 주의
웹 콘텐츠 및 API 요청을 제공하는 HTTP 서버 App HTTP 크기 조정 규칙을 구성합니다.
야간에 재무 보고서를 생성하는 프로세스 작업 Schedule 작업 유형을 사용하여 cron 식을 구성합니다.
Azure Service Bus 큐에서 메시지를 처리하는 지속적으로 실행되는 서비스 App 사용자 지정 크기 조정 규칙을 구성합니다.
Azure 큐에서 단일 메시지 또는 작은 일괄 처리 메시지를 처리하고 종료하는 작업 작업 Event 작업 유형을 사용하고 사용자 지정 크기 조정 규칙을 구성하여 큐에 메시지가 있을 때 작업 실행을 트리거합니다.
요청 시 트리거되고 완료되면 종료되는 백그라운드 작업 작업 Manual 작업 유형을 사용하고 API를 사용하여 수동으로 또는 프로그래밍 방식으로 실행을 시작할 수 있습니다.
자체 호스팅 GitHub Actions 실행기 또는 Azure Pipelines 에이전트 작업 Event 작업 유형을 사용하고 GitHub Actions를 구성하거나 Azure Pipelines 크기 조정 규칙을 구성합니다.
Azure Functions 앱 App Azure Functions를 Container Apps에 배포합니다.
Azure WebJobs SDK를 사용하는 이벤트 기반 앱 App 각 이벤트 원본에 대한 크기 조정 규칙을 구성합니다.

개념

Container Apps 환경은 하나 이상의 Container Apps 및 작업을 둘러싼 보안 경계입니다. 작업에는 다음과 같은 몇 가지 주요 개념이 포함됩니다.

  • 작업: 작업은 각 작업 실행에 사용되는 기본 구성을 정의합니다. 구성에는 사용할 컨테이너 이미지, 할당할 리소스, 실행할 명령이 포함됩니다.
  • 작업 실행: 작업 실행은 수동으로나 일정에 따라 또는 이벤트에 대한 응답으로 트리거되는 작업의 단일 실행입니다.
  • 작업 복제본: 일반적인 작업 실행은 작업의 구성에 의해 정의된 하나의 복제본을 실행합니다. 고급 시나리오에서는 작업 실행이 여러 복제본을 실행할 수 있습니다.

Azure Container Apps 작업 개요

작업 트리거 유형

작업의 트리거 유형은 작업이 시작되는 방법을 결정합니다. 사용할 수 있는 트리거 유형은 다음과 같습니다.

  • Manual: 수동 작업은 요청 시 트리거됩니다.
  • Schedule: 예약된 작업은 특정 시간에 트리거되며 반복적으로 실행할 수 있습니다.
  • Event: 이벤트 기반 작업은 큐에 도착하는 메시지와 같은 이벤트에 의해 트리거됩니다.

수동 작업

수동 작업은 Azure CLI, Azure Portal 또는 Azure Resource Manager API에 대한 요청을 사용하여 주문형으로 트리거됩니다.

수동 작업의 예는 다음과 같습니다.

  • 한 시스템에서 다른 시스템으로 데이터 마이그레이션과 같은 작업을 한 번 처리합니다.
  • 컨테이너 앱으로 실행되는 전자 상거래 사이트는 주문이 있을 때 인벤토리를 처리하는 작업 실행을 시작합니다.

수동 작업을 만들려면 작업 유형 Manual을 사용합니다.

Azure CLI를 사용하여 수동 작업을 만들려면 az containerapp job create 명령을 사용합니다. 다음 예제에서는 my-resource-group 리소스 그룹 및 my-environment Container Apps 환경에서 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을 사용합니다.

Container Apps 작업은 cron 식을 사용하여 일정을 정의합니다. 분, 시, 일, 월, 요일에 대한 5개 필드가 있는 표준 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 Container Apps 환경에서 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 * * * *은 1분마다 작업을 실행합니다.

이벤트 기반 작업

이벤트 기반 작업은 지원되는 사용자 지정 스칼라 이벤트에 의해 트리거됩니다. 이벤트 기반 작업의 예는 다음과 같습니다.

  • Azure Service Bus, Kafka 또는 RabbitMQ와 같은 큐에 새 메시지가 추가되면 실행되는 작업입니다.
  • 워크플로 또는 파이프라인에서 새 작업이 큐에 대기될 때 실행되는 자체 호스팅 GitHub Actions 실행기 또는 Azure DevOps 에이전트입니다.

컨테이너 앱 및 이벤트 기반 작업은 KEDA 스칼라를 사용합니다. 둘 다 폴링 간격에 따라 크기 조정 규칙을 평가하여 이벤트 원본에 대한 이벤트 볼륨을 측정하지만 결과를 사용하는 방식은 다릅니다.

앱에서 각 복제본은 지속적으로 이벤트를 처리하고 크기 조정 규칙은 수요를 충족하기 위해 실행할 복제본 수를 결정합니다. 이벤트 기반 작업에서 각 작업의 실행은 일반적으로 단일 이벤트를 처리하고 크기 조정 규칙은 실행할 작업 수를 결정합니다.

각 이벤트에 전용 리소스가 있는 컨테이너의 새 인스턴스가 필요하거나 오랜 시간 동안 실행해야 하는 경우 작업을 사용합니다. 이벤트 기반 작업은 개념적으로 KEDA 크기 조정 작업과 비슷합니다.

이벤트 기반 작업을 만들려면 작업 유형 Event를 사용합니다.

Azure CLI를 사용하여 이벤트 기반 작업을 만들려면 az containerapp job create 명령을 사용합니다. 다음 예제에서는 my-resource-group 리소스 그룹 및 my-environment Container Apps 환경에서 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 Storage 큐 크기 조정 규칙을 구성합니다.

전체 자습서는 이벤트 기반 작업 배포를 참조하세요.

요청 시 작업 실행 시작

모든 작업 유형에 대해 요청 시 작업 실행을 시작할 수 있습니다.

Azure CLI를 사용하여 작업 실행을 시작하려면 az containerapp job start 명령을 사용합니다. 다음 예제에서는 my-resource-group 리소스 그룹에서 my-job이라는 작업의 실행을 시작합니다.

az containerapp job start --name "my-job" --resource-group "my-resource-group"

작업 실행을 시작할 때 작업의 구성을 재정의하도록 선택할 수 있습니다. 예를 들어 환경 변수 또는 시작 명령을 재정의하여 다른 입력으로 동일한 작업을 실행할 수 있습니다. 재정의된 구성은 현재 실행에만 사용되며 작업의 구성을 변경하지는 않습니다.

Important

구성을 재정의할 때 작업의 전체 템플릿 구성이 새 구성으로 대체됩니다. 필요한 모든 설정이 새 구성에 포함되어 있는지 확인합니다.

실행을 시작하는 동안 작업의 구성을 재정의하려면 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 리소스 관리자 속성 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 인증서)

다음 단계