함수 앱을 다른 Azure 지역으로 이전
이 문서에서는 Azure Functions에서 호스트되는 함수 앱을 다른 Azure 지역으로 이동하는 방법을 설명합니다.
기존 Azure 리소스를 한 지역에서 다른 지역으로 이동하려는 이유는 다양합니다. 다음을 수행하려고 할 수 있습니다.
- 새 Azure 지역 활용.
- 특정 지역에서만 사용할 수 있는 기능 또는 서비스 배포.
- 내부 정책 및 거버넌스 요구 사항 충족.
- 회사 인수 합병에 부합.
- 용량 계획 요구 사항 충족.
함수 앱을 호스팅하는 Azure 리소스는 지역별로 다르며 지역 간에 이동할 수 없습니다. 대신, 대상 지역에 기존 함수 앱 리소스의 복사본을 만든 다음, 함수 코드를 새 앱에 다시 배포해야 합니다.
동일한 지역에 있는 한, 동일한 리소스를 다른 리소스 그룹이나 구독으로 옮길 수 있습니다. 자세한 내용은 App Service 리소스를 새 리소스 그룹 또는 구독으로 이동을 참조하세요.
필수 조건
- 리소스를 이동할 Azure Functions 및 관련 서비스를 대상 지역에서 지원하는지 확인합니다.
- 새로운 지역에 필요한 리소스를 만들 수 있는 권한이 있는지 확인합니다.
준비
원본 지역에서 사용된 모든 함수 앱 리소스를 식별합니다. 여기에는 다음이 포함될 수 있습니다.
앱을 새로운 지역으로 이전할 준비를 할 때, 아키텍처의 몇 가지 부분에 대해 특별한 고려와 계획이 필요합니다.
함수 앱 이름
함수 앱 이름은 모든 Azure 앱에서 전역적으로 고유해야 합니다. 즉, 새 함수 앱은 원본 앱과 이름과 URL이 같을 수 없습니다. 사용자 지정 DNS를 사용하는 경우에도 이는 사실입니다. 기본 <APP_NAME>.azurewebsites.net
은 여전히 고유해야 하기 때문입니다. 함수 앱에서 HTTP 엔드포인트에 연결하는 모든 클라이언트를 업데이트해야 할 수도 있습니다. 이러한 클라이언트는 요청을 할 때 새 URL을 사용해야 합니다.
소스 코드
이상적으로는 어떤 종류의 코드 리포지토리에 소스 코드를 보관하거나, Linux 컨테이너에서 실행되는 경우 컨테이너 리포지토리에 소스 코드를 보관합니다. 지속적인 배포를 사용하는 경우 리포지토리 또는 컨테이너 배포 연결을 새 함수 앱 주소로 전환하는 것을 계획합니다. 어떤 이유로 소스 코드가 더 이상 없다면 원래 함수 앱에서 현재 실행 중인 패키지를 다운로드할 수 있습니다. 원본 파일을 코드 리포지토리에 저장하고 업데이트를 위해 지속적인 배포를 사용하는 것이 좋습니다.
기본 스토리지 계정
Functions 호스트에는 Azure Storage 계정이 필요합니다. 자세한 내용은 스토리지 계정 요구 사항을 참조하세요. 최상의 성능을 위해 함수 앱은 동일한 지역의 스토리지 계정을 사용해야 합니다. 새 지역에서 새 스토리지 계정으로 새 앱을 만들면 앱은 새로운 함수 액세스 키 집합을 가져오고 모든 트리거(예: 타이머 트리거)의 상태가 다시 설정됩니다.
지속된 로컬 스토리지
Functions 실행은 상태 비저장이 되도록 의도되었습니다. 하지만 로컬 파일 시스템에 데이터를 쓰는 것은 금지하지 않습니다. 애플리케이션에서 생성 및 사용되는 데이터를 %HOME%\site
가상 드라이브에 저장하는 것은 가능하지만, 이 데이터는 상태와 관련이 없어야 합니다. 시나리오에서 Functions 실행 간에 상태를 유지해야 하는 경우 대신 Durable Functions를 사용하는 것이 좋습니다.
애플리케이션이 앱의 공유 스토리지 경로에 데이터를 유지하는 경우 리소스 이동 중에 해당 상태를 어떻게 관리할 것인지 계획해야 합니다. 전용(App Service) 플랜 앱의 경우 공유가 사이트의 일부라는 점을 유념해야 합니다. 사용량 및 프리미엄 플랜의 경우 공유는 기본적으로 기본 스토리지 계정의 Azure Files 공유입니다. Linux에서 실행되는 앱은 지속적인 스토리지에 명시적으로 탑재된 공유를 사용할 수 있습니다.
연결된 서비스
사용자의 함수는 서비스 SDK나 트리거 및 바인딩을 사용하여 Azure 서비스 및 다른 리소스에 연결할 수 있습니다. 앱이 새로운 지역으로 이동하면 연결된 모든 서비스에 부정적인 영향을 미칠 수 있습니다. 대기 시간이나 처리 속도가 문제인 경우 연결된 모든 서비스를 새로운 지역으로 옮기는 것도 고려합니다. 해당 지역 간에 리소스를 이동하는 방법을 알아보려면 해당 서비스에 대한 설명서를 참조하세요. 연결된 서비스가 있는 앱을 옮길 때, 옮기는 동안 지역 간 재해 복구 및 비즈니스 연속성 전략을 고려해 보는 것이 좋습니다.
연결된 서비스를 변경하려면 해당 서비스에 연결하는 데 사용되는 애플리케이션 설정에 저장된 값을 업데이트해야 할 수도 있습니다.
구성
Azure Portal에서 기존 앱 설정 및 연결 문자열의 스냅샷을 캡처할 수 있습니다. 설정>환경 변수를 확장하고 앱 설정 또는 연결 문자열에서 고급 편집을 선택한 다음 기존 설정이나 연결이 포함된 JSON 출력을 저장합니다. 새 지역에서 이러한 설정을 다시 만들어야 하지만, 연결된 서비스의 후속 지역 변경으로 인해 값 자체가 변경될 가능성이 높습니다.
기존 Key Vault 참조는 Azure 지리적 경계를 넘어 내보낼 수 없습니다. 새로운 지역에서 필요한 참조를 다시 만들어야 합니다.
App Configuration은 Azure App Configuration이나 다른 중앙(다운스트림) 데이터베이스 종속성에서 관리될 수 있습니다. 환경 및 지역별 설정에 수정이 필요할 수 있는 App Configuration 저장소나 비슷한 저장소를 검토합니다.
사용자 지정 도메인
함수 앱에서 사용자 지정 도메인을 사용하는 경우 대상 앱에 사전에 바인딩합니다. 대상 앱에서 해당 도메인을 사용하도록 설정하고 확인합니다. 이동 후에는 도메인 이름을 다시 매핑해야 합니다.
가상 네트워크
Azure Functions를 사용하면 앱을 가상 네트워크 리소스와 통합할 수 있으며, 가상 네트워크에서 실행할 수도 있습니다. 자세한 내용은 Azure Functions 네트워킹 옵션을 참조하세요. 새로운 지역으로 이동하는 경우 앱을 배포하기 전에 먼저 필요한 모든 가상 네트워크 및 서브넷 리소스를 이동하거나 다시 만들어야 합니다. 여기에는 프라이빗 엔드포인트 및 서비스 엔드포인트를 이동하거나 다시 만드는 작업이 포함됩니다.
Identities
새로운 대상 지역에서 앱과 함께 시스템에 할당된 관리 ID를 다시 만들어야 합니다. 일반적으로, 자동 생성된 Microsoft Entra ID 앱(EasyAuth가 사용하는 앱)은 기본적으로 앱 리소스 이름으로 설정됩니다.
사용자가 할당한 관리 ID도 지역 간에 이동할 수 없습니다. 앱과 동일한 리소스 그룹에 사용자가 할당한 관리 ID를 유지하려면 새 지역에서 해당 ID를 다시 만들어야 합니다. 자세한 내용은 Azure 리소스의 관리 ID를 다른 지역으로 이전을 참조하세요.
그룹 멤버 자격을 포함하여 바꾸는 원래 ID와 동일한 권한을 관리 ID에 재배치된 서비스에서 부여합니다.
인증서
App Service 인증서 리소스는 새 리소스 그룹 또는 구독으로 이동할 수 있지만, 지역 간에는 이동할 수 없습니다. 내보낼 수 있는 인증서는 새 지역의 앱이나 Key Vault로 가져올 수도 있습니다. 이러한 내보내기 및 가져오기 프로세스는 지역 간 이동과 같습니다.
서비스 이전을 계획할 때 고려해야 할 다양한 형식의 인증서가 있습니다.
인증서 유형 | Exportable | 설명 |
---|---|---|
App Service 관리 | 아니요 | 새로운 지역에서 이러한 인증서를 다시 만듭니다. |
Azure Key Vault 관리 | 예 | 이러한 인증서는 Key Vault에서 내보낸 다음 새 지역의 Key Vault로 가져올 수 있습니다. |
프라이빗 키(자체 관리) | 예 | Azure 외부에서 취득한 인증서는 App Service에서 내보낸 다음 새 앱이나 새 지역의 Key Vault로 가져올 수 있습니다. |
공개 키 | 아니요 | 앱에는 비밀 키가 없고 공개 키만 있는 인증서가 있을 수 있으며, 이러한 인증서는 다른 보안 엔드포인트에 액세스하는 데 사용됩니다. 필요한 공개 키 인증서 파일을 가져와 새 지역의 앱으로 가져옵니다. |
액세스 키
Functions는 액세스 키를 사용하여 함수 앱에서 HTTP 엔드포인트에 액세스하기 어렵게 만듭니다. 이러한 키는 기본 스토리지 계정에 암호화되어 보관됩니다. 새로운 지역에서 새로운 앱을 만들면 새로운 키 집합이 만들어집니다. 새 지역에서 새 키를 사용하려면 액세스 키를 사용하는 기존 클라이언트를 업데이트해야 합니다. 새로운 키를 사용해야 하지만, 새로운 앱에서 이전 키를 다시 만들 수도 있습니다. 자세한 내용은 Azure Functions에서 액세스 키 작업을 참조하세요.
가동 중지 시간
최소 가동 중지 시간이 요구되는 경우 재해 복구 아키텍처를 구현하기 위해 권장하는 대로 두 지역에서 함수 앱을 실행하는 것이 좋습니다. 구현하는 구체적인 아키텍처는 함수 앱의 트리거 유형에 따라 달라집니다. 자세한 내용은 Azure Functions의 안정성을 참조하세요.
지속성 함수
Durable Functions 확장을 사용하면 상태 저장 엔터티를 사용하여 함수 실행의 상태를 유지하는 오케스트레이션을 정의할 수 있습니다. 이상적으로는, 특히 새로운 지역에서 새로운 스토리지 계정으로 전환하려는 경우, Durable Functions 앱을 마이그레이션하기 전에 실행 중인 오케스트레이션이 완료되도록 해야 합니다. Durable Functions 앱을 마이그레이션할 때 다음 재해 복구 및 지역 배포 전략 중 하나를 사용하는 것이 좋습니다.
재배치
새 지역에서 함수 앱을 다시 만들려면 먼저 App Service 요금제의 Azure 인프라, 함수 앱 인스턴스, 가상 네트워크, ID, 슬롯과 같은 관련 리소스를 다시 만들어야 합니다. 또한 앱에 필요한 Azure 리소스를 다시 연결하거나 새 지역에서 다시 만들어야 합니다. 이러한 리소스에는 기본 Azure Storage 계정과 Application Insights 인스턴스가 포함될 수 있습니다.
그런 다음 실제 애플리케이션 소스 코드나 컨테이너를 새 지역에서 실행되는 함수 앱으로 패키지하여 다시 배포할 수 있습니다.
Azure 인프라 다시 만들기
대상 지역에서 Azure의 함수 앱과 관련 리소스를 만드는 방법에는 여러 가지가 있습니다.
- 배포 템플릿: 원래 IaC(코드 제공 인프라) 파일(Bicep, ARM 템플릿 또는 Terraform)을 사용하여 함수 앱을 배포한 경우 이전 배포를 업데이트하여 새 지역을 대상으로 하고 이를 사용하여 새 지역에서 리소스를 다시 만들 수 있습니다. 더 이상 이러한 배포 파일이 없으면 언제든지 Azure Portal에서 기존 리소스 그룹에 대한 ARM 템플릿을 다운로드할 수 있습니다.
- Azure CLI/PowerShell 스크립트: 원래 Azure CLI 또는 Azure PowerShell 스크립트를 사용하여 함수 앱을 배포한 경우 이러한 스크립트를 업데이트하여 새 지역을 대상으로 지정하고 다시 실행할 수 있습니다. 더 이상 이러한 스크립트가 없으면 Azure Portal에서 기존 리소스 그룹에 대한 ARM 템플릿을 다운로드할 수도 있습니다.
- Azure Portal: 원래 포털에서 함수 앱을 만들었거나 스크립트나 IaC 파일을 사용하는 것이 불편하다면 포털에서 모든 것을 다시 만들 수 있습니다. 원래 앱과 동일한 호스팅 플랜, 언어 런타임 및 언어 버전을 사용해야 합니다.
구성된 리소스 검토하기
대상 지역에서 위의 준비 단계에서 식별된 리소스를 검토하고 구성합니다(배포 단계에서 구성하지 않은 경우). 관리 ID 인증과 함께 지속적인 배포를 사용하는 경우 새 함수 앱에 필요한 ID와 역할 매핑이 있는지 확인합니다.
소스 코드 다시 배포
이제 인프라가 구축되었으므로 소스 코드를 다시 패키지하여 함수 앱에 다시 배포할 수 있습니다. 이제 소스 코드나 컨테이너 이미지를 리포지토리로 옮기고 해당 리포지토리에서 지속적인 배포를 사용하도록 설정하기에 좋은 시점입니다.
또한 Functions에서 지원하는 다른 게시 방법을 사용할 수도 있습니다. 대부분의 도구 기반 게시에서는 scm
엔드포인트에서 기본 인증을 사용하도록 설정해야 하는데, 이는 프로덕션 앱에는 권장되지 않습니다.
이전 고려 사항
- 대상 지역에서 구성을 확인하고 함수를 테스트해야 합니다.
- 사용자 지정 도메인을 구성한 경우 도메인 이름을 다시 매핑합니다.
- 전용(App Service) 플랜에서 실행되는 함수 앱의 경우 계획이 하나 이상의 웹앱과 공유되는 경우 App Service 마이그레이션 계획도 검토합니다.
정리
이동이 완료되면 원본 지역에서 함수 앱 및 호스팅 계획을 삭제합니다. 앱 자체가 실행되고 있지 않더라도 프리미엄 또는 전용 플랜에서 함수 앱에 대한 요금을 지불합니다. 새로운 지역에서 다른 서비스를 다시 만들었다면, 더 이상 필요하지 않다는 것을 확인한 후에는 이전 서비스도 삭제해야 합니다.
관련 참고 자료
지리적으로 중복된 고급 솔루션 아키텍처의 일부로 여러 지역에서 실행되는 함수 앱의 예를 보려면 Azure 아키텍처 센터를 검토합니다.