Azure Container Apps의 Azure Functions는 Azure Functions의 이벤트 기반 기능을 Container Apps의 강력한 기능과 결합하는 완전 관리형 서버리스 호스팅 환경을 제공합니다. 이 통합에는 Kubernetes 기반 오케스트레이션, KEDA(Kubernetes 기반 이벤트 기반 자동 크기 조정)로 구동되는 기본 제공 자동 크기 조정, Dapr(분산 애플리케이션 런타임) 통합, GPU 워크로드 지원, 사이드카 지원, VNet(가상 네트워크) 연결 및 수정 관리와 같은 고급 기능이 포함됩니다.
이 방법은 마이크로 서비스, API 또는 웹 사이트와 같은 컨테이너화된 다른 앱과 함께 Functions를 실행하려는 경우에 유용합니다. 또한 함수 앱을 컨테이너화하면 사용자 지정 종속성이 필요하거나 비용 절감을 위해 0으로 조정 기능을 활용하려는 경우에 도움이 될 수 있습니다. AI 유추와 같은 컴퓨팅 집약적인 작업을 실행하는 경우 Container Apps는 서버리스 GPU 제품 및 Dedicated 워크로드 프로필을 통한 GPU 기반 호스팅도 지원합니다.
Azure Container Apps의 통합 기능으로, Microsoft.App을 호출할 때 kind=functionapp을 설정하여 az containerapp create 리소스 공급자를 사용함으로써 Azure Container Apps에 Azure Functions 이미지를 직접 배포할 수 있습니다. 이러한 방식으로 만든 앱은 모든 Azure Container Apps 기능에 액세스할 수 있습니다. Azure Portal을 통해 배포하는 경우 설정 중에 Functions 앱 최적화 옵션을 사용하도록 설정할 수 있습니다. 자세한 내용은 배포 및 설정 섹션을 참조하세요.
주요 이점
Container Apps 호스팅 모델은 컨테이너화된 워크로드의 유연성과 Azure Functions의 이벤트 기반 특성을 기반으로 합니다. 다음과 같은 주요 이점을 제공합니다.
- 사용자 지정 종속성 및 언어 스택이 포함된 컨테이너로 Azure Functions를 실행합니다.
- KEDA를 사용하여 0으로 확장하고 1000개의 인스턴스로 확장합니다.
- 전체 VNet 통합을 사용하여 네트워킹을 보호합니다.
- 다중 수정, 트래픽 분할, Dapr 통합 및 가시성 구성 요소와 같은 고급 컨테이너 앱 기능입니다.
- 계산 집약적 워크로드에 대한 서버리스 및 전용 GPU 지원.
- 마이크로 서비스, API 및 백그라운드 작업과 함께 Functions를 실행하는 통합 컨테이너 앱 환경입니다.
다음 표에서는 Container Apps의 Functions 기능을 Flex 사용 계획과 비교하는 데 도움이 됩니다.
| 특징 | 컨테이너 앱 | 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는 특히 이벤트 기반 실행, 컨테이너 유연성 또는 다른 서비스와의 보안 통합이 필요한 경우 광범위한 사용 사례에 적합합니다.
- LOB(기간 업무) API: LOB(기간 업무) 애플리케이션용 Azure Functions를 사용하여 사용자 지정 라이브러리, 패키지 및 API를 패키징합니다.
- 마이그레이션 및 현대화: 온-프레미스 레거시 및/또는 모놀리식 애플리케이션을 컨테이너의 클라우드 네이티브 마이크로 서비스로 마이그레이션합니다.
- 이벤트 기반 처리: Functions 프로그래밍 모델의 용이성으로 Event Grid, Service Bus, Event Hubs 및 기타 이벤트 원본의 이벤트를 처리합니다.
- AI 및 GPU 워크로드: 비디오, 이미지, 대본의 서버리스 워크로드 처리 또는 GPU 컴퓨팅 리소스가 필요한 기타 처리 집약적 작업. 자세한 내용은 Azure Container Apps에서 서버리스 GPU 사용을 참조하세요.
- 마이크로 서비스: Azure Functions를 다른 Container Apps 호스트형 서비스와 통합합니다.
- 사용자 지정 컨테이너: 사용자 지정 런타임 또는 사이드카가 포함된 패키지 Functions입니다.
- 프라이빗 앱: VNet 및 내부 수신을 사용하여 내부 전용 Functions를 보호합니다.
- .NET Aspire: .NET Aspire와 Azure Functions의 통합을 통해 .NET Aspire 앱 호스트의 일부로 Azure Functions .NET 프로젝트를 개발, 디버그 및 오케스트레이션할 수 있습니다. .NET Aspire를 사용한 Azure Functions에 대한 자세한 정보
- 일반 Functions: 지원되는 표준 Azure Functions 시나리오(예: 타이머, 파일 처리, 데이터베이스 트리거)를 실행합니다.
배포 및 설정
Azure Container Apps에 Azure Functions를 배포하려면 Functions 앱을 사용자 지정 컨테이너 이미지로 패키징하고 한 가지 주요 차이점이 있는 다른 컨테이너 앱처럼 배포합니다. Azure CLI 또는 ARM/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
이 명령은 Functions 앱의 URL을 반환합니다. 이 URL을 복사하여 웹 브라우저에 붙여넣습니다.
Azure Portal에서 컨테이너 앱 생성 중에 Azure Functions 최적화 옵션을 선택하여 설정을 간소화합니다.
다음을 비롯한 모든 표준 배포 방법이 지원됩니다.
- Azure CLI
- Azure Portal
- ARM 템플릿 / Bicep
- CI/CD 파이프라인(예: GitHub Actions, Azure Pipelines)
자세한 단계 및 예제는 공식 시작 설명서를 참조하세요.
가격 책정 및 대금 청구
Azure Container Apps의 Azure Functions는 Azure Container Apps와 동일한 가격 책정 모델을 따릅니다. 청구는 환경에 대해 선택한 플랜 유형에 따라 이루어지며, 이는 사용량 기반 또는 전용일 수 있습니다.
- 소비 계획: 이 서버리스 컴퓨팅 옵션은 앱이 실행되는 동안 사용하는 리소스에 대해서만 요금을 청구합니다.
- 전용 계획: 이 옵션은 사용자 지정된 컴퓨팅 리소스를 제공하여 각 워크로드 프로필에 할당된 인스턴스에 대한 요금을 청구합니다.
플랜을 선택하면 청구 계산 방법이 결정됩니다. 환경 내의 다른 애플리케이션은 서로 다른 계획을 사용할 수 있습니다.
주의해야 할 주요 사항:
- Container Apps 내에서 Azure Functions 프로그래밍 모델을 사용하는 데 추가 요금이 부과되지 않습니다.
- Durable Functions 및 기타 고급 패턴은 동일한 Container Apps 가격 책정 모델에서 지원 및 청구됩니다. 자세한 청구 메커니즘 및 예제는 Azure Container Apps 설명서의 청구를 참조하세요.
이벤트 기반 크기 조정
Container Apps의 Azure Functions는 C#, JavaScript/TypeScript(Node.js), Python, Java, PowerShell, 사용자 지정 컨테이너(사용자 고유의 이미지 가져오기)를 포함하여 Azure Functions에서 사용할 수 있는 모든 주요 언어 런타임을 지원합니다.
Azure Container Apps에서 실행되는 Azure Functions는 이벤트 원본에 따라 크기 조정 규칙을 자동으로 구성 하므로 수동 KEDA 크기 조정 규칙 정의가 필요하지 않습니다. 따라서 Azure Portal의 "크기 조정 규칙 추가" 단추가 Container Apps의 Functions에 대해 사용하지 않도록 설정됩니다. 그러나 최소 및 최대 복제본 수를 정의하여 크기 조정 경계를 설정하고 리소스 할당에 대한 제어를 유지할 수 있습니다.
모든 표준 Azure Functions 트리거 및 바인딩은 다음 예외를 제외하고 Container Apps에서 지원됩니다.
- Blob Storage 트리거 자동 크기 조정: Event Grid를 원본으로 사용하는 경우에만 작동합니다. 이벤트 구독을 사용하여 Blob 컨테이너에서 Azure Functions 트리거에 대해 자세히 알아보기
- Durable Functions 자동 크기 조정: MSSQL(Microsoft SQL Server) 및 DTS(지속성 작업 스케줄러) 스토리지 공급자만 지원합니다. MSSQL을 사용하여 Durable Functions를 배포하는 방법에 대한 지침 자세히 알아보기
- 자동 크기 조정은 다음에서 지원되지 않습니다.
- Azure Cache for Redis (아주어 캐시 포 레디스)
- Azure SQL
관리 ID는 이를 허용하는 트리거 및 바인딩에 대해 지원됩니다. 다음에도 사용할 수 있습니다.
- 기본 스토리지 계정 (AzureWebJobsStorage)
- ACR(Azure Container Registry)
- 트리거 이벤트 원본에 연결
지원되지 않는 트리거의 경우 Azure Container Apps의 Azure Functions에서 고정 복제본 수(즉, minReplicas > 0 설정)를 사용합니다. 자세한 내용은 Functions 개발자 가이드를 참조하세요.
스케일링 및 성능
컨테이너 앱의 Azure Functions는 KEDA를 사용하는 이벤트에 따라 자동으로 크기 조정되며, 크기 조정 규칙을 수동으로 구성할 필요가 없습니다. 최소/최대 복제본을 설정하여 크기 조정 동작을 제어할 수 있습니다.
- 이벤트 기반 크기 조정: Event Grid, Service Bus 또는 HTTP와 같은 트리거에 따라 자동으로 크기 조정합니다.
- 0으로 크기 조정: 유휴 앱이 0으로 확장되어 비용을 절감합니다.
- 콜드 시작 제어: Azure Container Apps에서 콜드 시작 시간을 줄이는 방법을 알아보세요.
- 동시성: 각 인스턴스는 여러 이벤트를 병렬로 처리할 수 있습니다.
- 높은 확장: 앱당 1,000개의 인스턴스로 확장합니다(기본값은 10).
- GPU 지원: GPU 지원 노드를 사용하여 AI 유추와 같은 계산이 많은 워크로드를 실행합니다.
따라서 Container Apps는 버스트 및 안정적인 상태 워크로드 모두에 적합합니다. 자세한 내용은 Azure Container Apps에서 크기 조정 규칙 설정을 참조하세요.
네트워킹 및 보안
컨테이너 앱의 Azure Functions는 안전하고 확장 가능한 배포를 위한 Container Apps의 강력한 네트워킹 및 보안 기능을 활용합니다.
- VNet 통합: 내부 엔드포인트 및 프라이빗 데이터베이스를 통해 프라이빗 리소스에 안전하게 액세스합니다.
- 관리 ID: 시스템/사용자 할당 ID를 사용하여 Azure 서비스에서 인증합니다. 비밀이나 연결 문자열이 필요하지 않습니다.
- Dapr 지원: Dapr 사이드카를 통해 pub/sub, 상태 관리 및 보안 서비스 호출을 사용하도록 설정합니다. 자세한 내용은 Dapr에서 제공하는 마이크로 서비스 API를 참조하세요.
- 인그레스 및 TLS: TLS/mTLS, 사용자 지정 도메인을 사용하여 보안 HTTP 엔드포인트를 외부에 노출하거나 내부적으로 유지합니다.
- 환경 격리: 함수는 안전하고 범위가 지정된 통신을 위해 Container Apps 환경 경계를 공유합니다.
이러한 기능을 통해 Container Apps 호스팅 함수는 엔터프라이즈급 보안 서버리스 애플리케이션에 이상적입니다.
모니터링 및 로깅
Container Apps의 Azure Functions는 성능 추적 및 문제 진단을 위한 Azure의 가시성 도구와 원활하게 통합됩니다.
- Application Insights: 요청, 종속성, 예외 및 사용자 지정 추적에 대한 원격 분석을 제공합니다. 자세한 내용은 Azure Functions 모니터링을 참조하세요.
- 로그 분석: 컨테이너 수명 주기 및 크기 조정 이벤트(예: FunctionsScalerInfo 항목)를 캡처합니다. 자세한 내용은 Azure Container Apps의 Application Logging을 참조하세요.
- 사용자 지정 로깅: 구조화된 출력에 대한 ILogger 및 콘솔 로깅과 같은 표준 프레임워크를 지원합니다.
- 중앙 집중식 모니터링: Container Apps 환경은 모든 앱에서 통합된 대시보드 및 경고를 제공합니다.
고려 사항
Azure Container Apps에서 Azure Functions를 사용할 때는 다음과 같은 다른 고려 사항을 염두에 둡니다.
- 자동 크기 조정에 대한 수신 요구 사항: 이벤트를 기반으로 자동 크기 조정을 사용하도록 설정하려면 공개적으로 또는 Container Apps 내부 환경 내에서 수신을 사용하도록 설정해야 합니다.
- 필수 스토리지 계정: Container Apps에 배포된 모든 Functions 앱은 스토리지 계정에 연결되어야 합니다. 트리거, 로그 및 상태를 관리하는 데 필요합니다. 모범 사례에 대한 스토리지 계정 지침을 검토합니다.
- 다중 수정 스토리지: 여러 활성 수정 버전을 사용하여 배포할 때 각 수정 버전에 전용 스토리지 계정을 할당합니다. 전용 스토리지 계정을 사용하면 충돌을 방지하고 적절한 격리를 보장합니다. 또는 동시 수정 버전이 필요하지 않은 경우 간소화된 관리를 위해 기본 단일 수정 모드를 사용하는 것이 좋습니다.
- 다중 수정 트리거: 끌어오기 기반 트리거와 함께 다중 수정 모드를 사용하는 경우 각 수정 버전에 대해 다른 이벤트 원본을 사용하여 경쟁 소비자와 관련된 충돌을 방지합니다. Azure Queue Storage, Azure Event Hub, Azure Service Bus 또는 Durable Functions 트리거를 사용하는 함수는 끌어오기 기반 트리거의 예입니다.
- 콜드 시작 대기 시간: 유휴 기간 동안 컨테이너 앱이 0으로 축소되면 비활성 후 첫 번째 요청에서 콜드 시작이 발생합니다. 콜드 시작 시간을 줄이는 방법에 대해 자세히 알아보세요.
- Application Insights 통합: 강력한 모니터링 및 진단을 위해 Functions 앱을 Application Insights에 연결합니다. 자세한 내용은 Functions와 App Insights 통합을 참조하세요.
- 함수 프록시: 지원되지 않습니다. API 게이트웨이 시나리오의 경우 대신 Azure API Management와 통합합니다.
- 배포 슬롯: 준비 및 프로덕션 슬롯을 사용할 수 없습니다. 가동 중지 시간 없는 릴리스를 위해 파란색-녹색 배포 전략을 사용합니다.
- Functions 액세스 키: 포털을 사용하여 Functions 액세스 키를 생성하는 것은 지원되지 않습니다. Azure Key Vault를 사용하여 키를 저장하는 것이 좋습니다. 다음 옵션을 사용하여 프로덕션에서 HTTP 엔드포인트를 보호할 수도 있습니다.
- 할당량 및 리소스 제한: Container Apps 환경에는 지역당 메모리, CPU 및 인스턴스 수에 대한 기본 제한이 있습니다. 자세한 내용은 환경 제한 및 기본 할당량을 참조하세요. 워크로드에 더 많은 리소스가 필요한 경우 할당량 증가를 요청할 수 있습니다.
- 수동 크기 조정 규칙 구성: 크기 조정 규칙이 이벤트 원본에 따라 자동으로 구성되므로 Container Apps에서 호스트되는 Azure Functions에 대해 Azure Portal의 "크기 조정 규칙 추가" 단추를 사용할 수 없습니다. 이 설정에서는 수동 KEDA 규칙 정의가 필요하지 않습니다.
피드백 제출
Azure Container Apps GitHub 리포지토리에 문제 또는 기능 요청을 제출합니다.
다음 단계/추가 리소스
Container Apps에서 Azure Functions를 사용하여 학습 및 빌드를 계속하려면 다음 리소스를 살펴보세요.
- 시작 – Azure Container Apps에서 Azure Functions를 배포하고 구성하는 단계별 가이드입니다.
- Azure Container Apps 설명서 – 크기 조정, 네트워킹, Dapr 및 워크로드 프로필을 비롯한 Container Apps 기능에 대한 전체 참조입니다.
- Azure Container Apps 가격 책정 – 소비 기반 청구 및 Dedicated 계획 비용에 대한 세부 정보입니다.
- Azure Functions 호스팅 옵션 - Container Apps, Flex Consumption, Premium 및 Dedicated를 포함한 호스팅 계획의 비교입니다.
- Azure Functions 개발자 가이드 – 트리거, 바인딩, 런타임 동작 및 구성에 대해 자세히 알아보세요.