Azure Container Apps에서의 Azure Functions 개요

Azure Functions on Azure Container Apps는 Azure Functions의 이벤트 기반 기능과 Container Apps 기능을 결합한 완전 관리형 서버리스 호스팅 환경을 제공합니다. 이 기능에는 Kubernetes 기반 오케스트레이션, Kubernetes 이벤트 기반 자동 확장(KEDA) 기반 내장 자동 확장, Dapr 통합, GPU 워크로드 지원, 사이드카 지원, 가상 네트워크(VNet) 연결, 수정 관리 등이 포함됩니다.

이 방법은 함수가 마이크로서비스, API, 웹사이트 같은 다른 컨테이너화된 앱과 함께 실행되길 원할 때 유용합니다. 함수 앱을 컨테이너화하는 것도 커스텀 의존성이 필요하거나 비용 절감을 위해 0으로 확장하고 싶을 때 도움이 됩니다. AI 추론과 같은 연산 중심 작업의 경우, 컨테이너 앱은 서버 없는 GPU와 전용 워크로드 프로필을 통한 GPU 기반 호스팅을 지원합니다.

Azure Container Apps의 통합 기능으로, 리소스 제공자 Microsoft.App 와 호출 az containerapp create시 설정을 kind=functionapp 사용해 Azure Functions 컨테이너 이미지를 직접 Azure Container Apps에 배포할 수 있습니다. 이러한 방식으로 만든 앱은 모든 Azure Container Apps 기능에 액세스할 수 있습니다. Azure 포털에서 설정 중에 Azure Functions 최적화 옵션을 선택하세요. 자세한 내용은 배포 및 설정을 참조하세요.

주요 이점

Container Apps 호스팅 모델은 컨테이너화된 워크로드의 유연성과 Azure Functions 이벤트 기반 특성을 기반으로 합니다. 다음과 같은 주요 이점을 제공합니다.

다음 표는 컨테이너 앱 기능과 플렉스 소비 플랜의 기능을 비교하는 데 도움을 줍니다.

특징 컨테이너 앱 Flex 사용 계획
0으로 조정 ✅ 예(KEDA를 통해) ✅ 예
최대 스케일 아웃 1,000(기본값 10, 구성 가능) 1,000
항상 활성화된 인스턴스 ✅ 예(통해 minReplicas) ✅ 예(항상 준비된 인스턴스를 통해)
VNet 통합 ✅ 예 ✅ 예
사용자 지정 컨테이너 지원 ✅ 예(사용자 고유의 이미지 가져오기) ❌ 제한됨(사용자 고유의 컨테이너 가져오기 없음)
GPU 지원 ✅ 예(서버리스 GPU 전용 워크로드 프로필을 통해) ❌ 아니요
기본 제공 기능 Container Apps 기능 지원. 예를 들어 KEDA, Dapr, 다중 수정 버전, mTLS, 사이드카, 수신 제어 등 함수 전용 기능
청구 모델 Container Apps 가격 책정: 소비 계획(vCPU, 메모리, 요청) 및 전용 계획(워크로드 프로필 기반) 실행 시간 + 상시 준비된 인스턴스

Flex 소비 계획 및 기타 모든 계획 및 호스팅 유형에 대한 Container Apps의 Functions를 완전히 비교하려면 Functions 크기 조정 및 호스팅 옵션을 참조하세요.

시나리오

Container Apps의 Azure Functions 특히 이벤트 기반 실행, 컨테이너 유연성 또는 다른 서비스와의 보안 통합이 필요한 경우 광범위한 사용 사례에 적합합니다.

  • 라인 오브 비즈니스 API: 라인 오브 비즈니스 애플리케이션을 위해 Azure Functions을 사용하여 사용자 지정 라이브러리, 패키지 및 API를 패키징합니다.
  • 이주와 현대화: 온프레미스 레거시 및/또는 모놀리스 애플리케이션을 컨테이너 내 클라우드 네이티브 마이크로서비스로 마이그레이션하는 것.
  • 이벤트 기반 처리: Azure Functions 프로그래밍 모델을 사용하여 Event Grid, Service Bus, Event Hubs 및 기타 이벤트 소스의 이벤트를 처리합니다.
  • AI 및 GPU 작업 부하: 영상, 이미지, 대본, 그리고 GPU 자원이 필요한 기타 컴퓨팅 집약적인 작업을 처리합니다. 자세한 내용은 Azure Container Apps 참조하세요.
  • Microservices: 다른 Container Apps 호스팅 서비스와 Azure Functions 통합합니다.
  • 사용자 지정 컨테이너: 사용자 지정 런타임 또는 사이드카가 포함된 패키지 Functions입니다.
  • 프라이빗 앱: VNet 및 내부 수신을 사용하여 내부 전용 Functions를 보호합니다.
  • .NET Aspire: .NET Aspire Azure Functions 통합하면 .NET Aspire 앱 호스트의 일부로 Azure Functions .NET 프로젝트를 개발, 디버그 및 오케스트레이션할 수 있습니다. Azure Functions 및 .NET Aspire에 대해 자세히 알아보기
  • General Functions: 지원되는 표준 Azure Functions 시나리오(예: 타이머, 파일 처리, 데이터베이스 트리거)를 실행합니다.

배포 및 설정

Azure Functions를 Azure Container Apps에 배포하려면, 함수 앱을 커스텀 컨테이너 이미지로 패키징하고 다른 컨테이너 앱처럼 배포하는데, 한 가지 주요 차이점이 있습니다. Azure CLI, Azure Resource Manager 템플릿, 또는 Bicep를 사용할 때 속성을 설정 kind=functionapp 하세요. 자세한 단계와 예시는 기능 앱 만들기를 참조하세요.

az containerapp create \
  --resource-group $RESOURCE_GROUP_NAME \
  --name $CONTAINER_APP_NAME \
  --environment $ENVIRONMENT_NAME \
  --image mcr.microsoft.com/k8se/quickstart-functions:latest \
  --ingress external \
  --target-port 80 \
  --kind functionapp \
  --query properties.outputs.fqdn

이 명령어는 함수 앱의 URL을 반환합니다. 이 URL을 복사하여 웹 브라우저에 붙여넣습니다.

Azure 포털에서 컨테이너 앱 생성 중에 Azure Functions 최적화 옵션을 선택해 Azure Functions 구성을 사용하세요.

 Azure Functions용으로 미리 구성된 컨테이너 앱을 만들 때의 Azure 포털 스크린샷

다음을 비롯한 모든 표준 배포 방법이 지원됩니다.

자세한 단계 및 예제는 공식 시작 설명서를 참조하세요.

가격 책정 및 대금 청구

Azure Container Apps의 Azure Functions는 Azure Container Apps와 동일한 가격 책정 모델을 따릅니다. 청구는 환경에 대해 선택한 플랜 유형에 따라 이루어지며, 이는 사용량 기반 또는 전용일 수 있습니다.

  • 소비 계획: 이 서버리스 컴퓨팅 옵션은 앱이 실행되는 동안 사용하는 리소스에 대해서만 요금을 청구합니다.
  • 전용 계획: 이 옵션은 사용자 지정된 컴퓨팅 리소스를 제공하여 각 워크로드 프로필에 할당된 인스턴스에 대한 요금을 청구합니다.

플랜을 선택하면 청구 계산 방법이 결정됩니다. 환경 내의 다른 애플리케이션은 서로 다른 계획을 사용할 수 있습니다.

청구 세부사항:

  • Container Apps 내에서 Azure Functions 프로그래밍 모델을 사용하는 데 추가 요금이 부과되지 않습니다.
  • Durable Functions 및 기타 고급 패턴은 동일한 Container Apps 가격 책정 모델에서 지원 및 청구됩니다. 자세한 청구 메커니즘 및 예제는 Azure Container Apps 설명서의 Billing을 참조하세요.

이벤트 기반 크기 조정

Azure Functions on Container Apps는 C#, JavaScript / TypeScript(Node.js), Python, Java, PowerShell, 커스텀 컨테이너(자체 이미지 가져오기 가능) 등 Azure Functions에서 제공되는 모든 주요 언어 런타임을 지원합니다.

Azure Container Apps 에서 실행되는 Azure Functions 이벤트 원본에 따라 크기 조정 규칙을 자동으로 구성하므로 기본 환경에서 수동 KEDA 크기 조정 규칙 정의가 필요하지 않습니다. 따라서 Azure 포털의 "크기 조정 규칙 추가" 단추가 Container Apps의 Functions에 대해 사용하지 않도록 설정됩니다. 그러나 최소 및 최대 복제본 수를 정의하여 크기 조정 경계를 설정하고 리소스 할당에 대한 제어를 유지할 수 있습니다.

고유한 크기 조정 규칙을 제공해야 하는 경우 .를 사용하여 allowScalingRuleOverride플랫폼 생성 규칙을 옵트아웃할 수 있습니다. 자세한 내용은 Container Apps에서 Azure Functions 대한 자동 생성된 KEDA 크기 조정 규칙 재정의 참조하세요.

플랫폼은 host.json 구성 또는 트리거 특성에서 가져온 함수 트리거 매개 변수를 적절한 KEDA 스케일러 매개 변수로 자동 변환합니다. Functions 트리거 구성이 KEDA 크기 조정 매개 변수에 매핑되는 방법에 대한 자세한 참조는 Azure Functions KEDA 크기 조정 매핑 참조하세요.

컨테이너 앱에서는 모든 표준 Azure Functions 트리거 및 바인딩이 지원되며, 다음의 예외 사항이 있습니다.

  • Blob Storage 트리거 자동 크기 조정: Event Grid를 원본으로 사용하는 경우에만 작동합니다. 이벤트 구독을 사용하여 Blob 컨테이너에서 Azure Functions를 트리거링하는 방법에 대해 자세히 알아봅니다.
  • Durable Functions 자동 확장: Microsoft SQL Server와 Durable Task Scheduler 스토리지 제공자만 지원합니다. 자세한 내용은 SQL Server로 Deploy Durable Functions를 참조하세요.
  • 자동 스케일링은 다음 항목에 지원되지 않습니다:
    • Azure Cache for Redis
    • Azure SQL

관리 ID는 이를 허용하는 트리거 및 바인딩에 대해 지원됩니다. 다음 용도로도 이용할 수 있습니다.

지원되지 않는 트리거의 경우 Azure Container Apps Azure Functions 고정 복제본 수(즉, minReplicas > 0 설정)를 사용합니다. 자세한 내용은 Functions 개발자 가이드를 참조하세요.

스케일링 및 성능

Container Apps의 Azure Functions 기본적으로 KEDA를 사용하는 이벤트에 따라 자동으로 확장됩니다. 최소/최대 복제본을 설정하여 크기 조정 동작을 제어할 수 있습니다. 사용자 지정 크기 조정 규칙을 제공하는 데 사용할 allowScalingRuleOverride 수도 있습니다.

  • Event 기반 크기 조정: Event Grid, Service Bus 또는 HTTP와 같은 트리거에 따라 자동으로 크기 조정합니다.
  • 0으로 크기 조정: 유휴 앱이 0으로 확장되어 비용을 절감합니다.
  • 콜드 스타트 제어: Azure Container Apps에서 콜드 스타트 시간을 줄이는 방법에 대해 알아봅니다.
  • 동시성: 각 인스턴스는 여러 이벤트를 병렬로 처리할 수 있습니다.
  • 높은 확장: 앱당 1,000개의 인스턴스로 확장합니다(기본값은 10).
  • GPU 지원: GPU 지원 노드를 사용하여 AI 유추와 같은 계산이 많은 워크로드를 실행합니다.

따라서 Container Apps는 버스트 및 안정적인 상태 워크로드 모두에 적합합니다. 자세한 내용은 Azure Container Apps에서 스케일링 규칙 설정하기를 참조하세요.

네트워킹 및 보안

Azure Functions on Container Apps는 Container Apps 네트워크보안 기능을 사용합니다:

  • VNet 통합: 내부 엔드포인트 및 프라이빗 데이터베이스를 통해 프라이빗 리소스에 안전하게 액세스합니다.
  • 관리 신원: 시스템 할당 또는 사용자 지정 신원을 사용하여 Azure 서비스와 인증합니다. 비밀이나 연결 문자열을 관리할 필요가 없습니다.
  • Dapr 지원: Dapr 사이드카를 통해 pub/sub, 상태 관리 및 보안 서비스 호출을 사용하도록 설정합니다. 자세한 내용은 Dapr에서 제공하는 마이크로 서비스 API를 참조하세요.
  • 인그레스 및 TLS: TLS/mTLS, 사용자 지정 도메인을 사용하여 보안 HTTP 엔드포인트를 외부에 노출하거나 내부적으로 유지합니다.
  • 환경 격리: 함수들은 안전하고 범위가 정한 통신을 위해 컨테이너 앱 환경 경계를 공유합니다.

모니터링 및 로깅

Azure Functions on Container Apps는 성능 추적 및 문제 진단을 위해 Azure 관찰 도구와 통합됩니다:

  • Application Insights: 요청, 종속성, 예외 및 사용자 지정 추적에 대한 원격 분석을 제공합니다. 자세한 내용은 모니터 Azure Functions 참조하세요.
  • Log Analytics: 컨테이너 수명주기와 확장 이벤트(예: FunctionsScalerInfo 항목)를 포착합니다. 자세한 내용은 Azure Container Apps의 애플리케이션 로그를 참조하세요.
  • 사용자 지정 로깅: 구조화된 출력에 대한 ILogger 및 콘솔 로깅과 같은 표준 프레임워크를 지원합니다.
  • 중앙 집중식 모니터링: Container Apps 환경은 모든 앱에서 통합된 대시보드 및 경고를 제공합니다.

환경 변수

Container Apps에서 실행되는 Azure Functions 시스템 제공 환경 변수에 액세스할 수 있습니다. CONTAINER_NAME 환경 변수는 함수 앱의 복제본 이름으로 자동으로 설정됩니다. 이 변수는 다중 복제 시나리오에서 로그, 상관관계, 디버깅에 사용하세요.

시스템 제공 환경 변수의 전체 목록은 Azure Container Apps 참조하세요.

고려 사항

Azure Container Apps에서 Azure Functions를 사용할 때는 다음과 같은 다른 고려 사항을 염두에 두어야 합니다.

  • 자동 확장을 위한 인그레스 요구사항: 이벤트에 따른 자동 스케일링을 활성화하려면 인그레스를 공개 또는 컨테이너 앱 내부 환경 내에서 활성화하세요.
  • 필수 스토리지 계정: 컨테이너 앱에 배포되는 모든 기능 앱은 스토리지 계정에 연결되어야 합니다. 이 스토리지 계정은 트리거, 로그, 상태를 관리합니다. 모범 사례에 대한 스토리지 계정 지침을 검토합니다.
  • 다중 수정 스토리지: 여러 활성 수정 버전을 사용하여 배포할 때 각 수정 버전에 전용 스토리지 계정을 할당합니다. 전용 스토리지 계정을 사용하면 충돌을 방지하고 적절한 격리를 보장합니다. 또는 동시 수정 버전이 필요하지 않은 경우 간소화된 관리를 위해 기본 단일 수정 모드를 사용하는 것이 좋습니다.
  • 다중 수정 트리거: 끌어오기 기반 트리거와 함께 다중 수정 모드를 사용하는 경우 각 수정 버전에 대해 다른 이벤트 원본을 사용하여 경쟁 소비자와 관련된 충돌을 방지합니다. Azure Queue Storage, Azure Event Hubs, Azure Service Bus 또는 Durable Functions 트리거를 사용하는 함수는 끌어오기 기반 트리거의 예입니다.
  • 콜드 시작 대기 시간: 유휴 기간 동안 컨테이너 앱이 0으로 축소되면 비활성 후 첫 번째 요청에서 콜드 시작이 발생합니다. 콜드 시작 시간을 줄이는 방법에 대해 자세히 알아보세요.
  • Application Insights 통합: 함수 앱을 모니터링하고 진단하려면 Application Insights에 연결하세요. 자세한 내용은 Application Insights와 함수 통합을 참조하세요.
  • 함수 프록시: 지원되지 않습니다. API 게이트웨이 시나리오의 경우 대신 Azure API Management 통합합니다.
  • 배포 슬롯: 스테이징 및 프로덕션 슬롯을 사용할 수 없습니다. 가동 중지 시간 없는 릴리스를 위해 파란색-녹색 배포 전략을 사용합니다.
  • 함수 액세스 키: 포털을 사용하여 Functions 액세스 키를 생성하는 것은 지원되지 않습니다. Azure Key Vault 사용하여 키를 저장하는 것이 좋습니다. 다음 옵션을 사용하여 프로덕션에서 HTTP 엔드포인트를 보호할 수도 있습니다.
  • 할당량 및 리소스 제한: Container Apps 환경에는 지역당 메모리, CPU 및 인스턴스 수에 대한 기본 제한이 있습니다. 자세한 내용은 환경 제한기본 할당량을 참조하세요. 워크로드에 더 많은 리소스가 필요한 경우 할당량 증가를 요청할 수 있습니다.
  • 수동 크기 조정 규칙 구성: 이벤트 원본에 따라 크기 조정 규칙이 자동으로 구성되므로, Container Apps에서 호스팅되는 Azure Functions의 Azure 포털에서 '크기 조정 규칙 추가' 버튼이 비활성화되어 있습니다. 이 설정에서는 수동 KEDA 규칙 정의가 필요하지 않습니다.

피드백 제출

문제 또는 기능 요청을 Azure Container Apps GitHub 리포지토리 제출합니다.

다음 단계/추가 리소스

Container Apps에서 Azure Functions 학습하고 빌드하려면 다음 리소스를 탐색합니다.