자습서: 프라이빗 엔드포인트를 사용하여 Azure 가상 네트워크와 Azure Functions 통합
이 자습서에서는 Azure Functions를 사용하여 프라이빗 엔드포인트를 통해 Azure Virtual Network의 리소스에 연결하는 방법을 보여줍니다. Azure Portal을 통해 가상 네트워크 내부에서 잠긴 새 스토리지 계정을 사용하여 새 함수 앱을 만듭니다. 가상 네트워크에는 Service Bus 큐 트리거가 사용됩니다.
이 자습서에서는 다음을 수행합니다.
- 가상 네트워크 통합 및 프라이빗 엔드포인트를 사용하여 탄력적 프리미엄 플랜에서 함수 앱을 만듭니다.
- Service Bus와 같은 Azure 리소스를 만듭니다.
- 프라이빗 엔드포인트 뒤에서 Service Bus를 잠급니다.
- Service bus 및 HTTP 트리거를 모두 사용하는 함수 앱을 배포합니다.
- 함수 앱이 가상 네트워크 내에서 안전하게 보호되는지 테스트합니다.
- 리소스를 정리합니다.
프리미엄 플랜에서 함수 앱 만들기
서버리스 크기 조정과 함께 만들 때 가상 네트워크 통합과 같은 네트워킹 기능을 지원하는 탄력적 프리미엄 플랜에서 C# 함수 앱을 만듭니다. 이 자습서에서는 C# 및 Windows를 사용합니다. 다른 언어 및 Linux도 지원됩니다.
Azure Portal 메뉴 또는 홈 페이지에서 리소스 만들기를 선택합니다.
새로 만들기 페이지에서 컴퓨팅>함수 앱을 선택합니다.
기본 사항 페이지에서 다음 표를 사용하여 함수 앱 설정을 구성합니다.
설정 제안 값 설명 구독 구독 이 새 함수 앱이 만들어질 구독입니다. 리소스 그룹 myResourceGroup 함수 앱을 만드는 새 리소스 그룹의 이름입니다. 함수 앱 이름 전역적으로 고유한 이름 새 함수 앱을 식별하는 이름입니다. 유효한 문자는 a-z
(대/소문자 구분 안 함),0-9
및-
입니다.게시 코드 코드 파일 또는 Docker 컨테이너를 게시하도록 선택합니다. 런타임 스택 .NET 이 자습서에서는 .NET을 사용합니다. 버전 6(LTS) 이 자습서에서는 Functions 호스트와 동일한 프로세스에서 실행되는 .NET 6.0을 사용합니다. 지역 기본 지역 사용자 근처 또는 함수가 액세스할 기타 서비스에 가까운 지역을 선택합니다. 운영 체제 Windows 이 자습서에서는 Windows를 사용하지만 Linux에서도 작동합니다. 계획 Functions 프리미엄 함수 앱에 리소스가 할당되는 방법을 정의하는 호스팅 계획입니다. 기본적으로 프리미엄을 선택하면 새 App Service 요금제가 만들어집니다. 기본 SKU 및 크기는 EP1입니다. 여기서 EP는 탄력적 프리미엄을 의미합니다. 자세한 내용은 프리미엄 SKU 목록을 참조하세요.
프리미엄 계획에서 JavaScript 함수를 실행 중인 경우 vCPU 수가 더 작은 인스턴스를 선택합니다. 자세한 내용은 단일 코어 프리미엄 계획 선택을 참조하세요.다음: 스토리지를 선택합니다. 스토리지 페이지에서 다음 설정을 입력합니다.
설정 제안 값 설명 스토리지 계정 전역적으로 고유한 이름 함수 앱에서 사용하는 스토리지 계정을 만듭니다. 스토리지 계정 이름은 3~24자여야 합니다. 이름은 숫자와 소문자만 포함할 수 있습니다. 방화벽 규칙으로 제한되지 않고 스토리지 계정 요구 사항을 충족하는 기존 계정을 사용할 수도 있습니다. 잠긴 스토리지 계정으로 Functions를 사용하는 경우 v2 스토리지 계정이 필요합니다. 이는 만들기 블레이드를 통해 네트워킹 기능이 있는 함수 앱을 만들 때 만든 기본 스토리지 버전입니다. 다음: 네트워킹을 선택합니다. 네트워킹 페이지에서 다음 설정을 입력합니다.
참고 항목
이러한 설정 중 일부는 다른 옵션을 선택할 때까지 표시되지 않습니다.
설정 제안 값 설명 퍼블릭 액세스 사용 끄기 공용 네트워크 액세스를 거부하면 프라이빗 엔드포인트에서 들어오는 트래픽을 제외한 모든 들어오는 트래픽을 차단합니다. 네트워크 삽입 사용 설정 이 옵션이 켜기로 전환되면 만들 때 VNet 통합을 사용하여 애플리케이션을 구성하는 기능이 포털 창에 표시됩니다. Virtual Network 새로 만들기 새로 만들기 필드를 선택합니다. 팝업 화면에서 가상 네트워크의 이름을 입력하고 확인을 선택합니다. 만들 때 함수 앱에 대한 인바운드 및 아웃바운드 액세스를 제한하는 옵션이 표시됩니다. 아웃바운드 액세스를 제한하려면 창의 아웃바운드 액세스 부분에서 VNet 통합을 명시적으로 사용하도록 설정해야 합니다. 인바운드 액세스 섹션에 대해 다음 설정을 입력합니다. 이 단계에서는 프라이빗 엔드포인트를 함수 앱에 만듭니다.
팁
포털에서 함수 앱과 계속 상호 작용하려면 로컬 컴퓨터를 가상 네트워크에 추가해야 합니다. 인바운드 액세스를 제한하지 않으려면 이 단계를 건너뛰세요.
설정 제안 값 설명 프라이빗 엔드포인트 사용 설정 이 옵션을 사용하도록 설정하면 만들 때 VNet 통합을 사용하여 애플리케이션을 구성하는 기능이 포털에 표시됩니다. 프라이빗 엔드포인트 이름 myInboundPrivateEndpointName 새 함수 앱 프라이빗 엔드포인트를 식별하는 이름입니다. 인바운드 서브넷 새로 만들기 이 옵션은 인바운드 프라이빗 엔드포인트에 대한 새 서브넷을 만듭니다. 여러 프라이빗 엔드포인트를 단일 서브넷에 추가할 수 있습니다. 서브넷 이름을 제공합니다. 서브넷 주소 블록은 기본값으로 둘 수 있습니다. 확인을 선택합니다. 서브넷 크기를 조정하는 방법에 대한 자세한 내용은 서브넷을 참조하세요. DNS Azure 프라이빗 DNS 영역 이 값은 프라이빗 엔드포인트에서 사용하는 DNS 서버를 나타냅니다. 대부분의 경우 Azure 내에서 작업하는 경우 사용자 지정 DNS 영역에 대해 수동을 사용하면 복잡성이 증가하므로 Azure 프라이빗 DNS 영역이 사용해야 하는 DNS 영역입니다. 아웃바운드 액세스 섹션에 대해 다음 설정을 입력합니다. 이 단계에서는 만들 때 함수 앱을 가상 네트워크와 통합합니다. 또한 프라이빗 엔드포인트를 스토리지 계정에 만들고, 만들 때 네트워크 액세스로부터 스토리지 계정을 제한하는 옵션을 표시합니다. 함수 앱이 vnet과 통합되면 모든 아웃바운드 트래픽은 기본적으로 vnet을 통과합니다.
설정 제안 값 설명 VNet 통합 사용 설정 이 설정은 VNet을 통해 모든 아웃바운드 트래픽을 만들고 전송할 때 함수 앱을 VNet과 통합합니다. 아웃바운드 서브넷 새로 만들기 이 설정은 함수 앱의 VNet 통합을 위한 새 서브넷을 만듭니다. 함수 앱은 빈 서브넷과 통합된 VNet만 될 수 있습니다. 서브넷 이름을 제공합니다. 서브넷 주소 블록은 기본값으로 둘 수 있습니다. 구성하려면 여기에서 서브넷 크기 조정에 대해 자세히 알아보세요. 확인을 선택합니다. 스토리지 프라이빗 엔드포인트를 만드는 옵션이 표시됩니다. 가상 네트워크에서 함수 앱을 사용하려면 서브넷에 조인해야 합니다. 스토리지 프라이빗 엔드포인트 섹션에 대해 다음 설정을 입력합니다. 이 단계에서는 만들 때 Blob, 큐, 파일 및 테이블 엔드포인트에 대한 프라이빗 엔드포인트를 스토리지 계정에 만듭니다. 이렇게 하면 스토리지 계정이 VNet과 효과적으로 통합됩니다.
설정 제안 값 설명 스토리지 프라이빗 엔드포인트 추가 설정 이 옵션을 사용하도록 설정하면 만들 때 VNet 통합을 사용하여 애플리케이션을 구성하는 기능이 포털에 표시됩니다. 프라이빗 엔드포인트 이름 myInboundPrivateEndpointName 스토리지 계정 프라이빗 엔드포인트를 식별하는 이름입니다. 프라이빗 엔드포인트 서브넷 새로 만들기 이 설정은 인바운드 프라이빗 엔드포인트에 대한 새 서브넷을 스토리지 계정에 만듭니다. 여러 프라이빗 엔드포인트를 단일 서브넷에 추가할 수 있습니다. 서브넷 이름을 제공합니다. 서브넷 주소 블록은 기본값으로 둘 수 있습니다. 구성하려면 여기에서 서브넷 크기 조정에 대해 자세히 알아보세요. 확인을 선택합니다. DNS Azure 프라이빗 DNS 영역 이 값은 프라이빗 엔드포인트에서 사용하는 DNS 서버를 나타냅니다. 대부분의 경우 Azure 내에서 작업하는 경우 사용자 지정 DNS 영역에 대해 수동을 사용하면 복잡성이 증가하므로 Azure 프라이빗 DNS 영역이 사용해야 하는 DNS 영역입니다. 다음: 모니터링을 선택합니다. 모니터링 페이지에서 다음 설정을 입력합니다.
설정 제안 값 설명 Application Insights 기본값 가장 가까운 지원 영역에 동일한 앱 이름의 Application Insight 리소스를 만듭니다. 새 리소스 이름을 변경하거나 Azure Geography의 다른 위치에 데이터를 저장해야 하는 경우 이 설정을 확장합니다. 검토 + 만들기를 선택하여 앱 구성 선택을 검토합니다.
검토 + 만들기 페이지에서 설정을 검토합니다. 그런 다음, 만들기를 선택하여 함수 앱을 만들고 배포합니다.
포털의 오른쪽 상단에 있는 알림 아이콘을 선택하고 배포 성공 메시지를 확인합니다.
리소스로 이동을 선택하여 함수 앱을 봅니다. 대시보드에 고정을 선택할 수도 있습니다. 고정하면 대시보드에서 이 함수 앱 리소스로 쉽게 돌아올 수 있습니다.
축하합니다! 프리미엄 함수 앱을 만들었습니다.
참고 항목
일부 배포는 경우에 따라 'StorageAccountOperationInProgress' 오류로 인해 프라이빗 엔드포인트를 스토리지 계정에 만들지 못할 수 있습니다. 이 오류는 함수 앱 자체가 성공적으로 만들어지는 경우에도 발생합니다. 이러한 오류가 발생하면 함수 앱을 삭제하고 작업을 다시 시도합니다. 대신 수동으로 프라이빗 엔드포인트를 스토리지 계정에 만들 수 있습니다.
Service Bus 만들기
다음으로, 이 자습서에서 함수 앱의 네트워크 기능을 테스트하는 데 사용되는 Service Bus 인스턴스를 만듭니다.
Azure Portal 메뉴 또는 홈 페이지에서 리소스 만들기를 선택합니다.
새로 만들기 페이지에서 Service Bus를 검색합니다. 다음으로 만들기를 선택합니다.
기본 정보 탭에서 다음 표를 사용하여 Service Bus 설정을 구성합니다. 다른 모든 설정에는 기본값을 사용할 수 있습니다.
설정 제안 값 설명 구독 구독 리소스가 만들어지는 구독입니다. 리소스 그룹 myResourceGroup 함수 앱을 사용하여 만든 리소스 그룹입니다. 네임스페이스 이름 myServiceBus 프라이빗 엔드포인트가 사용하도록 설정된 Service Bus 인스턴스의 이름입니다. 위치 myFunctionRegion 함수 앱을 만든 지역입니다. 가격 책정 계층 Premium Azure Service Bus에서 프라이빗 엔드포인트를 사용하려면 이 계층을 선택합니다. 검토 + 만들기를 선택합니다. 유효성 검사가 완료되면 만들기를 선택합니다.
Service Bus 잠금
다음과 같이 Service Bus를 잠글 프라이빗 엔드포인트를 만듭니다.
새 Service Bus의 왼쪽에 있는 메뉴에서 네트워킹을 선택합니다.
프라이빗 엔드포인트 연결 탭에서 프라이빗 엔드포인트를 선택합니다.
기본 사항 탭에서 다음 표에 나와 있는 프라이빗 엔드포인트 설정을 사용합니다.
설정 제안 값 설명 구독 구독 리소스가 만들어지는 구독입니다. 리소스 그룹 myResourceGroup 함수 앱을 사용하여 만든 리소스 그룹입니다. 이름 sb-endpoint Service Bus에 대한 프라이빗 엔드포인트의 이름입니다. 지역 myFunctionRegion 스토리지 계정을 만든 지역입니다. 리소스 탭에서 다음 표에 나와 있는 프라이빗 엔드포인트 설정을 사용합니다.
설정 제안 값 설명 구독 구독 리소스가 만들어지는 구독입니다. 리소스 종류 Microsoft.ServiceBus/namespaces Service Bus에 대한 리소스 종류입니다. 리소스 myServiceBus 자습서의 앞부분에서 만든 Service Bus입니다. 대상 하위 리소스 namespace Service Bus의 네임스페이스에 사용되는 프라이빗 엔드포인트입니다. Virtual Network 탭에서 서브넷 설정에 대해 기본값을 선택합니다.
검토 + 만들기를 선택합니다. 유효성 검사가 완료되면 만들기를 선택합니다.
프라이빗 엔드포인트가 만들어지면 Service Bus 네임스페이스의 네트워킹 섹션으로 돌아가서 퍼블릭 액세스 탭을 확인합니다.
선택한 네트워크가 선택되었는지 확인합니다.
+ 기존 가상 네트워크 추가를 선택하여 최근에 만든 가상 네트워크를 추가합니다.
네트워크 추가 탭에서 다음 테이블의 네트워크 설정을 사용합니다.
설정 제안 값 설명 구독 구독 리소스가 만들어지는 구독입니다. 가상 네트워크 myVirtualNet 함수 앱이 연결되는 가상 네트워크의 이름입니다. 서브넷 functions 함수 앱이 연결되는 서브넷의 이름입니다. 클라이언트 IP 주소 추가를 선택하여 현재 클라이언트 IP에 네임스페이스에 대한 액세스 권한을 부여합니다.
참고 항목
Azure Portal이 이 자습서의 뒷 부분에서 큐에 메시지를 게시하도록 설정하기 위해서는 클라이언트 IP 주소를 허용해야 합니다.
서비스 엔드포인트를 사용하도록 설정하려면 사용을 선택합니다.
선택한 가상 네트워크 및 서브넷을 Service Bus에 대한 방화벽 규칙에 추가하려면 추가를 선택합니다.
업데이트된 방화벽 규칙을 저장하려면 저장을 선택합니다.
이제 가상 네트워크의 리소스가 프라이빗 엔드포인트를 사용하여 Service Bus와 통신할 수 있습니다.
큐 만들기
Azure Functions Service Bus 트리거에서 이벤트를 가져오는 큐를 만듭니다.
Service Bus의 왼쪽에 있는 메뉴에서 큐를 선택합니다.
큐를 선택합니다. 이 자습서에서는 새 큐의 이름으로 queue 이름을 제공합니다.
만들기를 실행합니다.
Service Bus 연결 문자열 가져오기
Service Bus의 왼쪽에 있는 메뉴에서 공유 액세스 정책을 선택합니다.
RootManageSharedAccessKey를 선택합니다. 기본 연결 문자열을 복사하고 저장합니다. 이 연결 문자열은 앱 설정을 구성할 때 필요합니다.
함수 앱 설정 구성
함수 앱의 왼쪽에 있는 메뉴에서 구성을 선택합니다.
가상 네트워크 및 Service Bus에서 함수 앱을 사용하려면 다음 표에 표시된 앱 설정을 업데이트합니다. 설정을 추가하거나 편집하려면 앱 설정 테이블의 맨 오른쪽 열에서 + 새 애플리케이션 설정 또는 편집 아이콘을 선택합니다. 완료되면 저장을 선택합니다.
설정 제안 값 설명 SERVICEBUS_CONNECTION myServiceBusConnectionString Service Bus의 연결 문자열에 대해 이 앱 설정을 만듭니다. 이 스토리지 연결 문자열은 Service Bus 연결 문자열 가져오기 섹션에서 가져온 것입니다. WEBSITE_CONTENTOVERVNET 1 이 앱 설정을 만듭니다. 1 값을 사용하면 스토리지 계정이 가상 네트워크로 제한된 경우 함수 앱을 스케일링할 수 있습니다. Elastic Premium 호스팅 플랜을 사용하므로 구성 보기에서 함수 런타임 설정 탭을 선택합니다 런타임 규모 모니터링을 켜기로 설정합니다. 그런 다음 저장을 선택합니다. 런타임 기반 크기 조정을 사용하면 가상 네트워크 내에서 실행되는 서비스에 HTTP가 아닌 트리거 함수를 연결할 수 있습니다.
참고 항목
전용 App Service 요금제에서 호스트되는 함수 앱에는 런타임 크기 조정이 필요하지 않습니다.
Service Bus 트리거 및 HTTP 트리거 배포
참고 항목
함수 앱에서 프라이빗 엔드포인트를 사용하도록 설정하면 SCM(소스 제어 관리자) 사이트에도 공개적으로 액세스할 수 없습니다. 다음 지침에서는 함수 앱 내에서 배포 센터를 사용하여 배포 지침을 제공합니다. 또는 가상 네트워크의 서브넷에 배포되는 zip 배포 또는 자체 호스팅 에이전트를 사용합니다.
GitHub에서 다음과 같은 샘플 리포지토리로 이동합니다. 여기에는 함수 앱과 두 개의 함수, 즉 HTTP 트리거와 Service Bus 큐 트리거가 포함되어 있습니다.
페이지 상단에서 포크를 선택하여 고유한 GitHub 계정 또는 조직에서 이 리포지토리의 포크를 만듭니다.
함수 앱의 왼쪽에 있는 메뉴에서 배포 센터를 선택합니다. 그런 다음, 설정을 선택합니다.
설정 탭에서 다음 표에 나와 있는 배포 설정을 사용합니다.
설정 제안 값 설명 원본 GitHub 2단계에서 샘플 코드에 대한 GitHub 리포지토리를 만들어야 합니다. 조직 myOrganization 리포지토리가 체크인된 조직입니다. 일반적으로 사용자의 계정입니다. 리포지토리 functions-vnet-tutorial https://github.com/Azure-Samples/functions-vnet-tutorial에서 포크된 리포지토리입니다. Branch main 만든 리포지토리의 주 분기입니다. 런타임 스택 .NET 샘플 코드는 C#입니다. 버전 .NET Core 3.1 런타임 버전입니다. 저장을 선택합니다.
초기 배포에는 몇 분 정도 걸릴 수 있습니다. 앱이 배포되면 로그 탭에 성공(활성) 상태 메시지가 표시됩니다. 필요한 경우 페이지를 새로 고칩니다.
축하합니다! 샘플 함수 앱을 배포했습니다.
잠긴 함수 앱 테스트
함수 앱의 왼쪽에 있는 메뉴에서 함수를 선택합니다.
ServiceBusQueueTrigger를 선택합니다.
왼쪽 메뉴에서 모니터를 선택합니다.
앱을 모니터링할 수 없음을 알 수 있습니다. 사용 중인 브라우저는 가상 네트워크에 액세스할 수 없으므로 가상 네트워크 내의 리소스에 직접 액세스할 수 없습니다.
Application Insights를 사용하여 함수를 모니터링하는 다른 방법은 다음과 같습니다.
함수 앱의 왼쪽에 있는 메뉴에서 Application Insights를 선택합니다. 그런 다음, Application Insights 데이터 보기를 선택합니다.
왼쪽 메뉴에서 라이브 메트릭을 선택합니다.
새 탭을 엽니다. Service Bus의 왼쪽에 있는 메뉴에서 큐를 선택합니다.
큐를 선택합니다.
왼쪽 메뉴에서 Service Bus Explorer를 선택합니다. 보내기에서 콘텐츠 형식으로 텍스트/일반을 선택합니다. 그런 다음 메시지를 입력합니다.
보내기를 선택하여 메시지를 보냅니다.
라이브 메트릭 탭에서 Service Bus 큐 트리거가 발생한 것을 확인할 수 있습니다. 그렇지 않은 경우 Service Bus Explorer에서 메시지를 다시 보냅니다.
축하합니다! 프라이빗 엔드포인트를 사용하여 함수 앱 설정을 테스트했습니다.
개인 DNS 영역 이해
프라이빗 엔드포인트를 사용하여 Azure 리소스에 연결했습니다. 퍼블릭 엔드포인트 대신 개인 IP 주소에 연결하는 중입니다. 기존 Azure 서비스는 기존 DNS를 사용하여 페블릭 엔드포인트에 연결하도록 구성됩니다. 프라이빗 엔드포인트에 연결하려면 DNS 구성을 재정의해야 합니다.
프라이빗 엔드포인트로 구성된 각 Azure 리소스에 대해 개인 DNS 영역이 생성됩니다. 프라이빗 엔드포인트와 연결된 각 개인 IP 주소에 대한 DNS 레코드가 만들어집니다.
이 자습서에서는 다음과 같은 DNS 영역을 만들었습니다.
- privatelink.file.core.windows.net
- privatelink.blob.core.windows.net
- privatelink.servicebus.windows.net
- privatelink.azurewebsites.net
리소스 정리
이전 단계에서는 리소스 그룹에서 Azure 리소스를 만들었습니다. 나중에 이러한 리소스가 필요하지 않은 경우에 리소스 그룹을 삭제하여 삭제할 수 있습니다.
Azure Portal 메뉴 또는 홈 페이지에서 리소스 그룹을 선택합니다. 그런 다음, 리소스 그룹 페이지에서 myResourceGroup을 선택합니다.
myResourceGroup 페이지에서 나열된 리소스가 삭제하려는 리소스인지 확인합니다.
리소스 그룹 삭제를 선택하고, 텍스트 상자에서 myResourceGroup을 입력하여 확인한 다음, 삭제를 선택합니다.
다음 단계
이 자습서에서는 프리미엄 함수 앱, 스토리지 계정 및 Service Bus를 만들었습니다. 이러한 리소스는 모두 프라이빗 엔드포인트 뒤에 보안을 설정했습니다.
다음 링크를 사용하여 Azure Functions 네트워킹 옵션 및 프라이빗 엔드포인트에 대해 자세히 알아보세요.