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는 다음 세 가지 호스팅 계획을 제공합니다.

플랜마다 동작이 다릅니다. 각 호스팅 계획 및 운영 체제에 모든 배포 기술을 사용할 수 있는 것은 아닙니다. 이 차트는 지원되는 배포 기술에 대한 정보를 제공합니다.

배포 기술 Windows 사용 Windows 프리미엄 Windows 전용 Linux 사용 Linux 프리미엄 Linux 전용
외부 패키지 URL1
Zip 배포
Docker 컨테이너
원본 제어
로컬 Git1
FTPS1
포털 내 편집2

1트리거를 수동으로 동기화해야 하는 배포 기술은 권장되지 않습니다.
2 포털 외부에서 함수 앱에 코드를 배포하면 포털 내 편집이 비활성화됩니다. 포털 내 편집에 대한 언어 지원 세부 정보를 비롯한 자세한 내용은 언어 지원 세부 정보를 참조하세요.

주요 개념

몇 가지 주요 개념은 Azure Functions에서 배포가 작동하는 방식을 이해하는 데 중요합니다.

트리거 동기화

트리거를 변경하는 경우 Functions 인프라에 변경 내용이 전달되어야 합니다. 여러 배포 기술에 대한 동기화가 자동으로 수행됩니다. 그러나 일부 경우에는 트리거를 수동으로 동기화해야 합니다.

다음 배포 옵션을 사용할 때는 트리거를 수동으로 동기화해야 합니다.

다음 세 가지 방법 중 하나로 트리거를 동기화할 수 있습니다.

  • Azure Portal에서 함수 앱을 다시 시작합니다.
  • 마스터 키를 사용하여 HTTP POST 요청을 https://{functionappname}.azurewebsites.net/admin/host/synctriggers?code=<API_KEY>로 보냅니다.
  • HTTP POST 요청을 https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.Web/sites/<FUNCTION_APP_NAME>/syncfunctiontriggers?api-version=2016-08-01로 보냅니다. 자리 표시자를 구독 ID, 리소스 그룹 이름 및 함수 앱의 이름으로 바꿉니다. 이 요청에는 Authorization 요청 헤더액세스 토큰이 필요합니다.

외부 패키지 URL을 사용하여 배포하는 경우 초기 배포를 포함하여 URL을 변경하지 않고 패키지가 변경될 때 배포를 완전히 동기화하려면 함수 앱을 수동으로 다시 시작해야 합니다.

함수 앱이 인바운드 네트워크 제한으로 보호되는 경우 동기화 트리거 엔드포인트는 가상 네트워크 내부의 클라이언트에서만 호출할 수 있습니다.

원격 빌드

Azure Functions는 Zip 배포 후에 수신하는 코드에서 자동으로 빌드를 수행할 수 있습니다. 이러한 빌드는 앱이 Windows에서 실행되는지 아니면 Linux에서 실행되는지에 따라 다릅니다.

Windows에서 실행되는 모든 함수 앱에는 Kudu에서 제공하는 scm 사이트인 작은 관리 앱이 있습니다. 이 사이트는 Azure Functions에 대한 대부분의 배포 및 빌드 논리를 처리합니다.

앱을 Windows에 배포할 때 dotnet restore(C#) 또는 npm install(JavaScript)과 같은 언어별 명령이 실행됩니다.

배포 중에 원격 빌드를 사용하는 경우 다음 고려 사항이 적용됩니다.

  • 사용량 플랜에서는 Linux에서 실행되는 함수 앱에 대해 원격 빌드가 지원됩니다. 그러나 이러한 앱에는 scm(Kudu) 사이트가 없기 때문에 배포 옵션이 제한됩니다.
  • Linux 프리미엄 플랜 또는 전용(App Service) 계획에서 실행되는 함수 앱에는 scm(Kudu) 사이트가 있지만 Windows에 비해 제한적입니다.
  • 앱이 run-from-package를 사용하는 경우 원격 빌드가 수행되지 않습니다. 이러한 경우 원격 빌드를 사용하는 방법을 알아보려면 Zip 배포를 참조하세요.
  • 기능을 사용할 수 있게 되기 전에 앱이 생성(2019년 8월 1일)되면 원격 빌드에 문제가 있을 수 있습니다. 이전 앱의 경우 새 함수 앱을 만들거나 az functionapp update --resource-group <RESOURCE_GROUP_NAME> --name <APP_NAME>을 실행하여 함수 앱을 업데이트합니다. 이 명령은 두 번 시도해야 성공할 수 있습니다.

앱 콘텐츠 스토리지

여러 배포 방법은 함수 앱과 연결된 스토리지 계정에 배포되거나 빌드된 애플리케이션 페이로드를 저장합니다. Functions는 구성될 때 Azure Files 콘텐츠 공유를 사용하려고 하지만 일부 메서드는 대신 AzureWebJobsStorage 연결과 연결된 Blob Storage 인스턴스에 페이로드를 저장합니다. 다음 섹션에서 다루는 각 배포 기술의 앱 콘텐츠가 저장되는 위치 단락의 세부 정보를 참조하세요.

Important

스토리지 계정은 중요한 앱 데이터를 저장하는 데 사용되며, 이러한 중요 앱 데이터에 애플리케이션 코드 자체가 포함되는 경우도 있습니다. 다른 앱이나 사용자가 스토리지 계정에 액세스하는 행위를 제한해야 합니다.

배포 기술 세부 정보

Azure Functions에서 사용할 수 있는 배포 방법은 다음과 같습니다.

외부 패키지 URL

외부 패키지 URL을 사용하여 함수 앱이 포함된 원격 패키지(.zip) 파일을 참조할 수 있습니다. 파일이 제공된 URL에서 다운로드되고 앱이 패키지에서 실행 모드에서 실행됩니다.

사용 방법:WEBSITE_RUN_FROM_PACKAGE를 애플리케이션 설정에 추가합니다. 이 설정의 값은 URL(실행하려는 특정 패키지 파일의 위치)이어야 합니다. Portal에서 또는 Azure CLI를 사용하여 설정을 추가할 수 있습니다.

Azure Blob Storage를 사용하는 경우 SAS(공유 액세스 서명)에서 프라이빗 컨테이너를 사용하여 Functions에 패키지에 대한 액세스 권한을 부여합니다. 애플리케이션이 다시 시작될 때마다 콘텐츠의 복사본을 가져옵니다. 참조는 애플리케이션의 수명 동안 유효해야 합니다.

사용 시기: 외부 패키지 URL은 사용자가 원격 빌드를 원하지 않으려는 경우 소비 플랜에서 Linux에서 실행되는 Azure Functions에 대해 유일하게 지원되는 배포 방법입니다. 함수 앱이 참조하는 패키지 파일을 배포할 때마다 초기 배포를 포함하여 트리거를 수동으로 동기화해야 합니다. URL 자체가 아닌 패키지 파일의 콘텐츠를 변경하는 경우 트리거를 동기화하려면 함수 앱도 다시 시작해야 합니다.

앱 콘텐츠가 저장되는 위치: 앱 콘텐츠는 지정된 URL에 저장됩니다. Azure Blob, AzureWebJobsStorage 연결로 지정된 스토리지 계정에 있을 수 있습니다. 일부 클라이언트 도구는 기본적으로 이 계정의 Blob에 배포할 수 있습니다. 예를 들어 Linux 소비 앱의 경우 Azure CLI는 AzureWebJobsStorage로 지정된 계정의 Blob에 저장된 패키지를 통해 배포를 시도합니다.

Zip 배포

Zip 배포를 사용하여 함수 앱을 포함하는 .zip 파일을 Azure에 푸시합니다. 필요에 따라 패키지에서 실행을 시작하도록 앱을 설정하거나 원격 빌드가 발생하도록 지정할 수 있습니다.

사용 방법:Visual Studio Code, Visual Studio 중에서 즐겨 사용하는 클라이언트 도구를 사용하여 배포하거나 Azure Functions Core Tools를 사용하여 명령줄에서 배포합니다. 기본적으로 이러한 도구는 zip 배포를 사용하고 패키지에서 실행합니다. Core Tools와 Visual Studio Code 확장은 모두 Linux에 배포할 때 원격 빌드를 사용하도록 설정합니다. .zip 파일을 함수 앱에 수동으로 배포하려면 .zip 파일이나 URL에서 배포의 지침을 따르세요.

zip 배포를 사용하여 배포하는 경우 앱이 패키지에서 실행되도록 설정할 수 있습니다. 패키지에서 실행하려면 WEBSITE_RUN_FROM_PACKAGE 애플리케이션 설정 값을 1로 설정합니다. zip 배포를 권장합니다. 이 방식을 사용하면 애플리케이션에 대한 로드 시간이 빨라지며, 이것이 VS Code, Visual Studio 및 Azure CLI에 대한 기본값입니다.

사용 시기: zip 배포는 Azure Functions에 권장되는 배포 기술입니다.

앱 콘텐츠가 저장되는 위치: zip 배포의 앱 콘텐츠는 기본적으로 파일 시스템에 저장되며, 함수 앱을 만들 때 지정된 스토리지 계정의 Azure Files에서 지원될 수 있습니다. Linux 사용에서 앱 콘텐츠는 대신 AzureWebJobsStorage 연결로 지정된 스토리지 계정의 Blob에 유지됩니다.

Docker 컨테이너

Linux 컨테이너에서 실행되는 함수 앱을 배포할 수 있습니다.

사용 방법:Linux 컨테이너에서 함수를 만든 다음, Azure Functions 또는 다른 컨테이너 호스트의 Premium 또는 Dedicated 계획에 컨테이너를 배포합니다. Azure Functions Core Tools를 사용하여 컨테이너화된 함수 앱을 빌드하는 데 사용하는 프로젝트에 대한 사용자 지정된 Dockerfile을 만듭니다. 다음 배포에서 컨테이너를 사용할 수 있습니다.

사용 시기: 함수 앱이 실행되고 컨테이너가 호스트되는 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 배포 슬롯 설명서를 참조하세요.

다음 단계

함수 앱을 배포하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.