Azure Functions의 배포 기술
몇 가지 다른 기술을 사용하여 Azure Functions 프로젝트 코드를 Azure에 배포할 수 있습니다. 이 문서에서는 사용자에게 제공되는 배포 방법을 간략하게 설명하고 다양한 시나리오에서 가장 적합한 방법에 대한 권장 지침을 제공합니다. 또한 기본 배포 기술의 모든 목록과 주요 세부 정보를 제공합니다.
배포 방법
Azure에서 함수 앱에 코드를 게시하는 데 사용하는 배포 기술은 특정 요구 사항 및 개발 주기의 지점에 따라 달라집니다. 예를 들어, 개발 및 테스트 중에 Visual Studio Code와 같은 개발 도구에서 직접 배포할 수 있습니다. 앱이 프로덕션 환경에 있는 경우 유효성 검사 및 테스트를 포함할 수 있는 자동화된 게시 파이프라인을 사용하거나 소스 제어에서 계속 게시할 수 있습니다.
다음 표에서는 코드 프로젝트에 사용할 수 있는 배포 방법에 대해 설명합니다.
배포 유형 | 메서드 | 적합한 대상... |
---|---|---|
도구 기반 | • Visual Studio Code 게시 • Visual Studio 게시 • Core Tools 게시 |
개발 중 배포 및 기타 임시 배포. 로컬 개발 도구를 사용하여 주문형 코드를 배포합니다. |
App Service 관리 | • 배포 센터(CI/CD) • 컨테이너 배포 |
소스 제어 또는 컨테이너 레지스트리에서 연속 배포(CI/CD) 배포는 App Service 플랫폼(Kudu)에서 관리됩니다. |
외부 파이프라인 | • Azure Pipelines • GitHub Actions |
자동화된 배포의 일부로 실행해야 하는 유효성 검사, 테스트 및 기타 작업을 포함하는 프로덕션 파이프라인입니다. 배포는 파이프라인을 통해 관리됩니다. |
특정 배포에서는 특정 시나리오에 따라 최상의 기술을 사용해야 합니다. 대부분의 배포 방법은 배포에 권장되는 zip 배포를 기반으로 합니다.
배포 기술 가용성
또한 배포 방법은 함수 앱을 실행하는 호스팅 계획 및 운영 체제에 따라 달라집니다.
현재 Functions는 함수 앱을 호스팅하기 위한 5가지 옵션을 제공합니다.
플랜마다 동작이 다릅니다. 각 호스팅 계획 및 운영 체제에 모든 배포 기술을 사용할 수 있는 것은 아닙니다. 이 차트는 지원되는 배포 기술에 대한 정보를 제공합니다.
배포 기술 | Flex 사용량 | 소비 | 탄력적 프리미엄 | 전용 | Container Apps |
---|---|---|---|---|---|
OneDeploy | ✔ | ||||
Zip 배포 | ✔ | ✔ | ✔ | ||
외부 패키지 URL1 | ✔ | ✔ | ✔ | ||
Docker 컨테이너 | Linux 전용 | Linux 전용 | Linux 전용 | ✔ | |
원본 제어 | Windows 전용 | ✔ | ✔ | ||
로컬 Git1 | Windows 전용 | ✔ | ✔ | ||
FTPS1 | Windows 전용 | ✔ | ✔ | ||
포털 내 편집2 | ✔ | ✔ | ✔ |
1트리거를 수동으로 동기화해야 하는 배포 기술은 권장되지 않습니다.
2 포털 외부에서 함수 앱에 코드를 배포하면 포털 내 편집이 비활성화됩니다. 포털 내 편집에 대한 언어 지원 세부 정보를 비롯한 자세한 내용은 언어 지원 세부 정보를 참조하세요.
주요 개념
몇 가지 주요 개념은 Azure Functions에서 배포가 작동하는 방식을 이해하는 데 중요합니다.
트리거 동기화
트리거를 변경하는 경우 Functions 인프라에 변경 내용이 전달되어야 합니다. 여러 배포 기술에 대한 동기화가 자동으로 수행됩니다. 그러나 일부 경우에는 트리거를 수동으로 동기화해야 합니다.
다음 배포 옵션을 사용할 때는 트리거를 수동으로 동기화해야 합니다.
다음 방법 중 하나로 트리거를 동기화할 수 있습니다.
Azure Portal에서 함수 앱을 다시 시작합니다.
이
az rest
예제와 같이 명령을 사용하여 API를syncfunctiontriggers
호출하는 HTTP POST 요청을 보냅니다.az rest --method post --url https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Web/sites/<APP_NAME>/syncfunctiontriggers?api-version=2016-08-01
배포 패키지의 업데이트된 버전을 배포하고 동일한 외부 패키지 URL을 유지하는 경우 함수 앱을 수동으로 다시 시작해야 합니다. 이는 동일한 패키지 URL에서 업데이트를 동기화하고 다시 배포해야 함을 호스트에 나타냅니다. Functions 호스트는 애플리케이션이 시작된 후에도 백그라운드 트리거 동기화를 수행합니다. 그러나 사용량 및 탄력적 프리미엄 호스팅 계획의 경우 다음 시나리오에서는 트리거를 수동으로 동기화해야 합니다.
- ARM 템플릿 또는 Terraform과 함께 외부 패키지 URL을 사용하여 배포합니다.
- 동일한 외부 패키지 URL에서 배포 패키지를 업데이트하는 경우.
원격 빌드
배포하는 동안 Azure Functions에 코드 프로젝트의 원격 빌드를 수행하도록 요청할 수 있습니다. 이러한 시나리오에서는 로컬로 빌드하는 대신 원격 빌드를 요청해야 합니다.
- Windows 컴퓨터에서 개발된 Linux 기반 함수 앱에 앱을 배포하고 있습니다. 일반적으로 Python 앱 개발의 경우입니다. Windows에서 로컬로 배포 패키지를 빌드할 때 잘못된 라이브러리를 사용할 수 있습니다.
- 프로젝트에 사용자 지정 패키지 인덱스가 종속되어 있습니다.
- 배포 패키지의 크기를 줄이려고 합니다.
원격 빌드를 요청하는 방법은 앱이 Windows 또는 Linux의 Azure에서 실행되는지에 따라 달라집니다.
Windows에서 실행되는 모든 함수 앱에는 Kudu에서 제공하는 scm
사이트인 작은 관리 앱이 있습니다. 이 사이트는 Azure Functions에 대한 대부분의 배포 및 빌드 논리를 처리합니다.
앱을 Windows에 배포할 때 dotnet restore
(C#) 또는 npm install
(JavaScript)과 같은 언어별 명령이 실행됩니다.
배포 중에 원격 빌드를 사용하는 경우 다음 고려 사항이 적용됩니다.
- 사용량 플랜에서는 Linux에서 실행되는 함수 앱에 대해 원격 빌드가 지원됩니다. 그러나 이러한 앱에는
scm
(Kudu) 사이트가 없기 때문에 배포 옵션이 제한됩니다. - 프리미엄 계획 또는 전용(App Service) 계획에서 Linux에서 실행되는 함수 앱에는
scm
(Kudu) 사이트가 있지만 Windows에 비해 제한적입니다. - 앱이 run-from-package를 사용하는 경우 원격 빌드가 수행되지 않습니다. 이러한 경우 원격 빌드를 사용하는 방법을 알아보려면 Zip 배포를 참조하세요.
- 기능을 사용할 수 있게 되기 전에 앱이 생성(2019년 8월 1일)되면 원격 빌드에 문제가 있을 수 있습니다. 이전 앱의 경우 새 함수 앱을 만들거나
az functionapp update --resource-group <RESOURCE_GROUP_NAME> --name <APP_NAME>
을 실행하여 함수 앱을 업데이트합니다. 이 명령은 두 번 시도해야 성공할 수 있습니다.
앱 콘텐츠 스토리지
패키지 기반 배포 메서드는 AzureWebJobsStorage 설정에 정의된 함수 앱과 연결된 스토리지 계정에 패키지를 저장합니다. 사용 가능한 경우 소비 및 탄력적 프리미엄 요금제 앱은 이 계정의 Azure Files 콘텐츠 공유를 사용하려고 하지만 다른 위치에서 패키지를 유지 관리할 수도 있습니다. Flex Consumption 계획 앱은 배포에 사용할 다른 스토리지 계정을 구성하지 않는 한 기본 스토리지 계정의 스토리지 컨테이너를 대신 사용합니다. 자세한 내용은 다음 섹션에서 다루는 각 배포 기술에 앱 콘텐츠가 저장되는 위치의 세부 정보를 검토하세요.
Important
스토리지 계정은 중요한 앱 데이터를 저장하는 데 사용되며, 이러한 중요 앱 데이터에 애플리케이션 코드 자체가 포함되는 경우도 있습니다. 다른 앱이나 사용자가 스토리지 계정에 액세스하는 행위를 제한해야 합니다.
배포 기술 세부 정보
Azure Functions에서 사용할 수 있는 배포 방법은 다음과 같습니다.
하나의 배포
하나의 배포는 Flex 소비 계획에서 앱에 대해 지원되는 유일한 배포 기술입니다. 최종 결과는 함수 앱이 실행되는 즉시 실행 가능한 .zip 패키지입니다.
사용 방법: Visual Studio Code 게시 기능을 사용하거나 Azure Functions Core Tools 또는 Azure CLI를 사용하여 명령줄에서 배포합니다. 마찬가지로 Azure Dev Ops 작업 및 GitHub 작업은 Flex Consumption 앱이 배포되고 있음을 감지할 때 하나의 배포를 활용합니다.
Flex Consumption 앱을 만들 때 배포 스토리지(Blob) 컨테이너와 해당 컨테이너에 대한 인증 방법을 지정해야 합니다. 기본적으로 연결과 동일한 스토리지 계정이
AzureWebJobsStorage
사용되며 연결 문자열 인증 방법으로 사용됩니다. 따라서 배포 설정은 애플리케이션 설정 없이 앱 만들기 시간 동안 구성됩니다.
사용 시기: 하나의 배포는 Flex 소비 계획에서 실행되는 함수 앱에 사용할 수 있는 유일한 배포 기술입니다.
앱 콘텐츠가 저장되는 위치: Flex Consumption 함수 앱을 만들 때 배포 스토리지 컨테이너를 지정합니다. 플랫폼이 배포한 앱 콘텐츠를 업로드하는 Blob 컨테이너입니다. 위치를 변경하려면 Azure Portal의 배포 설정 블레이드를 방문하거나 Azure CLI를 사용할 수 있습니다.
Zip 배포
Zip 배포는 소비, 탄력적 프리미엄 및 App Service(전용) 계획의 함수 앱에 대한 기본 및 권장 배포 기술입니다. 결과적으로 함수 앱이 실행되는 즉시 실행 가능한 .zip 패키지가 생성됩니다. 플랫폼이 앱 콘텐츠를 원격으로 빌드하고 저장해야 한다는 점에서 외부 패키지 URL 과 다릅니다.
사용 방법: 선호하는 클라이언트 도구인 Visual Studio Code, Visual Studio를 사용하여 배포하거나 Azure Functions Core Tools 또는 Azure CLI를 사용하여 명령줄에서 배포합니다. Azure Dev Ops 작업 및 GitHub 작업 도 마찬가지로 zip 배포를 활용합니다.
zip 배포를 사용하여 배포하는 경우 앱이 패키지에서 실행되도록 설정할 수 있습니다. 패키지에서 실행하려면
WEBSITE_RUN_FROM_PACKAGE
애플리케이션 설정 값을1
로 설정합니다. zip 배포를 권장합니다. 이 방식을 사용하면 애플리케이션에 대한 로드 시간이 빨라지며, 이것이 VS Code, Visual Studio 및 Azure CLI에 대한 기본값입니다.
사용 시기: Zip 배포는 Windows 소비, Windows 및 Linux Elastic Premium 및 Windows 및 Linux 전용 앱 서비스(전용) 계획의 함수 앱에 대한 기본 및 권장 배포 기술입니다.
앱 콘텐츠가 저장되는 위치: zip 배포의 앱 콘텐츠는 기본적으로 파일 시스템에 저장되며, 함수 앱을 만들 때 지정된 스토리지 계정의 Azure Files에서 지원될 수 있습니다. Linux 소비에서 앱 콘텐츠는 앱 설정으로 지정된
AzureWebJobsStorage
스토리지 계정의 Blob에 유지되고 앱 설정WEBSITE_RUN_FROM_PACKAGE
은 Blob URL 값을 사용합니다.
외부 패키지 URL
배포 수행 방법을 수동으로 제어하려는 경우 외부 패키지 URL이 옵션입니다. 빌드된 앱 콘텐츠를 포함하는 즉시 실행 가능한 .zip 패키지를 Blob Storage에 업로드하고 이 외부 URL을 함수 앱의 애플리케이션 설정으로 참조해야 합니다. 앱이 다시 시작될 때마다 패키지를 가져오고, 탑재하고, 패키지에서 실행 모드로 실행됩니다.
사용 방법:
WEBSITE_RUN_FROM_PACKAGE
를 애플리케이션 설정에 추가합니다. 이 설정의 값은 앱을 실행하려는 특정 패키지의 위치를 가리키는 Blob URL이어야 합니다. Portal에서 또는 Azure CLI를 사용하여 설정을 추가할 수 있습니다.Azure Blob Storage를 사용하는 경우 함수 앱은 관리 ID 기반 연결을 사용하거나 SAS(공유 액세스 서명)를 사용하여 컨테이너에 액세스할 수 있습니다. 선택하는 옵션은 WEBSITE_RUN_FROM_PACKAGE 값으로 사용하는 URL의 종류에 영향을 줍니다. 관리 ID는 전체 보안에 권장되며 SAS 토큰이 만료되고 수동으로 유지 관리되어야 하기 때문입니다.
함수 앱이 참조하는 패키지 파일을 배포할 때마다 초기 배포를 포함하여 트리거를 수동으로 동기화해야 합니다. URL 자체가 아닌 패키지 파일의 콘텐츠를 변경하는 경우 트리거를 동기화하려면 함수 앱도 다시 시작해야 합니다. 이 배포 기술 구성에 대한 방법 가이드를 참조하세요.
사용 시기: 원격 빌드를 수행하지 않으려는 경우 외부 패키지 URL은 Linux 사용 계획에서 실행되는 앱에 대해 유일하게 지원되는 배포 방법입니다. 이 방법은 Azure Files 없이 앱을 만들 때 권장되는 배포 기술이기도 합니다. Linux에서 실행되는 확장성 있는 앱의 경우 대신 Flex Consumption 계획 호스팅을 고려해야 합니다.
앱 콘텐츠가 저장되는 위치: Blob Storage에 앱 콘텐츠를 업로드할 책임이 있습니다. Azure Blob Storage를 사용하는 것이 좋습니다.
Docker 컨테이너
Linux 컨테이너에서 실행되는 함수 앱을 배포할 수 있습니다.
사용 방법: Linux 컨테이너에서 함수를 만든 다음, Azure Functions 또는 다른 컨테이너 호스트의 프리미엄 또는 전용 플랜에 컨테이너를 배포합니다. Azure Functions Core Tools를 사용하여 컨테이너화된 함수 앱을 빌드하는 데 사용하는 프로젝트에 대한 사용자 지정된 Dockerfile을 만듭니다. 다음 배포에서 컨테이너를 사용할 수 있습니다.
- Azure Portal에서 만든 Azure Functions 리소스에 배포합니다. 자세한 내용은 컨테이너를 사용하여 Azure Portal 만들기를 참조하세요.
- 명령줄에서 만든 Azure Functions 리소스에 배포합니다. 프리미엄 또는 전용(App Service) 플랜이 필요합니다. 방법을 알아보려면 첫 번째 컨테이너화된 Azure Functions 만들기를 참조하세요.
- Azure Container Apps에 배포합니다. 방법을 알아보려면 Azure Container Apps에서 첫 번째 컨테이너화된 Azure Functions 만들기를 참조하세요.
- Azure Arc에 배포합니다(미리 보기). 방법을 알아보려면 Azure Arc에서 첫 번째 컨테이너화된 Azure Functions 만들기(미리 보기)를 참조하세요.
- Kubernetes 클러스터에 배포합니다. Azure Functions Core Tools를 사용하여 클러스터에 배포할 수 있습니다.
func kubernetes deploy
명령 사용
사용 시기: 함수 앱이 실행되고 컨테이너가 호스트되는 Linux 환경을 보다 강력하게 제어해야 하는 경우 Docker 컨테이너 옵션을 사용합니다. 이 배포 메커니즘은 Linux에서 실행되는 함수에만 사용할 수 있습니다.
앱 콘텐츠가 저장되는 위치: 앱 콘텐츠는 이미지의 일부로 지정된 컨테이너 레지스트리에 저장됩니다.
소스 컨트롤
함수 앱과 소스 코드 리포지토리 간의 연속 통합을 사용하도록 설정할 수 있습니다. 소스 제어가 사용하도록 설정된 상태에서 연결된 원본 리포지토리의 코드를 업데이트하면 리포지토리에서 최신 코드 배포가 트리거됩니다. 자세한 내용은 Azure Functions의 지속적인 배포를 참조하세요.
사용 방법: 소스 제어에서 게시를 설정하는 가장 쉬운 방법은 포털의 Functions 영역에 있는 배포 센터를 이용하는 것입니다. 자세한 내용은 Azure Functions에 대한 연속 배포를 참조하세요.
사용 시기: 소스 제어를 사용하는 것은 해당 함수 앱에서 공동으로 작업하는 팀을 위한 모범 사례입니다. 소스 제어는 보다 정교한 배포 파이프라인을 가능하게 하는 적절한 배포 옵션입니다. 소스 제어는 일반적으로 스테이징 슬롯에서 사용하도록 설정되며, 리포지토리에서 업데이트의 유효성을 검사한 후 프로덕션으로 교환할 수 있습니다. 자세한 내용은 Azure Functions 배포 슬롯을 참조하세요.
앱 콘텐츠가 저장되는 위치: 앱 콘텐츠는 소스 제어 시스템에 있지만 로컬로 복제되고 빌드된 앱 콘텐츠는 앱 파일 시스템에 저장되며, 함수 앱을 만들 때 지정된 스토리지 계정의 Azure Files에서 지원될 수 있습니다.
로컬 Git
로컬 Git을 사용하여 로컬 머신에서 Azure Functions로 코드를 푸시할 수 있습니다.
사용 방법: Azure App Service에 로컬 Git 배포의 지침을 따릅니다.
사용 시기: 오류 가능성을 줄이려면 트리거를 수동으로 동기화하는 추가 단계가 필요한 배포 방법을 사용하지 않아야 합니다. 가능한 경우 zip 배포를 사용합니다.
앱 콘텐츠가 저장되는 위치: 앱 콘텐츠는 파일 시스템에 저장되며, 함수 앱을 만들 때 지정된 스토리지 계정의 Azure Files에서 지원될 수 있습니다.
FTP/S
FTP/S를 사용하여 파일을 Azure Functions에 직접 전송할 수 있지만 이 배포 방법은 권장되지 않습니다. FTP 사용을 계획하지 않은 경우 사용하지 않도록 설정해야 합니다. FTP를 사용하도록 선택한 경우 FTPS를 적용해야 합니다. Azure Portal에서 방법을 알아보려면 FTPS 적용을 참조하세요.
사용 방법:FTPS 배포 설정 의 지침에 따라 FTPS를 사용하여 함수 앱에 배포하는 데 사용할 수 있는 URL 및 자격 증명을 가져옵니다.
사용 시기: 오류 가능성을 줄이려면 트리거를 수동으로 동기화하는 추가 단계가 필요한 배포 방법을 사용하지 않아야 합니다. 가능한 경우 zip 배포를 사용합니다.
앱 콘텐츠가 저장되는 위치: 앱 콘텐츠는 파일 시스템에 저장되며, 함수 앱을 만들 때 지정된 스토리지 계정의 Azure Files에서 지원될 수 있습니다.
Portal 편집
Portal 기반 편집기에서 함수 앱에 있는 파일을 직접 편집할 수 있습니다(기본적으로 변경 내용을 저장할 때마다 배포).
사용 방법:Azure Portal에서 함수를 편집하려면 포털에서 함수를 만들어야 합니다. 단일 데이터 소스(single source of truth)를 보존하기 위해 다른 배포 방법을 사용하면 함수가 읽기 전용으로 설정되고 계속해서 포털을 편집할 수 없게 됩니다. Azure Portal에서 파일을 편집할 수 있는 상태로 돌아가려면 편집 모드를 수동으로
Read/Write
로 다시 설정하고 배포 관련 애플리케이션 설정(예:WEBSITE_RUN_FROM_PACKAGE
)을 제거할 수 있습니다.
사용 시기: Portal은 Azure Functions를 시작하는 좋은 방법입니다. 고급 개발 작업을 수행하려면 다음 클라이언트 도구 중 하나를 사용하는 것이 좋습니다.
앱 콘텐츠가 저장되는 위치: 앱 콘텐츠는 파일 시스템에 저장되며, 함수 앱을 만들 때 지정된 스토리지 계정의 Azure Files에서 지원될 수 있습니다.
다음 표에서는 Portal 내 편집을 지원하는 운영 체제 및 언어를 보여 줍니다.
언어 | Windows 사용 | Windows 프리미엄 | Windows 전용 | Linux 사용 | Linux 프리미엄 | Linux 전용 |
---|---|---|---|---|---|---|
C#1 | ||||||
Java | ||||||
JavaScript(Node.js) | ✔ | ✔ | ✔ | ✔ | ✔ | |
Python2 | ✔ | ✔ | ✔ | |||
PowerShell | ✔ | ✔ | ✔ | |||
TypeScript(Node.js) |
1 포털 내 편집은 호스트와 함께 프로세스 내에서 실행되는 C# 스크립트 파일에 대해서만 지원됩니다. 자세한 내용은 Azure Functions C# 스크립트(.csx) 개발자 참조를 참조하세요.
2 포털 내 편집은 v1 Python 프로그래밍 모델에서만 지원됩니다.
배포 동작
함수 앱 코드에 업데이트를 배포하면 현재 실행 중인 함수가 종료됩니다. 배포가 완료되면 새 코드가 로드되어 요청 처리를 시작합니다. 상태 비정상 및 방어 함수를 작성하는 방법을 알아보려면 Azure Functions의 성능 및 안정성 개선을 검토하세요.
이 전환을 보다 강력하게 제어해야 하는 경우 배포 슬롯을 사용해야 합니다.
배포 슬롯
함수 앱을 Azure에 배포하는 경우 프로덕션에 직접 배포하는 대신 별도의 배포 슬롯에 배포할 수 있습니다. 지속적인 배포를 구성하는 데 권장되는 방법은 배포 슬롯에 배포한 다음 확인 후 프로덕션으로 교환하는 것입니다.
슬롯에 배포하는 방법은 사용하는 특정 배포 도구에 따라 다릅니다. 예를 들어, Azure Functions Core Tools를 사용하는 경우 func azure functionapp publish
명령에 대한 특정 슬롯의 이름을 나타내는 --slot
옵션을 포함합니다.
배포 슬롯에 대한 자세한 내용은 Azure Functions 배포 슬롯 설명서를 참조하세요.
다음 단계
함수 앱을 배포하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.