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

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

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

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

패키지 파일에서 실행하는 것에 대한 여러 이점은 다음과 같습니다.

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

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

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

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

설명
1 함수 앱이 함수 앱의 d:\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에서 작동하지 않습니다. 배포 중에 ARM-MSDeploy Deploy Failed와 같은 오류가 발생합니다. /MSDeploy를 /ZipDeploy로 변경하면 이 오류가 해결됩니다.

WEBSITE_RUN_FROM_PACKAGE 설정 추가

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

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

WEBSITE_RUN_FROM_PACKAGE = 1 사용

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

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

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

Zip 배포와 통합

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

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

참고 항목

배포가 발생하면 함수 앱의 다시 시작이 트리거됩니다. 배포 중에 현재 실행 중인 함수 실행이 종료됩니다. 상태 비정상 및 방어 함수를 작성하는 방법을 알아보려면 Azure Functions의 성능 및 안정성 개선을 검토하세요.

WEBSITE_RUN_FROM_PACKAGE = URL 사용

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

URL에서 배포 시 고려 사항

  • Windows에서 함수 앱을 실행할 때 앱 설정 WEBSITE_RUN_FROM_PACKAGE = <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. 새 컨테이너 페이지에서 이름(예: "deployments")을 지정하고, 공용 액세스 수준프라이빗인지 확인하고, 만들기를 선택합니다.

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

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

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

  9. 함수 앱의 설정에서 구성을 선택합니다.

  10. 애플리케이션 설정 탭에서 새 애플리케이션 설정을 선택합니다.

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

  12. 확인을 선택합니다. 그런 다음 저장>계속을 선택하여 설정을 저장하고 앱을 다시 시작합니다.

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

다음은 Azure Blob Storage에 호스트된 .zip 파일에서 실행되도록 구성된 함수 앱을 보여줍니다.

WEBSITE_RUN_FROM_ZIP app setting

관리 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로 설정합니다. 이는 "https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}" 또는 이와 유사한 형식일 수 있습니다.

다음 단계