다음을 통해 공유


Azure Functions의 Azure Container Apps 호스팅

Azure Functions는 Azure Container Apps에서 컨테이너화된 함수 앱을 개발, 배포 및 관리하기 위한 통합 지원을 제공합니다. 다른 마이크로 서비스, API, 웹 사이트, 워크플로 또는 컨테이너 호스팅 프로그램과 동일한 환경에서 Azure에서 이벤트 기반 함수를 실행해야 하는 경우 Azure Container Apps를 사용하여 함수 앱 컨테이너를 호스트합니다. Container Apps 호스팅을 사용하면 오픈 소스 모니터링, mTLS, Dapr 및 KEDA(Kubernetes 이벤트 기반 자동 크기 조정)에 대한 기본 지원을 통해 완전 관리형 Kubernetes 기반 환경에서 함수를 실행할 수 있습니다.

Functions에서 지원하는 언어 스택에서 함수 코드를 작성할 수 있습니다. 이벤트 기반 크기 조정을 사용하여 Functions 트리거와 바인딩을 사용할 수 있습니다. 또한 기존 Functions 클라이언트 도구와 Azure Portal을 사용하여 컨테이너를 만들고, Container Apps에 함수 앱 컨테이너를 배포하고, 지속적인 배포를 구성할 수 있습니다.

또한 Container Apps 통합은 컨테이너 앱 환경 수준에서 정의된 네트워크 구성과 가시성 구성이 Container Apps 환경에서 실행되는 모든 마이크로 서비스에 적용되는 것처럼 함수 앱에 적용된다는 것을 의미합니다. KEDA, Dapr, Envoy를 비롯한 Container Apps의 다른 클라우드 네이티브 기능도 제공됩니다. 사용자는 여전히 Application Insights를 사용하여 함수 실행을 모니터링할 수 있으며, 함수 앱은 환경에서 제공하는 동일한 가상 네트워킹 리소스에 액세스할 수 있습니다.

Azure Functions의 컨테이너 호스팅 옵션에 대한 일반 개요는 Azure Functions에서 Linux 컨테이너 지원을 참조하세요.

호스팅 및 워크로드 프로필

Container Apps에는 서버리스 사용량 플랜 과 워크로드 프로필을 사용하여 배포 리소스를 더욱 효율적으로 제어하는 전용 플랜이라는 두 가지 기본 호스팅 계획이 있습니다. 워크로드 프로필은 환경에 배포된 컨테이너 앱에 사용할 수 있는 컴퓨팅 및 메모리 리소스의 양을 결정합니다. 이러한 프로필은 애플리케이션의 다양한 요구 사항에 맞게 구성됩니다.

사용량 워크로드 프로필은 모든 워크로드 프로필 환경 형식에 추가되는 기본 프로필입니다. 환경을 만들 때 또는 만들어진 후에 환경에 전용 워크로드 프로필을 추가할 수 있습니다. 워크로드 프로필에 관한 자세한 내용은 Azure Container Apps의 워크로드 프로필을 참조하세요.

컨테이너화된 함수 앱의 Container Apps 호스팅은 Container Apps를 지원하는 모든 지역에서 지원됩니다.

앱에 특정 하드웨어 요구 사항이 없다면 사용량 플랜 또는 전용 플랜에서 기본 사용량 워크로드 프로필을 사용하여 환경을 실행할 수 있습니다. Container Apps에서 함수를 실행하는 경우 Container Apps 사용량에 대해서만 요금이 청구됩니다. 자세한 내용은 가격 책정 페이지를 참조하세요.

Azure Container Apps에서 Azure Functions는 전용 플랜에서 워크로드 프로필을 사용하여 GPU 사용 호스팅을 지원합니다.

기본 사용량 플랜에서 함수 앱 컨테이너를 만들고 Container Apps에 배포하는 방법을 알아보려면 Azure Container Apps에서 첫 번째 컨테이너화된 함수 만들기를 참조하세요.

워크로드 프로필을 사용하여 Container Apps 환경을 만들고 특정 워크로드에 함수 앱 컨테이너를 배포하는 방법을 알아보려면 Container Apps 워크로드 프로필을 참조하세요.

컨테이너의 함수

Container Apps 호스팅을 사용하려면 만들고 유지 관리하는 Linux 컨테이너의 함수 앱에서 코드를 실행해야 합니다. Functions는 컨테이너화된 함수 앱을 생성하는 데 사용할 수 있는 언어별 기본 이미지 집합을 유지 관리합니다.

Azure Functions Core Tools를 사용하여 코드 프로젝트를 만들고 --docker 옵션을 포함하면 Core Tools는 올바른 기본 이미지로 Dockerfile을 생성하며, 컨테이너를 만들 때 이를 시작점으로 사용할 수 있습니다.

Important

자체 컨테이너를 만들 때 컨테이너의 기본 이미지를 지원되는 최신 기본 이미지로 업데이트해야 합니다. Azure Functions에 지원되는 기본 이미지는 언어별로 다르며 Azure Functions 기본 이미지 리포지토리에서 찾을 수 있습니다.

Functions 팀은 이러한 기본 이미지에 대한 월별 업데이트를 게시하기 위해 최선을 다하고 있습니다. 정기 업데이트에는 Functions 런타임 및 언어 모두에 대한 최신 부 버전 업데이트 및 보안 수정 사항이 포함됩니다. 정기적으로 최신 기본 이미지에서 컨테이너를 업데이트하고 업데이트된 버전의 컨테이너를 다시 배포해야 합니다.

함수 코드를 변경할 때 컨테이너 이미지를 다시 빌드하고 다시 게시해야 합니다. 자세한 내용은 레지스트리에서 이미지 업데이트를 참조하세요.

배포 옵션

Azure Functions는 현재 컨테이너화된 함수 앱을 Azure Container Apps에 배포하는 다음과 같은 방법을 지원합니다.

가상 네트워크 통합

Container Apps 환경에서 함수 앱을 호스트할 때 함수는 내부 및 외부에서 액세스할 수 있는 가상 네트워크를 모두 활용할 수 있습니다. 환경 네트워크에 관한 자세한 내용은 Azure Container Apps 환경의 네트워킹을 참조하세요.

스케일링 규칙 구성

Container Apps의 Azure Functions는 이벤트 대상에 따라 스케일링 매개 변수 및 규칙을 구성하도록 디자인되었습니다. KEDA 스케일링 개체를 구성하는 것에 대해 걱정할 필요가 없습니다. 함수 앱을 만들거나 수정할 때 최소 및 최대 복제본 개수를 설정할 수 있습니다. 다음 Azure CLI 명령은 Azure Container Registry에서 Container Apps 환경에 새 함수 앱을 만들 때 최소 및 최대 복제본 수를 설정합니다.

az functionapp create --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1 --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --image <LOGIN_SERVER>/azurefunctionsimage:v1 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> --registry-server <LOGIN_SERVER>

다음 명령은 기존 함수 앱에서 동일한 최소 및 최대 복제본 개수를 설정합니다.

az functionapp config container set --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1

관리되는 리소스 그룹

Container Apps에서 Azure Functions는 특별히 관리되는 리소스 그룹에서 컨테이너화된 함수 앱 리소스를 실행합니다. 이러한 관리되는 리소스 그룹은 심지어 서비스 주체라도 관리되는 그룹의 리소스를 의도하지 않게 또는 무단으로 수정하거나 삭제하지 않도록 방지하여 앱의 일관성을 보호하는 데 도움이 됩니다.

관리되는 리소스 그룹은 Container Apps 환경에서 함수 앱 리소스를 처음 만들 때 만들어집니다. 컨테이너화된 함수 앱에 필요한 Container Apps 리소스는 이 관리되는 리소스 그룹에서 실행됩니다. 동일한 환경에서 만드는 다른 모든 함수 앱이 이 기존 그룹을 사용합니다.

관리되는 리소스 그룹은 모든 함수 앱 컨테이너 리소스가 환경에서 제거된 후에 자동으로 제거됩니다. 관리되는 리소스 그룹이 표시되는 동안 관리되는 리소스 그룹을 수정하거나 제거하려고 하면 오류가 발생합니다. 환경에서 관리되는 리소스 그룹을 제거하려면 모든 함수 앱 컨테이너 리소스를 제거하면 자동으로 제거됩니다.

이러한 관리되는 리소스 그룹에 문제가 발생하는 경우 고객 지원팀에 문의해야 합니다.

Container Apps 호스팅에 대한 고려 사항

Container Apps에 함수 앱 컨테이너를 배포할 때 다음 사항을 고려해야 합니다.

  • 모든 트리거를 사용할 수 있지만 Container Apps 환경에서 실행할 때는 다음 트리거만 동적으로 크기를 조정할 수 있습니다(인스턴스 0개부터).
    • Azure Event Grid
    • Azure Event Hubs
    • Azure Blob Storage(이벤트 기반)
    • Azure Queue Storage
    • Azure Service Bus
    • Durable Functions(MSSQL 스토리지 공급자)
    • HTTP
    • Kafka
    • 타이머
  • 이러한 제한 사항은 Kafka 트리거에 적용됩니다.
    • ssl의 프로토콜 값은 Container Apps에서 호스트되는 경우 지원되지 않습니다. 다른 프로토콜 값을 사용합니다.
    • Event Hubs에 연결되어 있을 때 Kafka 트리거가 동적으로 크기를 조정하려면 username 속성이 실제 사용자 이름 값을 포함하는 애플리케이션 설정으로 확인되어야 합니다. 기본 $ConnectionString 값을 사용하는 경우 Kafka 트리거는 앱 크기를 동적으로 조정할 수 없습니다.
  • 기본 제공 Container Apps 정책 정의의 경우 현재 환경 수준 정책만 Azure Functions 컨테이너에 적용됩니다.
  • 다음 연결에 관리 ID를 사용할 수 있습니다.
  • 현재는 리소스 그룹 간 또는 구독 간에 Container Apps 호스팅 함수 앱 배포를 이동할 수 없습니다. 대신 새 리소스 그룹, 구독 또는 지역에서 기존 컨테이너화된 앱 배포를 다시 만들어야 합니다.
  • Container Apps를 사용하는 경우 하위 수준 Kubernetes API에 직접 액세스할 수 없습니다.
  • containerapp 확장이 Azure CLI의 appservice-kube 확장과 충돌합니다. 이전에 Azure Arc에 앱을 게시한 경우 az extension list를 실행하고 appservice-kube가 설치되지 않았는지 확인합니다. 이 경우 az extension remove -n appservice-kube를 실행하여 제거할 수 있습니다.

다음 단계