Azure Developer CLI를 사용하여 Azure Functions 배포

Azure 개발자 CLI(azd)는 Azure Functions 코드 및 컨테이너 배포를 지원합니다. 두 모드 모두에 function에서 전용 azure.yaml 호스트를 사용합니다.

  • 코드 배포 는 빌드된 함수 코드를 zip 보관 파일로 패키지하고 함수 앱에 업로드합니다.
  • 컨테이너 배포는 컨테이너 이미지를 빌드하거나 확정하고, 필요할 때 ACR(Azure Container Registry)에 게시하고, 이미지를 실행하도록 함수 앱을 업데이트합니다.

Azure Functions 및 Azure App Service 모두 Microsoft.Web/sites 리소스 공급자를 사용하며, 해당 컨테이너 배포 흐름은 일부 내부 메커니즘을 공유합니다. 그러나 이들은 동일한 azd 호스트는 아닙니다. Functions는 host: function를 사용하고, Functions별 패키징 및 원격 빌드 동작을 가지며, App Service 배포 슬롯 워크플로를 사용하지 않습니다.

배포 모드를 선택하세요

azd 는 서비스 구성에서 배포 모드를 선택합니다.

구성 배포 모드
지원되는 비-Docker project이 있고 docker.path이 없는 원본 language 코드 배포
language: docker 컨테이너 배포
원본 언어 값 docker.path 컨테이너 배포
미리 빌드된 image 컨테이너 배포

프로비전된 함수 앱은 서비스 구성과 동일한 모드를 사용해야 합니다. 함수 앱이 컨테이너용으로 구성되었지만 azure.yaml에서 코드 배포를 선택하거나 반대로 함수 앱이 코드용으로 구성되었지만 azd deploy에서 컨테이너를 선택하는 경우 업로드하기 전에 중지하고 불일치를 보고합니다.

함수 코드 배포하기

소스 프로젝트, 지원되는 언어 및 host: function을 사용하여 코드 기반 함수 서비스를 구성합니다.

services:
  api:
    project: ./src/api
    language: ts
    host: function

azd 동안 azd deploy 프로젝트를 빌드하고, .funcignore 제외를 적용하고, zip 보관 파일을 만들고, Azure Functions 배포 API를 통해 패키지를 업로드합니다.

Bicep 또는 Terraform은 코드 기반 함수 앱을 프로비전하고 서비스 이름으로 설정된 태그 resourceName를 지정해야 합니다. 단, azd-service-name에서 azure.yaml를 사용하여 리소스를 식별하는 경우는 예외입니다. 코드형 인프라를 통해 호스팅 계획, 런타임, 스토리지, ID, 네트워킹 및 애플리케이션 설정을 구성합니다.

코드 배포에 대한 원격 빌드 구성

최상위 서비스 remoteBuild 속성은 Flex Consumption 계획의 코드 기반 Function Apps에만 적용됩니다. Azure Functions 업로드된 패키지를 빌드하는 데 Oryx를 사용하는지 여부를 제어합니다.

services:
  api:
    project: ./src/api
    language: python
    host: function
    remoteBuild: true

Flex Consumption에서 azd를 생략하면 remoteBuild는 언어 및 패키지 내용에 따라 기본값을 선택합니다.

Language 기본 동작
JavaScript 또는 TypeScript node_modules에서 .funcignore을(를) 제외하거나 .funcignore 파일이 없을 때 원격 빌드를 사용합니다. 그렇지 않으면 로컬로 빌드된 패키지를 사용합니다.
Python 원격 빌드를 사용합니다.
Go 로컬로 빌드합니다. Go 함수 앱은 원격 빌드를 지원하지 않습니다.
지원되는 기타 언어 로컬로 빌드된 패키지를 사용합니다.

JavaScript 및 TypeScript의 경우 명시적으로 구성된 remoteBuild 값은 해당 파일이 있을 때 .funcignore와 일치해야 합니다. remoteBuild: true에서 node_modules를 제외하는 경우 .funcignore를 설정합니다. .funcignore에 remoteBuild: false가 패키지에 포함된 경우 node_modules를 설정합니다.

플렉스가 아닌 플랜의 최상위 remoteBuild 속성을 설정하지 마세요. 지원되는 다른 계획에서 Oryx 빌드를 사용하도록 설정하려면 인프라에서 ENABLE_ORYX_BUILD=true 및 SCM_DO_BUILD_DURING_DEPLOYMENT=true를 함수 앱 설정으로 구성합니다.

컨테이너화된 함수 배포

Dockerfile이 있는 원본 프로젝트의 경우 language: docker을(를) 설정하거나, 원본 언어를 유지하고 docker.path을(를) 지정합니다.

다음 예제에서는 Dockerfile과 함께 TypeScript 프로젝트를 사용합니다.

services:
  api:
    project: ./src/api
    language: ts
    host: function
    docker:
      path: ./Dockerfile

로컬 프로젝트 없이 미리 빌드된 이미지를 배포할 수도 있습니다.

services:
  api:
    host: function
    image: myregistry.azurecr.io/functions/api:1.0

미리 빌드된 이미지의 경우 language를 생략하거나 docker로 설정합니다. image와 project를 함께 결합하지 마세요.

컨테이너 배포 중 azd:

  1. 로컬 또는 원격으로 이미지를 빌드하거나 구성된 미리 빌드된 이미지를 확인하거나 결정합니다.
  2. 게시가 필요할 때 프로젝트에 대해 구성된 ACR 인스턴스에 이미지를 게시합니다.
  3. Function App의 linuxFxVersion을 DOCKER|<image>(으)로 업데이트합니다.
  4. 주 함수 앱 사이트에 배포합니다.

최상위 서비스 remoteBuild 속성은 컨테이너에 적용되지 않습니다. ACR 작업을 사용하여 컨테이너 이미지를 빌드하려면 다음을 사용합니다 docker.remoteBuild.

services:
  api:
    project: ./src/api
    language: docker
    host: function
    docker:
      path: ./Dockerfile
      remoteBuild: true

컨테이너 지원 Function App 프로비저닝

azd deploy 는 이미지 참조를 업데이트하지만 코드 기반 함수 앱을 컨테이너 기반 함수 앱으로 변환하지는 않습니다. 인프라는 배포 전에 호환되는 사이트를 프로비전해야 합니다.

Requirement Details
Linux Function App Azure Functions Premium 또는 Dedicated(App Service) 계획에 Linux 함수 앱을 프로비전합니다. Flex Consumption는 사용자 지정 컨테이너를 지원하지 않습니다. 이 host: function 워크플로는 Microsoft.Web/sites을(를) 대상으로 하며, Azure Container Apps에서 호스팅되는 Azure Functions는 대상이 아닙니다.
컨테이너 사이트 구성 사이트 종류를 functionapp, linux 및 container를 포함하도록 설정합니다. linuxFxVersion 값을 사용하여 DOCKER\|<image>을 초기화합니다. azd deploy가 이를 대체하므로 자리 표시자 이미지면 충분합니다.
컨테이너 레지스트리 원본 빌드의 경우 ACR 인스턴스를 프로비전하고 AZURE_CONTAINER_REGISTRY_ENDPOINT 인프라 출력값을 통해 해당 로그인 서버를 노출하거나 서비스에 대해 docker.registry을 구성합니다. 완전 수식된 사전 빌드된 image 항목은 별도의 게시 레지스트리 없이 직접 사용할 수 있습니다.
레지스트리 액세스 게시가 필요한 경우 이미지를 게시하는 ID에 대상 레지스트리에 푸시할 수 있는 권한을 부여합니다. 별도로, 배포된 이미지를 끌어오도록 함수 앱을 구성합니다. 프라이빗 ACR 이미지의 경우 함수 앱의 관리 ID에 풀(pull) 액세스 권한을 부여하고 관리 ID 자격 증명을 사용하도록 사이트를 구성합니다. 다른 프라이빗 레지스트리의 경우 인프라에서 적절한 끌어오기 자격 증명을 구성합니다.
함수 설정 Bicep 또는 Terraform을 통해 FUNCTIONS_EXTENSION_VERSION, FUNCTIONS_WORKER_RUNTIME, AzureWebJobsStorage와 같은 필수 설정을 구성합니다.
리소스 검색 azure.yaml의 서비스 이름과 값이 일치하는 azd-service-name 태그를 적용하거나 resourceName를 명시적으로 설정합니다.

function 호스트에 대해 서비스 수준 env 설정이 지원되지 않습니다. 대신 인프라에서 함수 앱 설정을 정의하세요.

배포 슬롯 이해하기

azd 는 항상 기본 함수 앱 사이트에 function 서비스를 배포합니다. 함수 앱 슬롯을 검색하거나, 입력을 요청하거나, 배포하지 않습니다. App Service 슬롯 설정(예: AZD_DEPLOY_{SERVICE}_SLOT_NAME)은 함수 앱 배포에 영향을 주지 않습니다.

슬롯 기반 Functions 릴리스 프로세스가 필요한 경우 기본 제공 host: function 워크플로 외부에서 슬롯 및 배포를 관리하세요.

Functions 및 App Service 호스트 비교

함수 및 App Service는 Microsoft.Web/sites 리소스 유형을 공유하지만 워크로드에 맞는 호스트를 선택하세요.

Behavior function 호스트 appservice 호스트
업무량 이벤트 기반 Azure Functions 웹앱 및 API
코드 배포 Azure Functions zip 배포 흐름을 사용합니다 App Service 배포 흐름 사용
컨테이너 배포 사이트가 컨테이너 기반인지 유효성을 검사한 후 함수 앱 이미지를 업데이트합니다. 사이트가 컨테이너 실행 준비 상태인지 유효성을 검사한 후 웹앱 이미지를 업데이트합니다.
원격 코드 빌드 Flex Consumption Function Apps에 대한 서비스 수준 remoteBuild 옵션을 지원합니다. Functions remoteBuild 옵션을 사용하지 않음
배포 슬롯 항상 기본 사이트에 배포됩니다 azd App Service 슬롯 워크플로를 지원합니다.
서비스 수준 env 지원되지 않습니다. 인프라에서 함수 앱 설정을 사용하세요 인프라에서 앱 설정 구성