Azure Functions의 안정성

이 문서에서는 Azure Functions의 안정성 지원을 설명하고 가용성 영역을 통한 지역 내 복원력과 지역 간 복구 및 비즈니스 연속성을 모두 설명합니다. Azure의 안정성 원칙에 대한 자세한 개요는 Azure 안정성을 참조하세요.

Azure Functions에 대한 가용성 영역 지원은 프리미엄(Elastic Premium) 및 전용(App Service) 플랜에서 사용할 수 있습니다. 이 문서에서는 프리미엄 플랜에 대한 영역 중복 지원에 중점을 둡니다. 전용 플랜의 영역 중복은 가용성 영역 지원으로 App Service 마이그레이션을 참조하세요.

가용성 영역 지원

Azure 가용성 영역은 각 Azure 지역 내에서 물리적으로 분리된 세 개 이상의 데이터 센터 그룹입니다. 각 영역 내의 데이터 센터에는 독립적인 전원, 냉각, 네트워킹 인프라가 장착되어 있습니다. 가용성 영역은 로컬 영역이 실패한 경우에 한 영역이 영향을 받는 경우 나머지 두 영역에서 지역 서비스, 용량 및 고가용성을 지원하도록 설계되었습니다.

오류는 소프트웨어 및 하드웨어 오류에서 지진, 홍수 및 화재와 같은 이벤트에 이르기까지 다양합니다. Azure 서비스의 중복성과 논리적 격리로 인해 오류 허용성에 도달합니다. Azure의 가용성 영역에 대한 자세한 내용은 지역 및 가용성 영역을 참조하세요.

Azure 가용성 영역 지원 서비스는 적절한 수준의 복원력과 유연성을 제공하도록 설계되었습니다. 두 가지 방법으로 구성할 수 있습니다. 영역 간 자동 복제를 사용하는 영역 중복 또는 특정 영역에 고정된 인스턴스를 사용하는 영역일 수 있습니다. 이러한 방식을 결합할 수도 있습니다. 영역 및 영역 중복 아키텍처에 대한 자세한 내용은 가용성 영역 및 지역 사용에 대한 권장 사항을 참조하세요.

Azure Functions는 영역 중복 배포를 지원합니다.

Functions를 영역 중복으로 구성하면 플랫폼에서 함수 앱 인스턴스를 선택한 지역의 세 영역에 자동으로 분산합니다.

영역 중복 배포를 통해 분산되는 인스턴스는 앱 규모가 확대 및 축소되더라도 다음 규칙 내에서 결정됩니다.

  • 최소 함수 앱 인스턴스 수는 3개입니다.
  • 용량을 3보다 크게 지정하면 용량이 3의 배수인 경우에만 인스턴스가 균등하게 분산됩니다.
  • 용량 값이 3*N보다 큰 경우 추가 인스턴스가 잔여 영역 하나나 두 개에서 분산됩니다.

Important

Azure Functions는 Azure App Service 플랫폼에서 실행할 수 있습니다. App Service 플랫폼에서 프리미엄 플랜 함수 앱을 호스팅하는 플랜은 탄력적 프리미엄 플랜이라고 하며 SKU 이름은 EP1과 같습니다. 프리미엄 플랜에서 함수 앱을 실행하기로 선택한 경우 EP1과 같이 “E”로 시작하는 SKU 이름으로 플랜을 만들어야 합니다. P1V2(프리미엄 V2 소형 플랜)와 같이 “P”로 시작하는 App Service 플랜 SKU 이름은 실제로 전용 호스팅 계획입니다. 탄력적 프리미엄이 아닌 전용이기 때문에 SKU 이름이 "P"로 시작하는 플랜은 동적으로 크기 조정되지 않으며 비용이 증가할 수 있습니다.

국가별 가용성

영역 중복 프리미엄 플랜은 다음 지역에서 사용할 수 있습니다.

아메리카 유럽 중동 아프리카 아시아 태평양
브라질 남부 프랑스 중부 이스라엘 중부 남아프리카 공화국 북부 오스트레일리아 동부
캐나다 중부 독일 중서부 카타르 중부 인도 중부
미국 중부 이탈리아 북부 아랍에미리트 북부 중국 북부 3
미국 동부 북유럽 동아시아
미국 동부 2 노르웨이 동부 일본 동부
미국 중남부 스웨덴 중부 동남 아시아
미국 서부 2 스위스 북부
미국 서부 3 영국 남부
서유럽

필수 조건

가용성 영역 지원은 프리미엄 플랜의 속성입니다. 가용성 영역을 사용하도록 설정하기 위한 현재 요구 사항/제한 사항은 다음과 같습니다.

  • 함수 앱에 대한 프리미엄 플랜을 만들 때만 가용성 영역을 사용하도록 설정할 수 있습니다. 기존 프리미엄 플랜은 가용성 영역을 사용하도록 변환할 수 없습니다.
  • 함수 앱의 스토리지 계정에 대해 ZRS(영역 중복 스토리지) 계정을 사용해야 합니다. 다른 형식의 스토리지 계정을 사용하는 경우 영역 중단 중에 Functions에서 예기치 않은 동작을 표시할 수 있습니다.
  • Windows와 Linux가 모두 지원됩니다.
  • Elastic Premium 또는 전용 호스팅 플랜에서 호스트되어야 합니다. 전용 플랜에서 영역 중복을 사용하는 방법을 알아보려면 가용성 영역 지원으로 App Service 마이그레이션을 참조하세요.
    • 가용성 영역 지원은 현재 사용량 플랜의 함수 앱에 사용할 수 없습니다.
  • 프리미엄 플랜에서 호스트되는 함수 앱에는 3개 이상의 항상 준비된 인스턴스가 있어야 합니다.
    • 인스턴스 수를 3 미만으로 지정하면 플랫폼에서 이 최소 수를 내부적으로 적용합니다.
  • 프리미엄 플랜 또는 가용성 영역을 지원하는 배율 단위를 사용하지 않거나 지원되지 않는 지역에 있거나 확실하지 않은 경우 마이그레이션 지침을 참조하세요.

가격 책정

가용성 영역 사용과 관련된 추가 비용은 없습니다. 영역 중복 프리미엄 App Service 요금제의 가격 책정은 단일 영역 프리미엄 플랜과 동일합니다. 사용하는 App Service 요금제마다 선택한 SKU, 지정한 용량 및 자동 크기 조정 조건을 기반으로 크기를 조정하는 모든 인스턴스에 따라 요금이 청구됩니다. 가용성 영역을 사용하도록 설정하지만 용량을 App Service 요금제의 3 미만으로 지정하면 플랫폼에서 해당 App Service 요금제에 최소 인스턴스 수(3)를 적용하고 해당 인스턴스 3개에 대한 요금을 청구합니다.

영역 중복 프리미엄 플랜 및 함수 앱 만들기

현재 영역 중복 프리미엄 플랜 및 함수 앱을 배포하는 두 가지 방법이 있습니다. Azure Portal 또는 ARM 템플릿을 사용할 수 있습니다.

  1. Azure Portal을 열고 함수 앱 만들기 페이지로 이동합니다. 포털에서 함수 앱을 만드는 방법에 대한 정보는 여기에서 찾을 수 있습니다.

  2. 기본 페이지에서 함수 앱의 필드를 채웁니다. 영역 중복성에 대한 특정 요구 사항이 있는 아래 표의 필드(아래 스크린샷에서도 강조 표시됨)에 특히 주의합니다.

    설정 제안 값 영역 중복에 대한 참고 사항
    지역 기본 지역 이 새 함수 앱이 만들어질 구독입니다. 위 목록에서 가용성 영역이 사용하도록 설정된 지역을 선택해야 합니다.

    Screenshot of Basics tab of function app create page.

  3. 호스팅 페이지에서 함수 앱 호스팅 계획의 필드를 작성합니다. 영역 중복성에 대한 특정 요구 사항이 있는 아래 표의 필드(아래 스크린샷에서도 강조 표시됨)에 특히 주의합니다.

    설정 제안 값 영역 중복에 대한 참고 사항
    Storage 계정 영역 중복 스토리지 계정 위의 사전 요구 사항 섹션에서 언급했듯이 영역 중복 함수 앱에 영역 중복 스토리지 계정을 사용하는 것이 좋습니다.
    계획 유형 Functions 프리미엄 이 문서에서는 프리미엄 플랜에서 영역 중복 앱을 만드는 방법을 자세히 설명합니다. 영역 중복은 현재 사용량 플랜에서 사용할 수 없습니다. App Service 요금제의 영역 중복에 대한 정보는 이 문서에서 찾을 수 있습니다.
    영역 중복 Enabled 이 필드는 앱이 영역 중복 여부를 결정하는 플래그를 채웁니다. 2단계에서 언급한 것처럼 영역 중복성을 지원하는 지역을 선택하지 않으면 Enabled를 선택할 수 없습니다.

    Screenshot of Hosting tab of function app create page.

  4. 나머지 함수 앱 만들기 프로세스는 정상적으로 함수 앱을 만듭니다. 나머지 만들기 프로세스에는 영역 중복성에 영향을 주는 필드가 없습니다.

영역 중복 플랜이 만들기 및 배포된 후 새 플랜에서 호스팅되는 모든 함수 앱은 영역 중복으로 간주됩니다.

가용성 영역 마이그레이션

Azure Function Apps는 현재 기존 함수 앱 인스턴스의 현재 위치 마이그레이션을 지원하지 않습니다. 퍼블릭 다중 테넌트 프리미엄 플랜을 비가용성 영역에서 가용성 영역 지원으로 마이그레이션하는 방법에 대한 자세한 내용은 가용성 영역 지원으로 App Service 마이그레이션을 참조하세요.

영역 다운 환경

영역 중복으로 구성된 함수 앱의 사용 가능한 모든 함수 앱 인스턴스가 사용하도록 설정되고 이벤트를 처리합니다. 영역의 가동이 중지되면 Functions에서 손실된 인스턴스를 검색하고, 필요한 경우 자동으로 새 대체 인스턴스를 찾으려고 시도합니다. 탄력적 크기 조정 동작은 계속 적용됩니다. 그러나 영역 가동 중지 시나리오에서는 손실된 인스턴스를 최선의 노력으로 다시 채우므로 추가 인스턴스에 대한 요청이 성공할 수 있다는 보장이 없습니다. 가용성 영역이 사용하도록 설정된 프리미엄 플랜에 배포된 애플리케이션은 동일한 지역의 다른 영역이 중단되는 경우에도 계속 실행됩니다. 그러나 다른 가용성 영역의 중단으로 인해 런타임이 아닌 동작이 여전히 영향을 받을 수 있습니다. 이러한 영향을 받는 동작에는 프리미엄 플랜 크기 조정, 애플리케이션 만들기, 애플리케이션 구성 및 애플리케이션 게시가 포함될 수 있습니다. 프리미엄 플랜의 영역 중복은 배포된 애플리케이션의 지속적인 작동 시간만 보장합니다.

Functions에서 인스턴스를 영역 중복 프리미엄 플랜에 할당하는 경우 기본 Azure Virtual Machine Scale Sets에서 제공하는 최상의 영역 균형을 사용합니다. 각 영역에 프리미엄 플랜에서 사용하는 다른 모든 영역과 동일한 수의 VM(± 1개 VM)이 있는 경우 이 프리미엄 플랜은 균형 조정된 것으로 간주됩니다.

지역 간 재해 복구 및 비즈니스 연속성

DR(재해 복구)은 가동 중지 시간 및 데이터 손실을 초래하는 자연 재해 또는 실패한 배포와 같은 영향이 큰 이벤트로부터 복구하는 것입니다. 원인에 관계없이 최상의 재해 해결책은 잘 정의되고 테스트된 DR 계획과 DR을 적극적으로 지원하는 애플리케이션 디자인입니다. 재해 복구 계획을 만들기 전에 재해 복구 전략을 디자인하기 위한 권장 사항을 참조하세요.

DR과 관련하여 Microsoft는 공동 책임 모델을 사용합니다. 공동 책임 모델에서 Microsoft는 기준 인프라 및 플랫폼 서비스를 사용할 수 있도록 합니다. 동시에 많은 Azure 서비스는 데이터를 자동으로 복제하거나 실패한 지역에서 대체하여 사용하도록 설정된 다른 지역으로 교차 복제하지 않습니다. 이러한 서비스의 경우 자신의 워크로드에 적합한 재해 복구 계획을 설정할 책임이 있습니다. Azure PaaS(Platform as a Service) 제품에서 실행되는 대부분의 서비스는 DR을 지원하는 기능과 지침을 제공하며, 서비스별 기능을 사용하여 빠른 복구를 지원하여 DR 계획을 개발하는 데 도움이 될 수 있습니다.

이 섹션에서는 재해 복구를 허용하는 Functions를 배포하는 데 사용할 수 있는 몇 가지 전략을 설명합니다.

다중 지역 재해 복구

사용할 수 있는 기본 제공 중복성이 없으므로 함수는 특정 Azure 지역의 함수 앱에서 실행됩니다. 중단 중 실행 손실을 방지하기 위해 동일한 함수를 여러 지역의 함수 앱에 중복 배포할 수 있습니다. 다중 지역 배포에 대한 자세한 내용은 고가용성 다중 지역 웹 애플리케이션의 지침을 참조하세요.

여러 지역에서 같은 함수 코드를 실행할 때는 활성-활성활성-수동 등 두 가지 패턴을 고려합니다.

HTTP 트리거 함수에 대한 활성-활성 패턴

활성-활성 패턴을 사용하면 두 지역의 함수가 복제 방식이나 순환 방식으로 활발히 실행되고 이벤트를 처리합니다. 여러 지역에서 실행되는 함수 간에 HTTP 요청을 라우팅하고 라운드 로빈할 수 있는 중요한 HTTP 트리거 함수에 Azure Front Door와 함께 활성-활성 패턴을 사용하는 것이 좋습니다. 또한 Front Door에서 각 엔드포인트의 상태를 주기적으로 확인할 수 있습니다. 한 지역의 함수가 상태 확인에 응답하지 않으면 Azure Front Door는 해당 함수를 순환에서 제외하고 나머지 정상 함수로만 트래픽을 전달합니다.

Architecture for Azure Front Door and Function

Important

그러나 비 HTTPS 트리거 함수에 활성-수동 패턴을 사용하는 것이 좋습니다. 비 HTTP 트리거 함수에 대한 활성-활성 배포를 만들 수 있습니다. 그러나 두 활성 영역이 서로 상호 작용하거나 조정하는 방식을 고려해야 합니다. 동일한 Service Bus 큐에서 각각이 트리거되는 두 지역에 동일한 함수 앱을 배포하면 해당 큐를 큐에서 빼낼 때 경쟁 소비자 역할을 수행합니다. 이는 각 메시지가 인스턴스 중 하나에서만 처리되고 있음을 의미하지만 단일 Service Bus 인스턴스에 여전히 단일 실패 지점이 있음을 의미합니다.

대신 주 지역에 하나, 보조 지역에 하나를 포함하여 두 개의 Service Bus 큐를 배포할 수 있습니다. 이 경우 각각 해당 지역에서 활성화된 Service Bus 큐를 가리키는 두 개의 함수 앱이 있을 수 있습니다. 이 토폴로지의 문제는 큐 메시지가 두 지역 간에 분산되는 방식입니다. 이는 일반적으로 각 게시자가 지역에 메시지를 게시하려고 시도하고, 각 메시지가 활성 함수 앱에서 처리되는 것을 의미합니다. 이렇게 하면 원하는 활성/활성 패턴이 만들어지지만 컴퓨팅 복제와 데이터 통합 시기 또는 방법과 관련된 다른 문제도 발생합니다.

비 HTTPS 트리거 함수에 대한 활성-수동 패턴

Service Bus 및 Event Hubs 트리거 함수와 같은 이벤트 기반의 비 HTTP 트리거 함수에 활성-수동 패턴을 사용하는 것이 좋습니다.

비 HTTP 트리거 함수에 대한 중복성을 만들려면 활성-수동 패턴을 사용합니다. 활성-수동 패턴을 사용하면 함수는 이벤트를 수신하는 지역에서 적극적으로 실행되지만 두 번째 지역의 같은 함수는 유휴 상태로 유지됩니다. 활성-수동 패턴은 단일 함수에서 각 메시지를 처리하는 방법을 제공하지만 재해가 발생한 경우 보조 지역으로 장애 조치하는 메커니즘을 제공합니다. 함수 앱은 Azure Service Bus 지역 복구Azure Event Hubs 지역 복구와 같은 파트너 서비스의 장애 조치(failover) 동작과 함께 작동합니다.

Azure Event Hubs 트리거를 사용하는 예제 토폴로지를 고려합니다. 이 경우 활성/수동 패턴에는 다음 구성 요소가 필요합니다.

  • Azure Event Hubs가 기본 및 보조 지역에 모두 배포되어 있습니다.
  • 기본 및 보조 이벤트 허브를 페어링하기 위해 지역 재해를 사용하도록 설정했습니다. 또한 이벤트 허브에 연결하고 연결 정보를 변경하지 않고 기본에서 보조로 전환하는 데 사용할 수 있는 별칭을 만듭니다.
  • 함수 앱은 기본 및 보조(장애 조치(failover)) 지역 모두에 배포되며 보조 지역의 앱은 메시지가 전송되지 않기 때문에 기본적으로 유휴 상태입니다.
  • 함수 앱은 해당 이벤트 허브에 대한 직접(별칭 아님) 연결 문자열에서 트리거됩니다.
  • 이벤트 허브에 대한 게시자는 별칭 연결 문자열에 게시해야 합니다.

Active-passive example architecture

장애 조치(failover) 전에 공유 별칭으로 보내는 게시자는 기본 이벤트 허브로 라우팅합니다. 기본 함수 앱은 기본 이벤트 허브만을 대상으로 수신 대기합니다. 보조 함수 앱은 수동적이고 유휴 상태입니다. 장애 조치(failover)가 시작되는 즉시 공유 별칭으로 보내는 게시자는 보조 이벤트 허브로 라우팅됩니다. 이제 보조 함수 앱이 활성화되고 자동으로 트리거되기 시작합니다. 보조 지역에 대한 효과적인 장애 조치(failover)는 이벤트 허브에서 전적으로 구동될 수 있으며, 함수는 해당 이벤트 허브가 활성 상태인 경우에만 활성화됩니다.

자세한 내용은 Service BusEvent Hubs의 장애 조치(failover)에 대한 정보 및 고려 사항을 참조하세요.

다음 단계