다음을 통해 공유


Azure의 패키지 파일에서 함수 실행

Azure의 함수 앱의 배포 패키지 파일에서 직접 함수를 실행할 수 있습니다. 다른 옵션은 함수 앱의 c:\home\site\wwwroot(Windows) 또는 /home/site/wwwroot(Linux) 디렉터리에 파일을 배포하는 것입니다.

이 문서에서는 패키지에서 함수를 실행하는 이점에 대해 설명합니다. 또한 함수 앱에서 이 기능을 사용하도록 설정하는 방법을 보여줍니다.

패키지 파일에서 실행하는 이점

패키지 파일에서 함수를 실행하면 여러 가지 이점이 있습니다.

  • 파일 복사 잠금 문제의 위험을 줄여줍니다.
  • (다시 시작으로) 프로덕션 앱에 배포될 수 있습니다.
  • 앱에서 실행 중인 파일을 확인합니다.
  • Azure Resource Manager 배포의 성능을 향상시킵니다.
  • 특히 대규모 npm 패키지 트리가 있는 JavaScript 함수의 경우 콜드 부팅 시간을 줄입니다.

자세한 내용은 이 공지를 참조하세요.

패키지에서 실행되는 함수 사용

함수 앱이 패키지에서 실행되도록 하려면 함수 앱에 WEBSITE_RUN_FROM_PACKAGE 앱 설정을 추가합니다. WEBSITE_RUN_FROM_PACKAGE 앱 설정은 다음 값 중 하나를 가질 수 있습니다.

설명
1 함수 앱이 함수 앱의 c:\home\data\SitePackages(Windows) 또는 /home/data/SitePackages(Linux) 폴더에 배포된 로컬 패키지 파일에서 실행됨을 나타냅니다.
<URL> 실행하려는 특정 패키지 파일의 원격 위치인 URL을 설정합니다. 사용량 플랜의 Linux에서 실행되는 함수 앱에 필요합니다.

다음 표는 특정 운영 체제 및 호스팅 플랜에 배포하는 데 권장되는 WEBSITE_RUN_FROM_PACKAGE 값을 나타냅니다.

호스팅 계획 Windows Linux
소비 1을 적극 권장합니다. <URL>만 지원됩니다.
Premium 1 을 사용하는 것이 좋습니다. 1 을 사용하는 것이 좋습니다.
전용 1 을 사용하는 것이 좋습니다. 1 을 사용하는 것이 좋습니다.

일반적인 고려 사항

  • 패키지 파일은 .zip 형식이어야 합니다. Tar 및 gzip 형식은 지원되지 않습니다.
  • Zip 배포를 권장합니다.
  • Windows에 함수 앱을 배포할 때 WEBSITE_RUN_FROM_PACKAGE1로 설정하고 zip 배포를 사용하여 게시해야 합니다.
  • 패키지에서 실행할 때 wwwroot 폴더는 읽기 전용이며 이 디렉터리에 파일을 쓰면 오류가 발생합니다. 파일은 Azure Portal에서도 읽기 전용입니다.
  • 배포 패키지 파일의 최대 크기는 1GB입니다.
  • 배포 패키지에서 실행할 때는 로컬 캐시를 사용할 수 없습니다.
  • 프로젝트에서 원격 빌드를 사용해야 하는 경우 WEBSITE_RUN_FROM_PACKAGE 앱 설정을 사용하지 마세요. 대신 SCM_DO_BUILD_DURING_DEPLOYMENT=true 배포 사용자 지정 앱 설정을 추가합니다. Linux의 경우 ENABLE_ORYX_BUILD=true 설정도 추가합니다. 자세한 내용은 원격 빌드를 참조하세요.

참고 항목

WEBSITE_RUN_FROM_PACKAGE 앱 설정은 MSDeploy VS. ZipDeploy. 배포 중에 ARM-MSDeploy Deploy Failed와 같은 오류가 발생합니다. 이 오류를 해결하려면 /MSDeploy/ZipDeploy로 변경합니다.

WEBSITE_RUN_FROM_PACKAGE 설정 추가

함수 앱 설정을 추가, 업데이트 및 삭제할 수 있는 여러 가지 방법이 있습니다.

함수 앱 설정을 변경하려면 함수 앱을 다시 시작해야 합니다.

zip 보관 만들기

배포하는 zip 보관에는 함수 앱을 실행하는 데 필요한 모든 파일이 포함되어 있어야 합니다. 기본 제공된 .zip 압축 기능이나 타사 도구를 사용하여 Functions 프로젝트 폴더의 콘텐츠에서 zip 보관을 수동으로 만들 수 있습니다.

보관에는 추출된 폴더의 루트에 host.json 파일이 포함되어 있어야 합니다. 함수 앱에 대해 선택한 언어 스택은 추가 요구 사항을 만듭니다.

Important

배포를 위해 컴파일된 출력을 생성하는 언어의 경우 전체 프로젝트 폴더가 아니라 게시하려는 출력 폴더의 내용을 압축해야 합니다. Functions가 zip 보관의 내용을 추출하는 경우 host.json 파일이 패키지의 루트에 있어야 합니다.

WEBSITE_RUN_FROM_PACKAGE = 1 사용

이 섹션에서는 로컬 패키지 파일에서 함수 앱을 실행하는 방법에 대한 정보를 제공합니다.

현장 패키지에서 배포 시 고려 사항

  • 온사이트 패키지를 사용하는 것은 사용량 플랜에서 호스트되는 Linux에서 실행하는 경우를 제외하고 배포 패키지에서 실행하는 데 권장되는 옵션입니다.
  • Zip 배포는 배포 패키지를 사이트에 업로드하는 데 권장되는 방법입니다.
  • zip 배포를 사용하지 않는 경우 c:\home\data\SitePackages(Windows) 또는 /home/data/SitePackages(Linux) 폴더에 packagename.txt라는 파일이 있는지 확인합니다. 이 파일에는 현재 실행 중인 이 폴더에 있는 패키지 파일의 이름만 공백 없이 포함됩니다.

Zip 배포와 통합

Zip 배포는 Azure App Service의 기능으로서 함수 앱 프로젝트를 wwwroot 디렉터리에 배포할 수 있습니다. 프로젝트는 .zip 배포 파일로 패키지됩니다. 동일한 API를 사용하여 c:\home\data\SitePackages(Windows) 또는 /home/data/SitePackages(Linux) 폴더에 패키지를 배포할 수 있습니다.

WEBSITE_RUN_FROM_PACKAGE 앱 설정 값을 1로 설정하면 zip 배포 API는 파일을 c:\home\site\wwwroot(Windows) 또는 /home/site/wwwroot(Linux)에 추출하는 대신 패키지를 c:\home\data\SitePackages(Windows) 또는 /home/data/SitePackages(Linux) 폴더에 복사합니다. 또한 packagename.txt 파일도 만듭니다. 함수 앱이 자동으로 다시 시작되면 패키지가 읽기 전용 파일 시스템으로 wwwroot에 탑재됩니다. Zip 배포에 대한 자세한 내용은 Azure Functions에 대한 Zip 배포를 참조하세요.

참고 항목

배포가 발생하면 함수 앱의 다시 시작이 트리거됩니다. 배포 중에 현재 실행 중인 함수 실행이 종료됩니다. 상태 비저장 및 방어 함수를 작성하는 방법에 대한 자세한 내용은 상태 비저장 함수 작성을 참조하세요.

WEBSITE_RUN_FROM_PACKAGE = URL 사용

이 섹션에서는 URL 엔드포인트에 배포된 패키지에서 함수 앱을 실행하는 방법에 대한 정보를 제공합니다. 이 옵션은 사용량 플랜을 사용하여 Linux 호스트된 패키지에서 실행하는 데 지원되는 유일한 옵션입니다.

URL에서 배포 시 고려 사항

  • Windows에서 실행되는 함수 앱은 애플리케이션 패키지가 WEBSITE_RUN_FROM_PACKAGE = <URL>을 통해 URL 엔드포인트에 배포될 때 콜드 시작 시간 이 약간 증가합니다.
  • URL을 지정할 때 업데이트된 패키지를 게시한 후 트리거를 수동으로 동기화해야 합니다.
  • Functions 런타임에는 패키지 URL에 액세스할 수 있는 권한이 있어야 합니다.
  • 패키지를 Azure Blob Storage에 공용 Blob으로 배포하지 마세요. 대신 SAS(공유 액세스 서명)가 포함된 프라이빗 컨테이너를 사용하거나 관리 ID를 사용하여 Functions 런타임이 패키지에 액세스할 수 있도록 해야 합니다.
  • 배포에 사용되는 SAS URL을 유지 관리해야 합니다. SAS가 만료되면 패키지를 더 이상 배포할 수 없습니다. 이 경우 새 SAS를 생성하고 함수 앱에서 설정을 업데이트해야 합니다. 관리 ID를 사용하여 이 관리 부담을 제거할 수 있습니다.
  • 프리미엄 플랜으로 실행하는 경우 콜드 부팅을 제거해야 합니다.
  • 전용 플랜을 실행하는 경우 Always On을 사용하도록 설정합니다.
  • Azure Storage Explorer를 사용하여 스토리지 계정의 Blob 컨테이너에 패키지 파일을 업로드할 수 있습니다.

Blob Storage에 수동으로 패키지 업로드

URL 옵션을 사용할 때 압축된 패키지를 배포하려면 .zip 압축 배포 패키지를 만들어 대상에 업로드해야 합니다. 다음 절차는 Blob Storage의 컨테이너에 배포됩니다.

  1. 선택한 유틸리티를 사용하여 프로젝트에 대한 .zip 패키지를 만듭니다.

  2. Azure Portal에서 스토리지 계정 이름을 검색하거나 스토리지 계정 목록에서 찾습니다.

  3. 스토리지 계정의 데이터 스토리지에서 컨테이너를 선택합니다.

  4. + 컨테이너를 선택하여 계정에 새 Blob Storage 컨테이너를 만듭니다.

  5. 새 컨테이너 페이지에서 이름(예: 배포)을 제공하고 익명 액세스 수준프라이빗인지 확인한 다음 만들기를 선택합니다.

  6. 만든 컨테이너를 선택하고 업로드를 선택한 다음 프로젝트에서 만든 .zip 파일의 위치를 찾아 업로드를 선택합니다.

  7. 업로드가 완료되면 업로드된 Blob 파일을 선택하고 URL을 복사합니다. 관리 ID를 사용하지 않는 경우 SAS URL을 생성해야 할 수도 있습니다.

  8. 함수 앱을 검색하거나 함수 앱 페이지에서 찾습니다.

  9. 함수 앱에서 설정을 확장한 다음 환경 변수를 선택합니다.

  10. 앱 설정 탭에서 + 추가를 선택합니다.

  11. 이름WEBSITE_RUN_FROM_PACKAGE 값을 입력하고 에 Blob Storage에 패키지 URL을 붙여넣습니다.

  12. 적용을 선택한 다음 적용확인을 선택하여 설정을 저장하고 함수 앱을 다시 시작합니다.

이제 Azure에서 함수를 실행하여 배포 패키지 .zip 파일의 배포가 성공했는지 확인할 수 있습니다.

관리 ID를 사용하여 Azure Blob Storage에서 패키지 페치

Microsoft Entra ID로 요청을 권한 부여하도록 Azure Blob Storage를 구성할 수 있습니다. 이 구성은 만료된 SAS 키를 생성하는 대신 애플리케이션의 관리 ID를 사용할 수 있음을 의미합니다. 기본적으로 앱의 시스템 할당 ID가 사용됩니다. 사용자 할당 ID를 지정하려는 경우 WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID 앱 설정을 해당 ID의 리소스 ID로 설정할 수 있습니다. 설정은 SystemAssigned를 값으로 허용할 수도 있으며 이는 설정을 생략하는 것과 동등합니다.

ID를 사용하여 패키지를 가져올 수 있도록 설정하려면 다음을 수행합니다.

  1. Blob이 프라이빗 액세스용으로 구성되었는지 확인합니다.

  2. ID에 패키지 Blob에 대한 범위가 있는 Storage Blob 데이터 읽기 권한자 역할을 부여합니다. 역할 할당을 만드는 방법에 대한 자세한 내용은 Blob 데이터에 대한 액세스에 Azure 역할 할당을 참조하세요.

  3. WEBSITE_RUN_FROM_PACKAGE 애플리케이션 설정을 패키지의 Blob URL로 설정합니다. 이 URL은 일반적으로 https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package} 또는 이와 유사한 형식입니다.