Azure용 외부 함수 계획하기
Azure용 외부 함수 계획하기
이 문서는 Microsoft Azure용 외부 함수를 만들기 전에 준비해야 할 사항을 안내해요. Azure Portal을 쓰든, Snowflake가 제공하는 ARM(Azure Resource Manager) 템플릿을 쓰든 공통적으로 필요한 정보와 조건을 먼저 정리해 두면 과정이 훨씬 수월해져요.
본문
이 주제는 Azure Portal 또는 Snowflake가 제공하는 ARM(Azure Resource Manager) 템플릿을 사용해 Microsoft Azure용 외부 함수를 만들 준비를 돕기 위한 내용이에요.
필수 조건 (Prerequisites)
이 지침은 Azure Portal 사용에 익숙한 사용자를 전제로 해요.
Azure용 외부 함수를 만들려면 다음이 필요해요:
-
Azure AD(Active Directory) 테넌트.
-
그 Azure AD 테넌트 안의 계정. 이 계정에는 다음을 할 수 있는 권한이 있어야 해요:
-
Azure Functions 앱 만들기.
-
Azure API Management 서비스를 사용해 서비스 엔드포인트 만들기.
-
Azure AD 애플리케이션 등록하기.
-
-
ACCOUNTADMIN 역할 또는 CREATE INTEGRATION 권한이 있는 역할을 가진 Snowflake 계정.
게다가 Azure AD Tenant ID도 이미 알고 있어야 해요.
Azure AD Tenant ID는 UUID로, 보통 12345678-abcd-1234-efab-123456789012처럼 생겼어요. 여기서 대시가 아닌 각 문자는 16진수(hexadecimal digit)예요.
Azure AD 테넌트 ID를 아직 모른다면 다음 절차로 찾을 수 있어요:
-
Azure Portal(http://portal.azure.com)에 로그인해요.
-
페이지 상단 근처의 Azure services 아이콘에서 Azure Active Directory를 클릭해요.
-
왼쪽 메뉴에서 Manage 섹션을 찾아 그 아래의 Properties를 클릭해요.
Azure AD 테넌트 ID는 Tenant ID 필드에 표시돼요.
공용 인터넷 또는 프라이빗 연결
외부 함수를 호출할 때 Snowflake에서 외부 서비스로의 연결은 공용 인터넷을 통하거나 Azure Private Link를 사용할 수 있어요. Azure Private Link를 사용할지 여부는 외부 서비스에 어떻게 연결해야 하는지에 대한 보안 요구 사항에 따라 달라져요. Azure Private Link를 사용하면 보안 요구 사항을 충족하는 데 도움이 될 수 있어요.
공용 인터넷을 사용하기로 했다면 이 주제의 나머지를 마저 읽고, Azure Portal 또는 ARM 템플릿을 사용해 Azure에서 외부 함수를 만드는 번호가 매겨진 주제들을 따라가면 돼요.
Azure Private Link를 사용하기로 했다면, 구성 과정에서 ACCOUNTADMIN 역할과 Business Critical Edition(또는 그 이상)인 Snowflake 계정이 필요해요. Azure Private Link를 사용하려면 추가 요금이 부과돼요. 이 주제의 나머지를 마저 읽고 다음 주제들을 살펴보세요:
-
아웃바운드 네트워크 트래픽용 프라이빗 연결
-
프라이빗 연결 엔드포인트 관리: Azure
-
외부 함수와 함께하는 프라이빗 연결: Azure ARM 템플릿 (청구 섹션 포함)
-
외부 함수와 함께하는 프라이빗 연결: Azure Portal (청구 섹션 포함)
외부 함수를 만드는 방법 선택하기
Snowflake는 Azure에서 외부 함수를 만드는 두 가지 방법에 대한 지침을 제공해요:
-
Azure Portal 웹 인터페이스
-
Snowflake가 제공하는 ARM(Azure Resource Manager) 템플릿
Azure Portal
Azure Portal을 사용해 Azure Function(원격 서비스)과 API Management 서비스 인스턴스(프록시 서비스)를 만들 수 있어요. 이 방법을 선택하면 보안 관련 설정도 Azure Portal에서 구성해요.
Azure Portal을 사용해 외부 함수를 만드는 지침에는 샘플 Azure Function과 기본 API Management 서비스 인스턴스를 만드는 세부 사항이 포함돼 있어요.
-
처음 사용하는 사용자는 지침과 샘플 Azure Function을 거의 수정 없이 그대로 쓸 수 있어요.
-
경험이 많은 사용자는 지침과 샘플 Azure Function을 출발점으로 삼아 커스텀 Azure Function과 커스텀 구성의 API Management 서비스 인스턴스를 만들 수 있어요.
ARM(Azure Resource Manager) 템플릿
ARM 템플릿은 JSON을 사용해 Azure Function(원격 서비스)과 Azure API Management 서비스 인스턴스(프록시 서비스)에 대한 구성 정보를 기술해요.
Snowflake가 제공하는 샘플 ARM 템플릿에는 다음이 포함돼 있어요:
-
샘플 Azure Function.
-
샘플 API Management 서비스에 대한 대부분의 구성 정보. 샘플 API Management 서비스를 커스터마이즈하려면 추가 정보를 몇 가지 입력해야 해요.
-
Azure Functions 서비스에 필요한 스토리지 계정을 만드는 코드.
-
Azure API Management 서비스의 보안을 높이기 위해 API Management 인스턴스에 validate-JWT(JSON Web Token) Policy를 추가하는 코드. 다만 사용하기 전에 validate-JWT 정책을 수동으로 업데이트해야 해요.
ARM 템플릿은 처음 사용자와 경험 많은 사용자 모두에게 유용할 수 있어요:
-
처음 사용자는 Azure Function과 API Management 서비스 인스턴스를 만드는 데 필요한 단계 수가 줄어드므로 Snowflake 샘플 템플릿부터 시작하고 싶을 수 있어요. 템플릿 기반 지침은 첫 외부 함수를 빠르게 만드는 데 도움이 되지만, 대부분의 사용자가 커스텀 외부 함수를 만들 때 필요한 몇몇 단계를 건너뛴다는 점을 기억하세요.
-
경험이 많은 사용자는 템플릿으로 배포를 자동화할 수 있으므로 ARM 템플릿을 쓰고 싶을 수 있어요. Azure Function과 API Management 서비스를 반복적으로 개발할 때 유용해요.
ARM 템플릿을 사용한 Azure Functions 구성에 대한 자세한 내용은 Microsoft 문서 "resource deployment"를 참고해요: https://docs.microsoft.com/en-us/azure/azure-functions/functions-infrastructure-as-code
Azure Portal 사용 준비하기
이 섹션들은 Azure Portal을 사용해 Microsoft Azure에서 외부 함수를 만들 준비를 돕기 위한 내용이에요.
Azure 함수의 가격 플랜 선택하기
Microsoft Azure에서 Azure Function(원격 서비스)은 Linux 호스트 또는 Windows 호스트에서 실행할 수 있어요. 현재 Azure는 Linux와 Windows 호스트에 대해 서로 다른 가격·인증 옵션 조합을 제공해요.
Azure Function을 Linux에서 실행할 계획이라면 유효한 Azure 가격 플랜과 인증 조합을 선택해야 해요:
-
Premium 또는 App Service 가격 플랜을 사용한다면:
-
Azure Portal의 Azure Functions 화면에 있는 Authentication/Authorization 탭에서 Azure AD(Active Directory) 애플리케이션을 만들어요.
-
Azure Functions 서비스와의 인증에 Azure AD를 사용해요.
추가 세부 사항과 링크는 원격 서비스 만들기 지침에서 제공돼요.
-
-
Consumption 가격 플랜을 사용한다면:
-
Azure Portal에서 Azure AD 애플리케이션을 수동으로 만들어요. 추가 세부 사항은 원격 서비스 만들기 지침에서 제공돼요.
-
API Management 인스턴스에 validate-JWT 정책을 설정해요. 자세한 내용은 6단계: Portal에서 프록시 서비스용 Azure 보안 정책 만들기를 참고해요.
-
IP 주소 제한을 사용해서 원격 서비스가 API Management 서비스 인스턴스에서만 연결을 받아들이도록 제한해요. 자세한 내용은 Azure 함수 호출을 수락하는 IP 주소 제한(선택)을 참고해요.
-
필요한 정보를 추적하는 워크시트 만들기
Azure Portal에서 외부 함수를 만드는 작업을 완료할 때, 과정의 각 단계에서 특정 값(예: API Management service name)을 입력해야 해요. 입력한 값은 종종 이후 단계에서 다시 필요해요.
이 정보를 기록·추적하기 쉽도록 각 필수 값에 대한 필드가 있는 워크시트를 제공해요:
================================================================================
======================= Tracking Worksheet: Azure Portal =======================
================================================================================
****** Step 1: Azure Function (Remote Service) Info ****************************
Azure Function app name: _______________________________________________________
HTTP-Triggered Function name: __________________________________________________
Azure Function AD app registration name: _______________________________________
Azure Function App AD Application ID: __________________________________________
(The value for the Azure Function App AD Application ID above is the
"Application (client) ID" of the Azure AD app registration for the
Azure Function. The value is used to fill in the "azure_ad_application_id"
field in the CREATE API INTEGRATION command. This value is in the form of a
UUID (universally unique identifier), which contains hexadecimal digits and
dashes.)
****** Step 2: Azure API Management Service (Proxy Service) Info ***************
API Management service name: ___________________________________________________
API Management API URL suffix: _________________________________________________
****** Steps 3-5: API Integration & External Function Info *********************
API Integration Name: __________________________________________________________
AZURE_MULTI_TENANT_APP_NAME: ___________________________________________________
AZURE_CONSENT_URL: _____________________________________________________________
External Function Name: ________________________________________________________
ARM 템플릿 사용 준비하기
이 섹션들은 Snowflake가 제공하는 ARM 템플릿을 사용해 Microsoft Azure에서 외부 함수를 만들 준비를 돕기 위한 내용이에요.
템플릿 다운로드하기
템플릿은 Snowflake GitHub 저장소에서 다운로드할 수 있어요: https://github.com/Snowflake-Labs/sfguide-external-functions-examples/tree/main/DeploymentTemplates/azure/BasicSetup.json
템플릿을 사용하려면 먼저 Azure Portal에 템플릿을 가져와야 해요. 템플릿 가져오기 세부 사항은 템플릿 사용을 설명하는 주제에 포함돼 있어요.
Azure 함수의 가격 플랜 선택하기
Microsoft Azure에서 Azure Function(원격 서비스)은 Linux 호스트 또는 Windows 호스트에서 실행할 수 있어요. 현재 Azure는 Linux와 Windows 호스트에 대해 서로 다른 가격·인증 옵션 조합을 제공해요.
Snowflake가 제공하는 ARM 템플릿은 기본적으로 다음 가격 플랜과 인증 정보를 사용해요:
-
기본적으로 Azure Function에 Windows 호스트를 사용해요.
-
기본적으로 "Consumption" 가격 등급을 사용해요.
-
Azure Functions 앱을 만들고, 그 앱이 AD(Active Directory) 인증을 요구하도록 구성해요.
-
Snowflake가 Azure Function을 호출하도록 인가하는 JWT(JSON Web Token)를 검증하는 보안 정책을 만들어요. 이 보안 정책에는 필드 하나가 빠져 있다는 점을 기억하세요. 이 필드를 채우는 방법은 이후 지침에서 설명돼요.
Azure API management 인스턴스나 Azure Function을 다른 구성으로 실행할 계획이라면 템플릿을 업데이트해야 해요. 템플릿 업데이트에 대한 자세한 내용은 Microsoft 문서 "Automating resource deployment"(Azure Functions의 함수 앱용)를 참고해요.
필요한 정보를 추적하는 워크시트 만들기
Snowflake가 제공하는 ARM 템플릿을 사용해 외부 함수를 만드는 작업을 완료할 때, 과정의 각 단계에서 특정 값(예: API Management service name)을 입력해야 해요. 입력한 값은 종종 이후 단계에서 다시 필요해요.
이 정보를 기록·추적하기 쉽도록 각 필수 값에 대한 필드가 있는 워크시트를 제공해요:
주의
ARM 템플릿에 하드코딩된 정보는 값이 이미 채워져 있어요.
================================================================================
======================= Tracking Worksheet: ARM Template =======================
================================================================================
****** Step 1: Azure Function (Remote Service) Info ****************************
HTTP-Triggered Function name: __________________ echo __________________________
Azure Function AD Application ID: ______________________________________________
(The value for the Azure Function AD Application ID above is the
"Application (client) ID" of the Azure AD app registration for the
Azure Function. The value is used to fill in the "azure_ad_application_id"
field in the CREATE API INTEGRATION command. This value is in the form of a
UUID (universally unique identifier), which contains hexadecimal digits and
dashes.)
****** Step 2: Azure API Management Service (Proxy Service) Info ***************
API Management service name: ___________________________________________________
API Management URL: ____________________________________________________________
Azure Function HTTP Trigger URL: _______________________________________________
API Management API URL suffix: _________________________________________________
****** Steps 3-5: API Integration & External Function Info *********************
API Integration Name: __________________________________________________________
AZURE_MULTI_TENANT_APP_NAME: ___________________________________________________
AZURE_CONSENT_URL: _____________________________________________________________
External Function Name: ________________________________________________________
다음 단계
- Azure Portal: 1단계: Portal에서 원격 서비스(Azure 함수) 만들기
- ARM 템플릿: 1단계: Portal에서 Azure functions 앱용 Azure AD 앱 만들기