다음을 통해 공유


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

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

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

필수 조건

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 사용을 지원하는 지역 목록을 검토합니다.

    az functionapp list-flexconsumption-locations --output 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 명령은 스토리지 계정을 만듭니다.

    Important

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

  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 모니터링을 참조하세요.

    
    

코드 프로젝트 배포

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

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

Important

기존 함수 앱에 배포하면 항상 Azure에서 해당 앱의 콘텐츠를 덮어씁니다.

  1. 명령 팔레트에서 Azure Functions: 함수 앱에 배포를 입력한 다음, 선택합니다.

  2. 방금 만든 함수 앱을 선택합니다. 이전 배포를 덮어쓰라는 메시지가 표시되면 배포를 선택하여 함수 코드를 새 함수 앱 리소스에 배포합니다.

  3. 배포가 완료되면 출력 보기를 선택하여 사용자가 만든 Azure 리소스를 포함한 만들기 및 배포 결과를 확인합니다. 알림이 누락된 경우 오른쪽 아래 모서리에 있는 종 모양 아이콘을 선택하여 다시 확인합니다.

    출력 보기 창의 스크린샷

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

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

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

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

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

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

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

    • <instanceSize> - 함수 앱의 인스턴스 메모리 크기를 설정합니다. 기본값은 2048입니다.
    • <maximumInstances> - 함수 앱의 최대 인스턴스 수에 대해 가장 높은 값을 설정합니다.
    • <alwaysReadyInstances> - HTTP 트리거 그룹(<http>), Durable Functions 그룹(<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 사용 계획에서 앱에 가상 네트워크 통합을 사용하도록 설정할 수 있습니다. 이 섹션의 예제에서는 계정에 서브넷을 사용하여 가상 네트워크를 이미 만들었다고 가정합니다. 앱을 만들 때 또는 나중에 가상 네트워크 통합을 사용하도록 설정할 수 있습니다.

Important

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

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

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

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

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

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

    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/<RESOURCER_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>

서브넷을 선택할 때 다음과 같은 고려 사항이 적용됩니다.

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

배포 설정 구성

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

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

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

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

  • 연결 문자열을 사용하여 배포 스토리지 계정에 연결하는 경우 연결 문자열을 포함하는 애플리케이션 설정이 이미 있어야 합니다.
  • 사용자가 할당한 관리 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_ACCCOUNT_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_ACCCOUNT_NAME> --deployment-storage-container-name <DEPLOYMENT_CONTAINER_NAME>

인스턴스 메모리 구성

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

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

az functionapp create 명령에서 --instance-memory 매개 변수를 지정합니다. 이 예제에서는 인스턴스 크기가 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 명령을 사용하여 인스턴스 메모리 크기 설정을 4,096MB로 변경합니다.

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

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

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

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

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

az functionapp create 명령과 함께 --always-ready-instances 매개 변수를 사용하여 하나 이상의 상시 준비 인스턴스 지정을 정의합니다. 이 예제에서는 모든 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로 설정하고 function5라는 Service Bus 트리거 함수에 대해 상시 준비 인스턴스 수를 2로 설정합니다.

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

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 사용 계획을 지원하는 지역 목록을 보려면 다음을 수행합니다.

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

    az login
    

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

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

    az functionapp list-flexconsumption-locations --output table
    

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