다음을 통해 공유


Flex 사용 계획에서 함수 앱 만들기 및 관리

이 문서에서는 Azure Functions의 Flex 사용 계획에 호스트되는 함수 앱을 만드는 방법을 보여 줍니다. 또한 Flex 사용 계획 호스팅 앱의 특정 기능을 관리하는 방법을 보여줍니다.

함수 앱 리소스는 언어별로 다릅니다. 문서의 시작 부분에서 기본 코드 개발 언어를 선택해야 합니다.

필수 구성 요소

  • 활성 구독이 있는 Azure 계정. 계정이 아직 없는 경우 체험 계정을 만들 수 있습니다.

  • Azure CLI: Azure에서 리소스를 만들고 관리하는 데 사용됩니다. 로컬 컴퓨터에서 Azure CLI를 사용하는 경우 버전 2.60.0 이상을 사용해야 합니다. 올바른 Azure CLI 버전이 있는 Azure Cloud Shell을 사용할 수도 있습니다.

  • Visual Studio Code: 앱을 만들고 개발하고, Azure 리소스를 만들고, 코드 프로젝트를 Azure에 배포하는 데 사용됩니다. Visual Studio Code를 사용하는 경우 최신 Azure Functions 확장도 설치해야 합니다. Azure Tools 확장 팩을 설치할 수도 있습니다.

  • Flex 사용 계획 앱을 만드는 데 필수는 아니지만 새 함수 앱에 배포하고 유효성을 검사할 수 있는 코드 프로젝트가 필요합니다. 다음 빠른 시작 문서 중 하나의 첫 번째 부분을 완료하여 HTTP 트리거 함수가 있는 코드 프로젝트를 만듭니다.

    Maven 배포 중에 새 Flex 사용 계획에서 앱을 만들려면 로컬 앱 프로젝트를 만든 다음, 프로젝트의 pom.xml 파일을 업데이트해야 합니다. 자세한 내용은 Maven을 사용하여 Java Flex 사용 앱 만들기를 참조하세요.

    로컬 프로젝트를 만들고 실행한 후 Azure 리소스를 만들라는 메시지가 표시되기 전에 이 문서로 돌아갑니다. 다음 섹션에서 함수 앱 및 기타 Azure 리소스를 만듭니다.

Flex 사용 앱 만들기

이 섹션에서는 Azure CLI, Azure Portal 또는 Visual Studio Code를 사용하여 Flex 사용 계획에서 함수 앱을 만드는 방법을 보여 줍니다. Bicep/ARM 템플릿을 사용하여 Flex 사용 계획에서 앱을 만드는 예제는 Flex 사용 리포지토리를 참조하세요.

대신 Maven을 사용하여 앱을 만들고 배포하기로 선택한 경우 이 섹션을 건너뛸 수 있습니다.

함수 코드를 지원하려면 다음 세 가지 리소스를 만들어야 합니다.

  • 리소스 그룹 - 관련 리소스에 대한 논리 컨테이너입니다.
  • 스토리지 계정 - 함수에 대한 상태 및 기타 정보를 유지 관리합니다.
  • 함수 코드를 실행하기 위한 환경을 제공하는 Flex 사용 계획의 함수 앱입니다. 함수 앱은 로컬 함수 프로젝트에 매핑되며, Flex 사용 계획에서 함수를 논리적 단위로 그룹화하여 리소스를 더 쉽게 관리, 배포 및 공유할 수 있습니다.
  1. 아직 로그인하지 않은 경우 Azure에 로그인합니다.

    az login
    

    az login 명령을 선택하면 사용자가 Azure 계정에 로그인됩니다.

  2. 명령을 az functionapp list-flexconsumption-locations 사용하여 현재 Flex Consumption를 지원하는 지역 목록을 사전순으로 검토합니다.

    az functionapp list-flexconsumption-locations --query "sort_by(@, &name)[].{Region:name}" -o table
    
  1. 현재 지원되는 지역 중 하나에 리소스 그룹을 만듭니다.

    az group create --name <RESOURCE_GROUP> --___location <REGION>
    

    이전 명령에서 <RESOURCE_GROUP>은 구독에서 고유한 값으로, <REGION>현재 지원되는 지역 중 하나로 바꾸십시오. az group create 명령은 리소스 그룹을 만듭니다.

  2. 범용 스토리지 계정을 리소스 그룹 및 지역에 만듭니다.

    az storage account create --name <STORAGE_NAME> --___location <REGION> --resource-group <RESOURCE_GROUP> --sku Standard_LRS --allow-blob-public-access false
    

    이전 예제에서 <STORAGE_NAME>을 사용자에게 적절하고 Azure Storage에서 고유한 이름으로 바꿉니다. 이름은 3~24자의 숫자와 소문자만 포함해야 합니다. Standard_LRS는 범용 계정을 지정하며, Functions로 지원됩니다. az storage account create 명령은 스토리지 계정을 만듭니다.

    중요합니다

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

  3. Azure에서 함수 앱을 만듭니다.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-___location <REGION> --runtime dotnet-isolated --runtime-version 8.0 
    

    In Process에서 실행되는 C# 앱은 현재 Flex 사용 계획에서 실행될 때 지원되지 않습니다.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-___location <REGION> --runtime java --runtime-version 17 
    

    Java 앱의 경우 Java 11도 현재 지원됩니다.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-___location <REGION> --runtime node --runtime-version 20 
    
    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-___location <REGION> --runtime python --runtime-version 3.11 
    

    Python 앱의 경우 Python 3.10도 현재 지원됩니다.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-___location <REGION> --runtime powershell --runtime-version 7.4 
    

    이 예제에서는 <RESOURCE_GROUP><STORAGE_NAME>을 각각 이전 단계에서 사용한 계정의 이름과 리소스 그룹으로 바꿉니다. 또한 <APP_NAME>을 사용자에게 적합한 전역 고유 이름으로 바꿉니다. <APP_NAME>은 함수 앱의 기본 DNS(도메인 이름 서버) 도메인이기도 합니다. az functionapp create 명령은 Azure에서 함수 앱을 만듭니다.

    이 명령은 Flex 사용 계획에서 실행되는 함수 앱을 만듭니다.

    항상 준비된 인스턴스를 지정하지 않고 앱을 만들었기 때문에 함수를 적극적으로 실행할 때만 앱에 비용이 발생합니다. 또한 이 명령은 동일한 리소스 그룹에 연결된 Azure Application Insights 인스턴스를 만들어 함수 앱을 모니터링하고 로그를 볼 수 있습니다. 자세한 내용은 Azure Functions 모니터링을 참조하세요.

코드 프로젝트 배포

배포의 경우 Flex Consumption 계획 앱은 Blob Storage 컨테이너를 사용하여 프로젝트 코드와 앱 실행에 필요한 모든 라이브러리가 포함된 .zip 패키지 파일을 호스트합니다. 자세한 내용은 배포를 참조하세요.

대신 Maven을 사용하여 앱을 만들고 배포하기로 선택한 경우 이 섹션을 건너뛸 수 있습니다.

다양한 도구를 사용하여 기존 함수 앱에 프로젝트 코드를 배포하도록 선택할 수 있습니다.

Azure CLI를 사용하여 Azure의 함수 앱에 대한 배포 공유에 배포 패키지 파일을 업로드할 수 있습니다. 이렇게 하려면 패키지가 앱에 탑재될 때 실행할 수 있는 .zip 패키지 파일을 생성해야 합니다.

이 패키지 파일에는 프로젝트를 실행하는 데 필요한 모든 빌드 출력 파일과 참조된 라이브러리가 포함되어야 합니다.

라이브러리 수가 많은 프로젝트의 경우 프로젝트 파일의 루트를 패키지하고 원격 빌드를 요청해야 합니다.

Python 프로젝트의 경우 프로젝트 파일의 루트를 패키지하고 항상 원격 빌드를 요청해야 합니다. 원격 빌드를 사용하면 Linux에 배포할 Windows에서 프로젝트를 빌드할 때 발생할 수 있는 잠재적인 문제를 방지할 수 있습니다.

  1. 기본 설정 개발 도구를 사용하여 코드 프로젝트를 빌드합니다.

  2. 빌드 디렉터리의 출력을 포함하는 .zip 파일을 만듭니다. 자세한 내용은 프로젝트 구조를 참조하세요.

  3. 필요한 경우 Azure 계정에 로그인하고 명령을 사용하여 활성 구독을 az login 선택합니다.

    az login
    
  4. 명령을 az functionapp deployment source config-zip 실행하여 상대 <FILE_PATH>에 있는 애플리케이션 패키지를 배포합니다.

    az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
    
  1. 기본 설정 개발 도구를 사용하여 코드 프로젝트를 빌드합니다.

  2. 빌드 디렉터리의 출력을 포함하는 .zip 파일을 만듭니다. 자세한 내용은 폴더 구조를 참조하세요.

  3. 필요한 경우 Azure 계정에 로그인하고 명령을 사용하여 활성 구독을 az login 선택합니다.

    az login
    
  4. 명령을 az functionapp deployment source config-zip 실행하여 상대 <FILE_PATH>에 있는 애플리케이션 패키지를 배포합니다.

    az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
    
  1. 코드 프로젝트의 루트 디렉터리가 포함된 .zip 파일을 만듭니다. 자세한 내용은 폴더 구조를 참조하세요.

  2. 필요한 경우 Azure 계정에 로그인하고 명령을 사용하여 활성 구독을 az login 선택합니다.

    az login
    
  3. 명령을 az functionapp deployment source config-zip 실행하여 상대 <FILE_PATH>에 있는 애플리케이션 패키지를 배포합니다.

    az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP>
    
  1. 코드 프로젝트의 루트 디렉터리가 포함된 .zip 파일을 만듭니다. 자세한 내용은 폴더 구조를 참조하세요.

  2. 필요한 경우 Azure 계정에 로그인하고 명령을 사용하여 활성 구독을 az login 선택합니다.

    az login
    
  3. 명령을 az functionapp deployment source config-zip 실행하여 상대 <FILE_PATH>에 있는 애플리케이션 패키지를 배포합니다.

    az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP> --build-remote true
    

    --build-remote true를 수행하도록 설정 해야 합니다.

  1. 코드 프로젝트의 루트 디렉터리가 포함된 .zip 파일을 만듭니다. 자세한 내용은 폴더 구조를 참조하세요.

  2. 필요한 경우 Azure 계정에 로그인하고 명령을 사용하여 활성 구독을 az login 선택합니다.

    az login
    
  3. 명령을 az functionapp deployment source config-zip 실행하여 상대 <FILE_PATH>에 있는 애플리케이션 패키지를 배포합니다.

    az functionapp deployment source config-zip --src <FILE_PATH> --name <APP_NAME> --resource-group <RESOURCE_GROUP> --build-remote true
    

    --build-remote true를 수행하도록 설정 해야 합니다.

Maven을 사용하여 앱 만들기 및 배포

Maven을 사용하여 배포하는 동안 pom.xml 파일을 수정하여 Flex 사용 호스팅 함수 앱과 필수 리소스를 만들 수 있습니다.

  1. 다음 빠른 시작 문서 중 하나의 첫 번째 부분을 완료하여 Java 코드 프로젝트를 만듭니다.

  2. Java 코드 프로젝트에서 pom.xml 파일을 열고 다음을 변경하여 Flex 사용 계획에서 함수 앱을 만듭니다.

    • <properties>.<azure.functions.maven.plugin.version>의 값을 1.34.0로 변경합니다.

    • <plugin>.<configuration>azure-functions-maven-plugin 섹션에서 다음과 같이 <pricingTier> 요소를 추가하거나 주석 처리를 제거합니다.

      <pricingTier>Flex Consumption</pricingTier>
      
  3. (선택 사항) <plugin>.<configuration> 섹션에 이러한 요소도 포함하여 Maven 배포에서 Flex 사용 계획을 사용자 지정합니다.

    • <instanceSize> - 함수 앱의 인스턴스 메모리 크기를 설정합니다. 기본값은 2048입니다.
    • <maximumInstances> - 함수 앱의 최대 인스턴스 수에 대해 가장 높은 값을 설정합니다.
    • <alwaysReadyInstances> - HTTP 트리거 그룹(), Durable Functions 그룹(<http>) 및 기타 특정 트리거(<durable>)에 대한 자식 요소로 <my_function>를 설정합니다. 0보다 큰 인스턴스 수를 설정하면 함수 실행 여부에 관계없이 해당 인스턴스에 대한 요금이 청구됩니다. 자세한 내용은 Billing를 참조하세요.
  4. 배포하기 전에 Azure CLI를 사용하여 Azure 구독에 로그인합니다.

    az login
    

    az login 명령을 선택하면 사용자가 Azure 계정에 로그인됩니다.

  5. 다음 명령을 사용하여 Flex 사용량의 새 함수 앱에 코드 프로젝트를 배포합니다.

    mvn azure-functions:deploy
    

    Maven은 pom.xml 템플릿의 설정을 사용하여 다른 필수 리소스와 함께 Azure의 Flex 사용 계획에서 함수 앱을 만듭니다. 이러한 리소스가 이미 있는 경우 코드가 함수 앱에 배포되어 기존 코드를 덮어씁니다.

가상 네트워크 통합 사용

Flex 사용 계획에서 앱에 가상 네트워크 통합을 사용하도록 설정할 수 있습니다. 이 섹션의 예제에서는 계정에 서브넷이 있는 가상 네트워크를 이미 만들었다고 가정합니다. 앱을 만들 때 또는 나중에 가상 네트워크 통합을 사용하도록 설정할 수 있습니다.

중요합니다

Flex 사용량 플랜은 현재 밑줄(_) 문자가 포함된 이름의 서브넷을 지원하지 않습니다.

앱을 만들 때 가상 네트워킹을 사용하도록 설정하려면 다음을 수행합니다.

az functionapp create 명령을 실행하고 --vnet--subnet 매개 변수를 포함하여 가상 네트워크 통합을 사용하도록 설정할 수 있습니다.

  1. 가상 네트워크 및 서브넷을 만듭니다(아직 만들지 않은 경우).

  2. Flex 사용 앱 만들기의 1~4단계를 완료하여 앱에 필요한 리소스를 만듭니다.

  3. 다음 예제와 같이 az functionapp create--vnet 매개 변수를 포함하여 --subnet 명령을 실행합니다.

    az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-___location <REGION> --runtime <RUNTIME_NAME> --runtime-version <RUNTIME_VERSION> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>
    

    <VNET_RESOURCE_ID> 값은 가상 네트워크의 리소스 ID로, /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.Network/virtualNetworks/<VNET_NAME> 형식입니다. 이 명령을 사용하여 <RESOURCE_GROUP>(az network vnet list --resource-group <RESOURCE_GROUP> --output tsv --query "[]".id)으로 필터링된 가상 네트워크 ID 목록을 가져올 수 있습니다.

가상 네트워크 통합을 통해 Flex 사용량에서 앱을 만드는 방법에 대한 엔드투엔드 예제는 다음 리소스를 참조하세요.

기존 앱에서 가상 네트워크 통합을 수정하거나 삭제하려면 다음을 수행합니다.

az functionapp vnet-integration add 명령을 사용하여 기존 함수 앱에 가상 네트워크 통합을 사용하도록 설정합니다.

az functionapp vnet-integration add --resource-group <RESOURCE_GROUP> --name <APP_NAME> --vnet <VNET_RESOURCE_ID> --subnet <SUBNET_NAME>

az functionapp vnet-integration remove 명령을 사용하여 앱에서 가상 네트워크 통합을 사용하지 않도록 설정합니다.

az functionapp vnet-integration remove --resource-group <RESOURCE_GROUP> --name <APP_NAME>

az functionapp vnet-integration list 명령을 사용하여 앱의 현재 가상 네트워크 통합을 나열합니다.

az functionapp vnet-integration list --resource-group <RESOURCE_GROUP> --name <APP_NAME>

서브넷을 선택하는 경우 다음과 같은 고려 사항이 적용됩니다.

  • 선택한 서브넷은 프라이빗 엔드포인트 또는 서비스 엔드포인트와 같은 다른 용도로 사용하거나 다른 호스팅 계획 또는 서비스에 위임할 수 없습니다.
  • Container Apps 환경과 Flex Consumption 앱 간에는 동일한 서브넷을 공유할 수 없습니다.
  • Flex 사용 계획에서 실행되는 둘 이상의 앱과 동일한 서브넷을 공유할 수 있습니다. 네트워킹 리소스는 모든 앱에서 공유되므로 하나의 함수 앱은 동일한 서브넷에서 다른 앱의 성능에 영향을 줄 수 있습니다.
  • Flex 사용 계획에서 단일 함수 앱은 앱이 40개 인스턴스를 초과하는 경우에도 최대 40개의 IP 주소를 사용할 수 있습니다. 이 엄지 손가락 규칙은 필요한 서브넷 크기를 예측할 때 유용하지만 엄격하게 적용되지는 않습니다.

배포 설정 구성

Flex 사용 계획에서 앱의 코드를 포함하는 배포 패키지는 Azure Blob Storage 컨테이너에서 유지 관리됩니다. 기본적으로 배포는 Functions 런타임에서 앱을 유지 관리하는 데 사용하는 것과 동일한 스토리지 계정(AzureWebJobsStorage) 및 연결 문자열 값을 사용합니다. 연결 문자열은 DEPLOYMENT_STORAGE_CONNECTION_STRING 애플리케이션 설정에 저장됩니다. 그러나 대신 별도의 스토리지 계정에 있는 Blob 컨테이너를 코드의 배포 원본으로 지정할 수 있습니다. 컨테이너에 액세스하는 데 사용되는 인증 방법을 변경할 수도 있습니다.

사용자 지정된 배포 원본은 다음 기준을 충족해야 합니다.

  • 스토리지 계정이 이미 있어야 합니다.
  • 배포에 사용할 컨테이너도 있어야 합니다.
  • 둘 이상의 앱이 동일한 스토리지 계정을 사용하는 경우 각 앱에는 자체 배포 컨테이너가 있어야 합니다. 각 앱에 고유한 컨테이너를 사용하면 앱이 동일한 컨테이너를 공유하는 경우 발생하는 배포 패키지 덮어쓰기를 방지할 수 있습니다.

배포 스토리지 인증을 구성할 때 다음 사항에 유념해야 합니다.

  • 보안 모범 사례로, 앱에서 Azure Storage에 연결할 때 관리 ID를 사용해야 합니다. 자세한 내용은 연결을 참조하세요.
  • 연결 문자열을 사용하여 배포 스토리지 계정에 연결하는 경우 연결 문자열을 포함하는 애플리케이션 설정이 이미 있어야 합니다.
  • 사용자가 할당한 관리 ID를 사용하면 제공된 ID가 함수 앱에 연결됩니다. 배포 스토리지 계정으로 범위가 할당된 Storage Blob Data Contributor 역할도 ID에 할당됩니다.
  • 시스템 할당 관리 ID를 사용하는 경우 유효한 시스템 할당 ID가 앱에 아직 없으면 ID가 만들어집니다. 시스템 할당 ID가 존재하는 경우 배포 스토리지 계정으로 범위가 할당된 Storage Blob Data Contributor 역할도 해당 ID에 할당됩니다.

Flex 사용 계획에서 함수 앱을 만들 때 배포 설정을 구성하려면 다음을 수행합니다.

az functionapp create 명령을 사용하고 배포 스토리지를 사용자 지정하는 다음과 같은 추가 옵션을 제공합니다.

매개 변수 설명
--deployment-storage-name 배포 스토리지 계정의 이름입니다.
--deployment-storage-container-name 앱의 배포 패키지를 포함할 계정의 컨테이너 이름입니다.
--deployment-storage-auth-type 배포 스토리지 계정에 연결하는 데 사용할 인증 유형입니다. 수락되는 값은 StorageAccountConnectionString, UserAssignedIdentitySystemAssignedIdentity입니다.
--deployment-storage-auth-value StorageAccountConnectionString을 사용하는 경우 이 매개 변수는 배포 스토리지 계정에 대한 연결 문자열을 포함하는 애플리케이션 설정의 이름으로 설정됩니다. UserAssignedIdentity를 설정하면 이 매개 변수는 사용하려는 ID의 리소스 ID 이름으로 설정됩니다.

이 예에서는 별도의 배포 스토리지 계정과 사용자 할당 ID를 사용하여 Flex 사용 계획에 함수 앱을 만듭니다.

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime dotnet-isolated --runtime-version 8.0 --flexconsumption-___location "<REGION>" --deployment-storage-name <DEPLOYMENT_ACCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME> --deployment-storage-auth-type UserAssignedIdentity --deployment-storage-auth-value <MI_RESOURCE_ID>

기존 앱에 대한 배포 스토리지 구성을 수정할 수도 있습니다.

az functionapp deployment config set 명령을 사용하여 배포 스토리지 구성을 수정합니다.

az functionapp deployment config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --deployment-storage-name <DEPLOYMENT_ACCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME>

인스턴스 메모리 구성

Flex 사용 계획에 사용되는 인스턴스 메모리 크기는 앱을 생성할 때 명시적으로 설정할 수 있습니다. 지원되는 크기에 대한 자세한 내용은 인스턴스 크기를 참조하세요.

앱을 만들 때 기본값과 다른 인스턴스 메모리 크기를 설정하려면 다음을 수행합니다.

--instance-memory 명령에서 az functionapp create 매개 변수를 지정합니다. 이 예제에서는 인스턴스 크기가 4096인 C# 앱을 만듭니다.

az functionapp create --instance-memory 4096 --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage-account <STORAGE_NAME> --flexconsumption-___location <REGION> --runtime dotnet-isolated --runtime-version 8.0

언제든지 앱에서 사용하는 인스턴스 메모리 크기 설정을 변경할 수 있습니다.

이 예제에서는 az functionapp scale config set 명령을 사용하여 인스턴스 메모리 크기 설정을 512MB로 변경합니다.

az functionapp scale config set --resource-group <resourceGroup> --name <APP_NAME> --instance-memory 512

항상 준비된 인스턴스 수 설정

함수를 로드하고 실행할 준비가 되도록 함수별 크기 조정 그룹 또는 개별 함수에 대해 항상 준비된 특정 인스턴스 수를 설정할 수 있습니다. 함수별 크기 조정과 같이 세 가지 특수 그룹이 있습니다.

  • http - 앱의 모든 HTTP 트리거 함수가 자체 인스턴스로 함께 확장됩니다.
  • durable - 앱의 모든 지속성 트리거 함수(오케스트레이션, 활동, 엔터티)가 자체 인스턴스로 함께 확장됩니다.
  • blob - 앱의 모든 Blob(Event Grid) 트리거 함수가 자체 인스턴스로 함께 확장됩니다.

http, durable, 또는 blob를 이름-값 쌍 설정의 이름으로 사용하여 이러한 그룹에 대한 항상 준비 횟수를 구성합니다. 앱의 다른 모든 함수의 경우 function:<FUNCTION_NAME>=n 형식을 사용하여 각 개별 함수에 대해 항상 준비되도록 구성해야 합니다.

하나 이상의 항상 준비된 인스턴스 지정을 정의하려면 --always-ready-instances 명령과 함께 az functionapp create 매개 변수를 사용합니다. 이 예제에서는 모든 HTTP 트리거 함수에 대해 항상 준비된 인스턴스 수를 5로 설정합니다.

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-___location <REGION> --always-ready-instances http=10

이 예제에서는 모든 Durable 트리거 함수의 상시 준비 인스턴스 수를 3로 설정하고 2라는 Service Bus 트리거 함수에 대해 상시 준비 인스턴스 수를 function5로 설정합니다.

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-___location <REGION> --always-ready-instances durable=3 function:function5=2

인스턴스 지정을 추가 또는 제거하거나 기존 인스턴스 지정 수를 변경하여 기존 앱에서 항상 준비된 인스턴스를 수정할 수도 있습니다.

이 예제에서는 az functionapp scale config always-ready set 명령을 사용하여 HTTP 트리거 그룹의 항상 준비된 인스턴스 수를 10으로 변경합니다.

az functionapp scale config always-ready set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --settings http=10

항상 준비된 인스턴스를 제거하려면 HTTP 트리거 그룹과 az functionapp scale config always-ready delete라는 함수 모두에서 항상 준비된 모든 인스턴스를 제거하는 이 예제에서와 같이 hello_world명령을 사용합니다.

az functionapp scale config always-ready delete --resource-group <RESOURCE_GROUP> --name <APP_NAME> --setting-names http function:hello_world

HTTP 동시성 제한 설정

특정 제한을 설정하지 않는 한 Flex 사용 계획 앱의 HTTP 동시성 기본값은 인스턴스 크기 설정에 따라 결정됩니다. 자세한 내용은 HTTP 트리거 동시성을 참조하세요.

기존 앱에 대한 HTTP 동시성 제한을 설정하는 방법은 다음과 같습니다.

az functionapp scale config set 명령을 사용하여 인스턴스 크기에 관계없이 앱에 대한 특정 HTTP 동시성 제한을 설정합니다.

az functionapp scale config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --trigger-type http --trigger-settings perInstanceConcurrency=10

이 예제에서는 HTTP 트리거 동시성 수준을 10으로 설정합니다. HTTP 동시성 값을 구체적으로 설정한 후에는 앱의 인스턴스 크기 설정이 변경되더라도 해당 값이 유지됩니다.

사이트 업데이트 전략 설정

Flex 소비 계획은 함수 앱이 코드 배포 및 구성 변경을 처리하는 방법을 제어하는 두 가지 사이트 업데이트 전략을 고유하게 지원합니다. 기본적으로 Flex Consumption 계획 앱은 Recreate 배포 중에 현재 실행 중인 함수를 종료하는 전략을 사용합니다. 지속적인 서비스 중단 없이 배포할 수 있도록 하려면 대신 RollingUpdate 전략을 구성하세요. 자세한 내용은 Flex Consumption의 사이트 업데이트 전략을 참조하세요.

비고

사이트 업데이트 전략 구성은 현재 공개 미리 보기로 제공되며 Bicep 또는 ARM 템플릿을 통해서만 사용할 수 있습니다. Azure CLI, Azure Portal 또는 Visual Studio Code를 사용하여 이 설정을 구성할 수 없습니다.

사이트 업데이트 전략 구성은 현재 Azure CLI에서 지원되지 않습니다. 사이트 업데이트 구성 전략에 설명된 대로 Bicep 또는 ARM 템플릿을 사용합니다.

현재 지원되는 지역 보기

현재 Flex 사용 계획을 지원하는 지역 목록을 보려면 다음을 수행합니다.

  1. 아직 로그인하지 않은 경우 Azure에 로그인합니다.

    az login
    

    az login 명령을 선택하면 사용자가 Azure 계정에 로그인됩니다.

  2. 명령을 az functionapp list-flexconsumption-locations 사용하여 현재 Flex Consumption를 지원하는 지역 목록을 사전순으로 검토합니다.

    az functionapp list-flexconsumption-locations --query "sort_by(@, &name)[].{Region:name}" -o table
    

Azure Portal 또는 Visual Studio Code를 사용하여 앱을 만들 때 현재 지원되지 않는 지역은 지역 목록에서 필터링됩니다.

Azure에서 앱 모니터링

Azure Monitor는 함수 앱이 Azure에서 실행되는 방식을 더 잘 이해할 수 있도록 다음과 같은 고유한 메트릭 집합을 제공합니다.

  • 플랫폼 메트릭: 인프라 수준 인사이트 제공
  • Application Insights: 추적 및 오류 로그를 비롯한 코드 수준 인사이트를 제공합니다.

아직 수행하지 않은 경우 앱에서 Application Insights를 사용하도록 설정 하여 다음을 수행할 수 있어야 합니다.

  • 자세한 실행 시간 및 종속성 추적
  • 개별 함수 성능 모니터링
  • 오류 및 예외 분석
  • 사용자 지정 쿼리를 사용하여 애플리케이션 동작과 플랫폼 메트릭 상관 관계 지정

자세한 내용은 Azure Functions 모니터링을 참조하세요.

지원되는 메트릭

이 스크립트를 실행하여 현재 앱에서 사용할 수 있는 모든 플랫폼 메트릭을 봅니다.

appId=$(az functionapp show --name <APP_NAME> --resource-group <RESOURCE_GROUP> --query id -o tsv)
az monitor metrics list-definitions --resource $appId --query "[].{Name:name.localizedValue,Value:name.value}" -o table

이 예제에서는 <RESOURCE_GROUP>을(를) 리소스 그룹 이름으로, <APP_NAME>을(를) 함수 앱 이름으로 각각 바꾸세요. 이 스크립트는 정규화된 앱 ID를 가져오고 테이블에서 사용 가능한 플랫폼 메트릭을 반환합니다.

메트릭 보기

Azure Portal에서 또는 Azure CLI를 사용하여 현재 메트릭을 검토할 수 있습니다.

Azure Portal에서 메트릭 경고를 만들고 차트 및 기타 보고서를 포털의 대시보드에 고정할 수도 있습니다.

이 스크립트를 사용하여 앱에 대한 현재 메트릭에 대한 보고서를 생성합니다.

appId=$(az functionapp show --name <APP_NAME> --resource-group <RESOURCE_GROUP> --query id -o tsv)

appId=$(az functionapp show --name func-fuxigh6c255de --resource-group exampleRG --query id -o tsv)

echo -e "\nAlways-ready and on-emand execution counts..."
az monitor metrics list --resource $appId --metric "AlwaysReadyFunctionExecutionCount" --interval PT1H --output table
az monitor metrics list --resource $appId --metric "OnDemandFunctionExecutionCount" --interval PT1H --output table

echo -e "\nExecution units (MB-ms) in always-ready and on-emand execution counts..."
az monitor metrics list --resource $appId --metric "AlwaysReadyFunctionExecutionUnits" --interval PT1H --output table
az monitor metrics list --resource $appId --metric "OnDemandFunctionExecutionUnits" --interval PT1H --output table

echo -e "\nAlways-ready resource utilization..."
az monitor metrics list --resource $appId --metric "AlwaysReadyUnits" --interval PT1H --output table

echo -e "\nMemory utilization..."
az monitor metrics list --resource $appId --metric "AverageMemoryWorkingSet" --interval PT1H --output table
az monitor metrics list --resource $appId --metric "MemoryWorkingSet" --interval PT1H --output table

echo -e "\nInstance count and CPU utilization..."
az monitor metrics list --resource $appId --metric "InstanceCount" --interval PT1H --output table
az monitor metrics list --resource $appId --metric "CpuPercentage" --interval PT1H --output table

Azure Functions의 메트릭에 대한 자세한 내용은 Azure Functions 모니터링을 참조하세요.

로그 보기

앱이 Application Insights에 연결된 경우 실행 중에 앱 성능을 더 잘 분석하고 문제를 해결할 수 있습니다.

  • "성능"을 사용하여 응답 시간 및 종속성 분석
  • "오류"를 사용하여 마이그레이션 후 발생하는 오류를 식별합니다.
  • "로그"에서 사용자 지정 쿼리를 만들어 함수 동작을 분석합니다. 다음은 그 예입니다.

이 쿼리를 사용하여 인스턴스별 성공률을 비교합니다.

requests
| where timestamp > ago(7d)
| summarize successCount=countif(success == true), failureCount=countif(success == false) by bin(timestamp, 1h), cloud_RoleName
| render timechart

이 쿼리를 사용하여 함수를 적극적으로 처리하고 있는 인스턴스 수를 분석합니다.

let _startTime = ago(20m); //Adjust start time as needed
let _endTime = now(); //Adjust end time as needed
let bins = 1s; //Adjust bin as needed - this will give per second results
requests 
| where operation_Name == 'EventHubsTrigger' //Replace with the name of the function in the function app that you are analyzing
| where timestamp between(_startTime .. _endTime)
| make-series dcount(cloud_RoleInstance) default=0 on timestamp from _startTime to _endTime step bins
| render columnchart

비용 보기

앱을 조정하여 성능과 운영 비용을 조정할 수 있으므로 Flex Consumption 계획에서 앱 실행과 관련된 비용을 추적하는 것이 중요합니다.

현재 비용을 보려면 다음을 수행합니다.

  1. Azure Portal의 함수 앱 페이지에서 리소스 그룹 링크를 선택합니다.

  2. 리소스 그룹 페이지에서 Cost Management>비용 분석을 선택합니다.

  3. 앱 자체의 현재 비용 및 비용 궤적을 검토합니다.

  4. 필요에 따라 Cost Management>경고를 선택한 다음 + 추가 를 선택하여 앱에 대한 새 경고를 만듭니다.

앱 미세 조정

Flex 소비 계획은 앱의 성능을 구체화하기 위해 조정할 수 있는 몇 가지 설정을 제공합니다. 실제 성능 및 비용은 앱별 워크로드 패턴 및 구성에 따라 달라질 수 있습니다. 예를 들어 메모리 인스턴스 크기가 높을수록 메모리 집약적 작업에 대한 성능이 향상되지만 활성 기간당 비용이 더 많이 들 수 있습니다.

다음은 성능과 비용을 미세 조정하기 위해 수행할 수 있는 몇 가지 조정 사항입니다.