Azure Functions 호스팅 옵션
Azure에서 함수 앱을 만들 때는 앱의 호스팅 옵션을 선택해야 합니다. Azure는 함수 코드에 대해 다음과 같은 호스팅 옵션을 제공합니다.
호스팅 옵션 | 서비스 | 가용성 | 컨테이너 지원 |
---|---|---|---|
Flex 사용량 계획 | Azure 기능 | 일반적으로 사용 가능 (GA) | None |
프리미엄 계획 | Azure 기능 | GA | Linux |
전용 계획 | Azure 기능 | GA | Linux |
Container Apps | Azure Container Apps | GA | Linux |
사용 계획 | Azure 기능 | GA | None |
Azure Functions 호스팅 옵션은 Linux 및 Windows 가상 머신 모두에서 Azure App Service 인프라를 통해 지원됩니다. 선택한 호스팅 옵션에 따라 다음 동작이 결정됩니다.
- 함수 앱의 크기 조정 방법
- 각 함수 앱 인스턴스에 사용 가능한 리소스
- Azure Virtual Network 연결 등의 고급 기능 지원
- Linux 컨테이너 지원
선택한 계획은 함수 코드를 실행하는 비용에도 영향을 줍니다. 자세한 내용은 Billing을 참조하세요.
이 문서에서는 다양한 호스팅 계획을 자세히 비교합니다. Linux 컨테이너에서 함수 코드를 실행하고 관리하는 방법에 대한 자세한 내용은 Azure Functions의 Linux 컨테이너 지원을 참조하세요.
계획 개요
다음은 Azure Functions 호스팅의 다양한 옵션이 제공하는 이점에 대한 요약입니다.
옵션 | 이점 |
---|---|
Flex 사용량 계획 | 컴퓨팅 선택, 가상 네트워킹 및 종량제 청구를 사용하여 신속한 수평적 크기 조정을 얻을 수 있습니다. Flex 사용량 계획에서 Functions 호스트의 인스턴스는 인스턴스 동시성 및 들어오는 이벤트의 수에 따라 동적으로 추가되고 제거됩니다. ✔ 미리 프로비전된(항상 준비됨) 인스턴스 수를 지정하여 콜드 시작을 줄입니다. ✔ 보안을 강화하기 위해 가상 네트워킹을 지원합니다. ✔ 함수를 실행 중일 때 비용을 지불합니다. ✔ 높은 부하 기간 동안에도 자동으로 크기 조정 |
프리미엄 계획 | 유휴 상태 후 지연 없이 애플리케이션을 실행하고, 더 강력한 인스턴스에서 실행되고, 가상 네트워크에 연결하는 사전 준비가 된 작업자를 사용하여 수요에 따라 크기가 자동으로 조정됩니다. 다음과 같은 상황에서 Azure Functions 프리미엄 계획을 고려합니다. ✔ 함수 앱을 계속해서 또는 거의 계속해서 실행 ✔ 인스턴스를 좀 더 세부적으로 제어하고 이벤트 기반 크기 조정을 사용하여 동일한 계획에 여러 함수 앱을 배포하려고 합니다. ✔ 소형 실행 수도 많고 실행 요금도 높지만 소비 계획에서 GB 초는 낮음 ✔ 사용량 계획에서 제공하는 것보다 많은 CPU 또는 메모리 옵션이 필요합니다. ✔ 코드가 소비 계획에 허용된 최대 실행 시간보다 오래 실행해야 함 ✔ 가상 네트워크 연결이 필요합니다. ✔ 함수를 실행할 사용자 지정 Linux 이미지를 제공하고자 합니다. |
전용 계획 | App Service 계획 내에서 함수를 정기적인 App Service 계획 요금으로 실행합니다. Durable Functions를 사용할 수 없는 장기 실행 시나리오에 적합합니다. 다음 상황에서 App Service 플랜을 고려합니다. ✔ 이미 다른 App Service 인스턴스를 실행하고 있는 기존의 활용도가 낮은 가상 머신이 있습니다. ✔ 완전히 예측 가능한 청구가 있거나 인스턴스 크기를 수동으로 조정해야 합니다. ✔ 동일한 계획에서 여러 웹앱 및 함수 앱을 실행하려고 합니다. ✔ 더 큰 컴퓨팅 크기를 선택할 수 있어야 합니다. ✔ ASE(App Service Environment)에서 제공하는 전체 컴퓨팅 격리 및 보안 네트워크 액세스입니다. ✔ 매우 높은 메모리 사용량 및 높은 확장성(ASE)입니다. |
Container Apps | Azure Container Apps에서 호스트하는 완전히 관리되는 환경에서 컨테이너화된 함수 앱을 만들고 배포합니다. Azure Functions 프로그래밍 모델을 사용하여 이벤트 기반의 서버리스 클라우드 네이티브 함수 앱을 빌드합니다. 다른 마이크로 서비스, API, 웹 사이트 및 워크플로와 함께 컨테이너 호스팅 프로그램으로 함수를 실행합니다. 다음과 같은 상황에서 Container Apps에서 함수를 호스팅하는 것이 좋습니다. ✔ LOB(기간 업무) 앱을 지원하기 위해 함수 코드로 사용자 지정 라이브러리를 패키지하려고 합니다. ✔ 온-프레미스 또는 레거시 앱에서 컨테이너에서 실행되는 클라우드 네이티브 마이크로 서비스로 코드 실행을 마이그레이션해야 합니다. ✔ Kubernetes 클러스터 및 전용 컴퓨팅 관리의 오버헤드 및 복잡성을 방지하려는 상황입니다. ✔ 함수에 전용 GPU 컴퓨팅 리소스에서 제공하는 고급 처리 성능이 필요합니다. |
사용 계획 | 자동 크기 조정을 통해 함수가 실행 중일 때만(종량제) 컴퓨팅 리소스에 대한 비용을 지불합니다. 소비 계획에서 Functions 호스트의 인스턴스는 들어오는 이벤트의 수에 따라 동적으로 추가되고 제거됩니다. ✔ 실제 서버리스 호스팅을 제공하는 기본 호스팅 계획입니다. ✔ 함수가 실행되는 경우에만 지불 ✔ 높은 부하 기간 동안에도 자동으로 크기 조정 |
이 문서의 나머지 표에서는 다양한 기능과 동작을 토대로 호스팅 옵션을 비교합니다.
운영 체제 지원
이 표에서는 호스팅 옵션의 운영 체제 지원 현황을 보여 줍니다.
호스팅 | Linux1 배포 | Windows2 배포 |
---|---|---|
Flex 사용량 계획 | ✅ 코드 전용 ❌ 컨테이너(지원되지 않음) |
❌ 지원 안 됨 |
프리미엄 계획 | ✅ 코드 전용 ✅ 컨테이너 |
✅ 코드 전용 |
전용 계획 | ✅ 코드 전용 ✅ 컨테이너 |
✅ 코드 전용 |
Container Apps | ✅ 컨테이너 전용 | ❌ 지원 안 됨 |
사용 계획 | ✅ 코드 전용 ❌ 컨테이너(지원되지 않음) |
✅ 코드 전용 |
- Linux는 Python 런타임 스택에 대해 유일하게 지원되는 운영 체제입니다.
- Windows 배포는 코드 전용입니다. Functions는 현재 Windows 컨테이너를 지원하지 않습니다.
함수 앱 시간 제한 기간
함수 앱의 함수에 대한 시간 제한 기간은 host.json 프로젝트 파일의 functionTimeout
속성에 의해 정의됩니다. 이 속성은 특히 함수 실행에 적용됩니다. 트리거가 함수 실행을 시작한 후 함수는 시간 제한 기간 내에 반환/응답해야 합니다. 시간 제한을 방지하려면 강력한 함수를 작성해야 합니다. 자세한 내용은 Azure Functions 성능 및 안정성 개선을 참조하세요.
아래의 표에는 특정 플랜에 대한 기본값과 최댓값(분)이 나와 있습니다.
계획 | 기본값 | 최댓값1 |
---|---|---|
Flex 사용량 계획 | 30 | 무제한2 |
프리미엄 계획 | 304 | 무제한2 |
전용 계획 | 304 | 무제한3 |
Container Apps | 30 | 바인딩되지않은 5 |
사용 계획 | 5 | 10 |
- 함수 앱 시간 제한 설정에 관계없이 230초는 HTTP 트리거 함수가 요청에 응답하는 데 걸리는 최대 시간입니다. 이는 Azure Load Balancer의 기본 유휴 시간 제한 때문입니다. 처리 시간을 늘리려면 Durable Functions 비동기 패턴 사용을 고려하거나 실제 작업을 연기하고 즉각적인 응답을 반환합니다.
- 최대 실행 시간 제한 기간은 적용되지 않습니다. 그러나 함수 실행에 지정된 유예 기간은 Flex 소비 및 프리미엄 플랜의 경우 스케일 인 중 60분이며, 플랫폼 업데이트 중에는 10분의 유예 기간이 제공됩니다.
- App Service 요금제를 Always On으로 설정해야 합니다. 플랫폼 업데이트 중에는 10분의 유예 기간이 제공됩니다.
- 함수 호스트 런타임 버전 1.x의 기본 시간 제한은 무제한입니다.
- 최소 복제본 수가 0으로 설정되면 기본 시간 제한은 앱에서 사용되는 특정 트리거에 따라 달라집니다.
언어 지원
Functions의 현재 네이티브 언어 스택 지원에 대한 자세한 내용은 Azure Functions에서 지원되는 언어를 참조하세요.
확장
다음 테이블에서는 다양한 호스팅 계획의 크기 조정 동작을 비교합니다.
달리 명시되지 않는 한, 최대 인스턴스는 함수 앱(소비) 또는 플랜(프리미엄/전용) 기준으로 제공됩니다.
계획 | 확장 | 최대 인스턴스 수 |
---|---|---|
Flex 사용량 계획 | 함수별 크기 조정. 이벤트 기반 크기 조정 결정은 함수별로 계산되므로 앱의 함수 크기를 좀 더 결정적으로 조정할 수 있습니다. HTTP, Blob 스토리지(Event Grid) 및 Durable Functions를 제외한 앱의 다른 모든 함수 트리거 유형은 독립적인 인스턴스에서 크기가 조정됩니다. 앱의 모든 HTTP 트리거는 모든 Blob 스토리지(Event Grid) 트리거와 마찬가지로 동일한 인스턴스에서 그룹으로 함께 확장됩니다. 모든 Durable Functions 트리거도 인스턴스를 공유하고 함께 크기가 조정됩니다. | 지정된 지역에 걸쳐 있는 모든 인스턴스의 총 메모리 사용량에 의해서만 제한됩니다. 자세한 내용은 인스턴스 메모리를 참조하세요. |
프리미엄 계획 | 이벤트 기반 높은 부하 기간 동안에도 자동으로 규모 확장 Azure Functions 인프라는 해당 함수가 트리거되는 이벤트의 수를 기반으로 Functions 호스트의 더 많은 인스턴스를 추가하여 CPU 및 메모리 리소스의 크기를 조정합니다. | Windows: 100 Linux: 20-1002 |
전용 플랜3 | 크기 수동/자동 조정 | 10-30 100(ASE) |
Container Apps | 이벤트 기반 높은 부하 기간 동안에도 자동으로 규모 확장 Azure Functions 인프라는 해당 함수가 트리거되는 이벤트의 수를 기반으로 Functions 호스트의 더 많은 인스턴스를 추가하여 CPU 및 메모리 리소스의 크기를 조정합니다. | 300-10004 |
사용 계획 | 이벤트 기반 높은 부하가 발생하는 기간 동안에도 자동으로 스케일 아웃합니다. Functions 인프라는 들어오는 트리거 이벤트의 수를 기반으로 Functions 호스트의 인스턴스를 더 추가하여 CPU 및 메모리 리소스의 크기를 조정합니다. | Windows: 200 Linux: 1001 |
- 스케일 아웃 중에는 현재 사용량 플랜의 Linux 앱에 대해 구독당 시간당 500개의 인스턴스로 제한됩니다.
- 일부 지역에서는 프리미엄 플랜의 Linux 앱이 인스턴스 100개까지 크기 조정될 수 있습니다. 자세한 내용은 프리미엄 플랜 문서를 참조하세요.
- 다양한 App Service 요금제 옵션에 대한 구체적인 한도는 App Service 요금제 한도를 참조하세요.
- Container Apps에서 기본값은 10개의 인스턴스이지만 전체 최대 1,000개 인 최대 복제본 수를 설정할 수 있습니다. 이 설정은 사용할 수 있는 코어 할당량이 충분한 한 적용됩니다. Azure Portal에서 함수 앱을 만들 때 인스턴스 300개로 제한됩니다.
콜드 부팅 동작
계획 | 세부 정보 |
---|---|
Flex 사용량 계획 | 새 인스턴스를 프로비전할 때 지연을 줄이기 위해 항상 준비된 인스턴스를 지원합니다. |
프리미엄 계획 | 하나 이상의 영구적 웜 인스턴스를 유지 관리하여 콜드 시작을 방지하기 위해 항상 준비된 인스턴스를 지원합니다. |
전용 계획 | 전용 계획에서 실행하는 경우 Functions 호스트를 미리 지정된 수의 인스턴스에서 지속적으로 실행할 수 있습니다. 즉, 콜드 부팅은 실제로 문제가 되지 않습니다. |
Container Apps | 최소 복제본 수에 따라 달라집니다. • 0으로 설정하면 유휴 상태일 때 앱의 크기를 0으로 조정할 수 있습니다. 즉, 일부 요청은 시작 시 추가 대기 시간이 있을 수 있습니다. • 하나 이상으로 설정하면 호스트 프로세스가 연속적으로 실행됩니다. 콜드 시작은 문제가 되지 않습니다. |
사용 계획 | 유휴 상태일 때 앱의 크기를 0으로 조정할 수 있습니다. 즉, 일부 요청은 시작 시 추가 대기 시간이 있을 수 있습니다. 사용량 계획에는 이미 함수 호스트 및 언어 프로세스가 실행 중인 사전 준비된 자리 표시자 함수에서 끌어오는 것을 포함해 콜드 부팅 시간을 줄이는 데 도움이 되는 몇 가지 최적화가 있습니다. |
서비스 제한
리소스 | Flex 사용량 계획 | 프리미엄 계획 | 전용 플랜/ASE | Container Apps | 사용 계획 |
---|---|---|---|---|---|
기본 시간 제한 기간(분) | 30 | 30 | 301 | 3016 | 5 |
최대 시간 제한 기간(분) | unbounded9 | unbounded9 | 무제한2 | 무제한17 | 10 |
최대 아웃바운드 연결 수(인스턴스당) | unbounded | unbounded | unbounded | unbounded | 600개 활성(총 1,200개) |
최대 요청 크기(MB)3 | 210 | 210 | 210 | 210 | 210 |
최대 쿼리 문자열 길이3 | 4096 | 4096 | 4096 | 4096 | 4096 |
최대 요청 URL 길이3 | 8192 | 8192 | 8192 | 8192 | 8192 |
인스턴스당 ACU | 210-840 | 100-840/210-250 10 | 다양함 | 100 | 다양함 |
최대 메모리(인스턴스당 GB) | 4<sup4 | 3.5-14 | 1.75-256/8-256 | 다양함 | 1.5 |
최대 인스턴스 수(Windows/Linux) | 100/20 | SKU/10011에 따라 다름 | 10-30018 | 200/100 | 1000 15 |
계획13당 함수 앱 | 100 | 100 | 무제한4 | 무제한4 | 100 |
App Service 계획 | 해당 없음 | 리소스 그룹당 100 | 리소스 그룹당 100 | 해당 없음 | 지역당 100 |
앱당 배포 슬롯 12 | 해당 없음 | 3 | 1-2011 | 지원되지 않음 | 2 |
스토리지(임시)5 | 0.8GB | 21~140GB | 11~140GB | 해당 없음 | 0.5GB |
스토리지(영구) | 0GB7 | 250GB | 10-1000GB11 | 해당 없음 | 1GB6,7 |
앱당 사용자 지정 도메인 | 500 | 500 | 500 | 지원되지 않음 | 5007 |
사용자 지정 도메인 SSL 지원 | 무제한 SNI SSL 및 1개의 IP SSL 연결 포함 | 무제한 SNI SSL 및 1개의 IP SSL 연결 포함 | 무제한 SNI SSL 및 1개의 IP SSL 연결 포함 | 지원되지 않음 | 무제한 SNI SSL 연결 포함 |
서비스 제한에 대한 참고 사항:
- 기본적으로 App Service 요금제의 Functions 1.x 런타임에 대한 제한 시간은 무제한입니다.
- App Service 요금제를 Always On으로 설정해야 합니다. 표준 요금으로 결제하세요. 플랫폼 업데이트 중에는 10분의 유예 기간이 제공됩니다.
- 이러한 제한은 호스트에 설정됩니다.
- 호스트할 수 있는 함수 앱의 실제 수는 앱의 활동, 머신 인스턴스의 크기 및 해당 리소스 사용률에 따라 달라집니다.
- 스토리지 제한은 동일한 App Service 요금제에 있는 모든 앱에서 임시 스토리지의 총 콘텐츠 크기입니다. Linux의 소비 계획의 경우 스토리지는 현재 1.5GB입니다.
- 소비 계획은 지속형 스토리지에 Azure Files 공유를 사용합니다. 고유한 Azure Files 공유를 제공하는 경우 특정 공유 크기 제한은 WEBSITE_CONTENTAZUREFILECONNECTIONSTRING에 대해 설정한 스토리지 계정에 따라 달라집니다.
- Linux에서는 고유한 Azure Files 공유를 명시적으로 탑재해야 합니다.
- 소비 계획에서 함수 앱이 호스트되는 경우 CNAME 옵션만 지원됩니다. 프리미엄 플랜 또는 App Service 요금제에서 호스트되는 함수 앱의 경우 CNAME 또는 A 레코드 중 하나를 사용하여 사용자 지정 도메인을 매핑할 수 있습니다.
- 최대 실행 시간 제한 기간은 적용되지 않습니다. 그러나 함수 실행에 지정된 유예 기간은 스케일 인 중에는 60분이며, 플랫폼 업데이트 중에는 10분입니다.
- 작업자는 고객 앱을 호스트하는 역할입니다. 작업자는 vCPU 1개/3.5GB RAM, vCPU 2개/7GB RAM 또는 vCPU 4개/14GB RAM의 세 가지 고정 크기를 사용할 수 있습니다.
- 자세한 내용은 App Service 제한을 참조하세요.
- 프로덕션 슬롯을 포함합니다.
- 현재 지정된 구독에는 함수 앱 5,000개의 제한이 있습니다.
- Flex 사용량 플랜 인스턴스 크기는 현재 2,048MB 또는 4,096MB로 정의됩니다. 자세한 내용은 인스턴스 메모리를 참조하세요.
- Flex Consumption 계획에는 지정된 지역에 걸쳐 모든 인스턴스의 총 메모리 사용량을 제한하는 지역별 구독 할당량이 있습니다. 자세한 내용은 인스턴스 메모리를 참조하세요.
- 최소 복제본 수가 0으로 설정되면 기본 시간 제한은 앱에서 사용되는 특정 트리거에 따라 달라집니다.
- 최소 복제본 수가 하나 이상으로 설정된 경우.
- Container Apps에서는 사용 가능한 코어 할당량이 충분하다면 최대 복제본 수를 설정할 수 있습니다.
네트워킹 기능
기능 | Flex 사용량 계획 | 사용 계획 | 프리미엄 계획 | 전용 플랜/ASE | Container Apps1 |
---|---|---|---|---|---|
인바운드 IP 제한 | ✔ | ✔ | ✔ | ✔ | ✔ |
인바운드 프라이빗 엔드포인트 | ✔ | ✔ | ✔ | ||
가상 네트워크 통합 | ✔ | ✔2개 | ✔3 | ✔ | |
아웃바운드 IP 제한 | ✔ | ✔ | ✔ | ✔ |
- 자세한 내용은 Azure Container Apps 환경의 네트워킹을 참조하세요.
- 가상 네트워크 트리거를 사용할 때는 특별한 고려 사항이 있습니다.
- 전용/ASE 계획만 게이트웨이 필수 가상 네트워크 통합을 지원합니다.
결제
계획 | 세부 정보 |
---|---|
Flex 사용량 계획 | 청구는 실행 횟수, 함수를 적극적으로 실행하는 인스턴스의 메모리 및 항상 준비된 인스턴스의 비용을 기반으로 합니다. 자세한 내용은 Flex 사용량 계획 청구를 참조하세요. |
프리미엄 계획 | 프리미엄 계획은 필요하고 사전 준비된 인스턴스에서 사용되는 메모리와 코어 초 수에 기반합니다. 플랜당 하나 이상의 인스턴스는 항상 사전 준비된 상태로 유지되어야 합니다. 이 계획은 가장 예측 가능한 가격 책정을 제공합니다. |
전용 계획 | 웹앱과 같은 다른 App Service 리소스에서와 마찬가지로 App Service 계획에서 함수 앱에 대해 동일한 비용을 지불합니다. ASE의 경우 인프라에 대해 비용을 지불하고 환경의 크기에 따라 변경되지 않는 월정액이 있습니다. 또한 App Service 계획 vCPU당 비용이 발생합니다. ASE에 호스트되는 모든 앱은 격리 가격 책정 SKU에 해당합니다. 자세한 내용은 ASE 개요 문서를 참조하세요. |
Container Apps | Azure Container Apps의 청구는 플랜 유형을 기반으로 합니다. 자세한 내용은 Azure Container Apps 청구를 참조하세요. |
사용 계획 | 함수가 실행되는 시간 만큼만 요금을 지불하면 됩니다. 청구는 실행 횟수, 실행 시간 및 사용된 메모리를 기반으로 하며, |
동적 호스팅 계획(사용량, Flex 사용량 및 프리미엄) 간의 직접 비용 비교에 대한 내용은 Azure Functions 가격 책정 페이지를 참조하세요. 다양한 전용 계획 옵션의 가격 책정에 대한 내용은 App Service 가격 책정 페이지를 참조하세요. Container Apps 호스팅 가격 책정은 Azure Container Apps 가격 책정을 참조하세요.
기존 리소스 그룹에서 새 함수 앱 만들기에 대한 제한 사항
경우에 따라 기존 리소스 그룹에서 함수 앱에 대한 새 호스팅 계획을 만들려고 할 때 다음 오류 중 하나가 나타날 수 있습니다.
- 이 리소스 그룹에서는 가격 책정 계층을 사용할 수 없습니다.
- <SKU_name> 작업자는 리소스 그룹 <resource_group_name>에서 사용할 수 없습니다.
이는 다음 조건이 충족될 때 발생할 수 있습니다.
- 다른 함수 앱 또는 웹앱을 포함하는 기존 리소스 그룹에 함수 앱을 만듭니다. 예를 들어 Linux 전용 또는 Linux 프리미엄 계획과 동일한 리소스 그룹에서는 Linux 사용 앱이 지원되지 않습니다.
- 새 함수 앱은 이전 앱과 동일한 지역에 만들어집니다.
- 이전 앱은 새 앱과 어떤 식으로든 호환되지 않습니다. 이 오류는 SKU, 운영 체제 간에 또는 가용성 영역 지원과 같은 다른 플랫폼 수준 기능으로 인해 발생할 수 있습니다.
이 문제가 발생하는 이유는 함수 앱 및 웹앱 계획이 생성될 때 다양한 리소스 풀에 매핑되는 방식 때문입니다. 다른 SKU에는 다른 인프라 기능 세트가 필요합니다. 리소스 그룹에서 앱을 만들면 해당 리소스 그룹이 매핑되고 특정 리소스 풀에 할당됩니다. 해당 리소스 그룹에 다른 계획을 만들려고 하는데 매핑된 풀에 필요한 리소스가 없으면 이 오류가 발생합니다.
이 오류가 발생하면 대신 새 리소스 그룹에 함수 앱 및 호스팅 계획을 만듭니다.