Azure Functions 호스팅 옵션 비교
Azure에서 함수 앱을 만들 때는 앱의 호스팅 계획을 선택해야 합니다. Azure는 함수 코드에 대해 다음과 같은 호스팅 옵션을 제공합니다.
호스팅 옵션 | 서비스 | 가용성 | 컨테이너 지원 |
---|---|---|---|
사용 계획 | Azure 기능 | 일반적으로 사용 가능 (GA) | None |
Flex 사용량 계획 | Azure 기능 | 프리뷰 | None |
프리미엄 계획 | Azure 기능 | GA | Linux |
전용 계획 | Azure 기능 | GA | Linux |
Container Apps | Azure Container Apps | GA | Linux |
Azure App Service 인프라는 Linux 및 Windows 가상 머신 모두에서 Azure Functions 호스팅을 용이하게 합니다. 선택한 호스팅 옵션에 따라 다음 동작이 결정됩니다.
- 함수 앱의 크기 조정 방법
- 각 함수 앱 인스턴스에 사용 가능한 리소스
- Azure Virtual Network 연결 등의 고급 기능 지원
- Linux 컨테이너 지원
선택한 계획은 함수 코드를 실행하는 비용에도 영향을 줍니다.
계획 개요
다음은 다양한 호스팅 옵션의 이점에 대한 요약입니다.
사용 계획
소비 계획은 기본 호스팅 계획입니다. 자동 크기 조정을 통해 함수가 실행 중일 때만(종량제) 컴퓨팅 리소스에 대한 비용을 지불합니다. 소비 계획에서 Functions 호스트의 인스턴스는 들어오는 이벤트의 수에 따라 동적으로 추가되고 제거됩니다.
Flex 사용량 계획
컴퓨팅 선택, 가상 네트워킹 및 종량제 청구를 통해 높은 확장성을 얻을 수 있습니다. Flex 사용량 계획에서 Functions 호스트의 인스턴스는 인스턴스 동시성 및 들어오는 이벤트의 수에 따라 동적으로 추가되고 제거됩니다.
미리 프로비전된(항상 준비) 인스턴스 수를 지정하여 콜드 시작을 줄일 수 있습니다. 수요에 따라 자동으로 크기 조정합니다.
프리미엄 계획
유휴 상태 후 지연 없이 애플리케이션을 실행하고, 더 강력한 인스턴스에서 실행되고, 가상 네트워크에 연결하는 사전 준비가 된 작업자를 사용하여 수요에 따라 크기가 자동으로 조정됩니다.
다음과 같은 상황에서 Azure Functions 프리미엄 계획을 고려합니다.
- 함수 앱은 지속적으로 또는 거의 지속적으로 실행됩니다.
- 인스턴스를 더 많이 제어하고 이벤트 기반 크기 조정을 사용하여 동일한 계획에 여러 함수 앱을 배포하려고 합니다.
- 적은 실행 수와 높은 실행 청구서가 있지만 소비 계획에서는 GB 초가 낮습니다.
- 소비 계획에서 제공하는 것보다 더 많은 CPU 또는 메모리 옵션이 필요합니다.
- 코드는 소비 계획에 허용되는 최대 실행 시간보다 더 오래 실행되어야 합니다.
- 가상 네트워크 연결이 필요합니다.
- 함수를 실행할 사용자 지정 Linux 이미지를 제공하려고 합니다.
전용 계획
App Service 계획 내에서 함수를 정기적인 App Service 계획 요금으로 실행합니다. Durable Functions를 사용할 수 없는 장기 실행 시나리오에 적합합니다.
다음 상황에서 App Service 플랜을 고려합니다.
- 완전히 예측 가능한 청구가 있거나 인스턴스 크기를 수동으로 조정해야 합니다.
- 동일한 계획에서 여러 웹앱 및 함수 앱을 실행하려고 합니다.
- 더 큰 컴퓨팅 크기 선택에 액세스해야 합니다.
- ASE(App Service Environment)에서 제공하는 전체 컴퓨팅 격리 및 보안 네트워크 액세스입니다.
- 높은 메모리 사용량 및 높은 확장(ASE).
Container Apps
Azure Container Apps에서 호스트하는 완전히 관리되는 환경에서 컨테이너화된 함수 앱을 만들고 배포합니다.
Azure Functions 프로그래밍 모델을 사용하여 이벤트 기반의 서버리스 클라우드 네이티브 함수 앱을 빌드합니다. 다른 마이크로 서비스, API, 웹 사이트 및 워크플로와 함께 컨테이너 호스팅 프로그램으로 함수를 실행합니다.
다음과 같은 상황에서 Container Apps에서 함수를 호스팅하는 것이 좋습니다.
- LOB(기간 업무) 앱을 지원하기 위해 함수 코드로 사용자 지정 라이브러리를 패키지하려고 합니다.
- 온-프레미스 또는 레거시 앱에서 컨테이너에서 실행되는 클라우드 네이티브 마이크로 서비스로 코드 실행을 마이그레이션해야 합니다.
- Kubernetes 클러스터 및 전용 컴퓨팅을 관리하는 오버헤드와 복잡성을 방지하려고 합니다.
- 함수에 대한 전용 CPU 컴퓨팅 리소스에서 제공하는 고급 처리 능력이 필요합니다.
함수 앱 시간 제한 기간
host.json 프로젝트 파일의 functionTimeout
속성은 함수 앱에서 함수의 시간 제한 기간을 지정합니다. 이 속성은 특히 함수 실행에 적용됩니다. 트리거가 함수 실행을 시작한 후 함수는 시간 제한 기간 내에 반환/응답해야 합니다.
아래의 표에는 특정 플랜에 대한 기본값과 최댓값(분)이 나와 있습니다.
계획 | 기본값 | 최댓값1 |
---|---|---|
사용 계획 | 5 | 10 |
Flex 사용량 계획 | 30 | 무제한3 |
프리미엄 계획 | 302 | 무제한3 |
전용 계획 | 302 | 무제한3 |
Container Apps | 305 | 무제한3 |
- 함수 앱 시간 제한 설정에 관계없이 230초는 HTTP 트리거 함수가 요청에 응답하는 데 걸리는 최대 시간입니다.
- Functions 런타임 버전 1.x의 기본 시간 제한은 무제한입니다.
- 최대 60분까지 보장됩니다. OS 및 런타임 패치, 취약성 패치 및 크기 조정 동작은 여전히 함수 실행을 취소할 수 있습니다.
- Flex 사용량 플랜에서 호스트는 실행 시간 제한을 적용하지 않습니다. 그러나 스케일 인, 배포 또는 업데이트를 적용하기 위해 플랫폼에서 인스턴스를 종료해야 할 수도 있으므로 현재로서는 보장할 수 없습니다.
- 최소 복제본 수를 0으로 설정하면 기본 시간 제한은 앱에서 사용되는 특정 트리거에 따라 달라집니다.