1단계: Portal에서 원격 서비스(Azure 함수) 만들기¶
이 항목에서는 외부 함수에 대한 원격 서비스로 사용할 Azure 함수를 만들기 위한 자세한 지침을 제공합니다.
이 항목의 내용:
이전 단계¶
Azure Functions 앱 만들기¶
원격 서비스를 만들 수 있는 방법은 여러 가지가 있습니다. 이 섹션에서는 JavaScript 함수로 구현되는 원격 서비스를 만드는 방법을 보여줍니다.
이 외부 함수는 동기식입니다. 비동기 외부 함수를 만드는 방법에 대한 자세한 내용은 Azure에서 비동기 함수 만들기 를 참조하십시오.
나중에 만드는 함수의 컨테이너 역할을 할 Azure Functions 앱을 만듭니다.
Azure Portal에 아직 로그인하지 않았다면 로그인하십시오.
Microsoft 설명서: Azure Functions App 의 지침에 따라 Azure Functions 앱을 만듭니다.
지침을 따를 때 다음 사항을 기억하십시오.
Function App Name 필드에 이름을 입력할 때 추적 워크시트의
Azure Function app name
필드에도 해당 이름을 기록합니다.Publish 방법을 선택하라는 메시지가 표시되면 Code 를 선택합니다.
같은 리소스 그룹에서 여러 앱을 만들 때 몇 가지 제한 사항이 적용됩니다. 자세한 내용은 Microsoft 설명서: Azure 앱 서비스 를 참조하십시오.
Snowflake는 Node.js에서 샘플 “echo” 함수를 제공합니다. 이 샘플 함수를 사용하여 시작하는 방법은 다음과 같습니다.
Runtime stack
을 묻는 메시지가 표시되면 Node.js를 선택합니다.Node.js의 버전을 묻는 메시지가 표시되면 버전 12를 선택합니다.
함수를 실행할 OS를 묻는 메시지가 표시되면 “Windows” 또는 “Linux”를 선택합니다.
데모 함수만 만들 경우에는 “Windows”를 선택하는 것이 좋습니다.
Azure Portal에서는 Linux 함수 앱을 편집할 수 없습니다. 사용자는 Visual Studio Code 인터페이스를 통해 코드를 게시해야 합니다.
Microsoft Windows가 아닌 Linux에서 Azure 함수를 실행하려면 Microsoft 설명서: Azure 함수 를 참조하십시오.
Azure 함수에 대해 “사용” 가격 계획을 사용할 때는 Linux에서 Azure AD 인증을 사용할 수 없습니다. Azure AD에서 인증하려면 “앱 서비스” 가격 계획 또는 “프리미엄” 가격 계획을 사용해야 합니다.
자세한 내용은 Microsoft 설명서: Azure AD 를 참조하십시오.
HTTP로 트리거되는 Azure 함수 만들기¶
Azure Functions 앱(컨테이너)을 만든 후 컨테이너에 Azure Function을 만들어야 합니다. 이 함수는 원격 서비스로 작동합니다.
Microsoft는 Azure 함수를 다양한 방식으로 호출(“트리거”)할 수 있도록 허용합니다. Snowflake 외부 함수는 HTTP POST 명령을 통해 원격 서비스를 호출하므로, 사용자가 만드는 Azure 함수는 “HTTP로 트리거되는 함수”여야 합니다.
팁
Microsoft에서 제공하는 지침에 따라 HTTP로 트리거되는 함수를 만들 수 있습니다.
하지만 Snowflake는 추가 세부 정보와 샘플 코드를 포함한 사용자 지정 지침을 제공하고 Microsoft와 다른 인증 수준을 제안합니다. Microsoft의 지침 대신 사용자 지정 지침을 사용하는 것이 좋습니다.
함수 만들기¶
이 섹션에 설명된 작업을 수행하려면 Azure Portal의 Function App 화면에 있어야 합니다. Azure Functions 앱의 이름은 일반적으로 화면의 왼쪽 위 모서리 근처에 표시되어야 합니다.
HTTP로 트리거되는 함수를 만드는 방법은 다음과 같습니다.
왼쪽 메뉴 트리에서 Functions 라는 제목의 섹션을 찾습니다. 그 섹션에서 Functions 레이블이 지정된 항목을 클릭하여 함수를 추가합니다.
+ Add 버튼을 클릭합니다.
오른쪽의 잠재적 트리거 목록에서 HTTP trigger 를 선택합니다.
HTTP로 트리거되는 함수에 사용할 이름을 입력합니다.
추적 워크시트의
HTTP-Triggered Function name
필드에 이 이름을 기록합니다.Authorization level 을 입력합니다.
Function 을 인증 수준으로 선택하는 것이 좋습니다.
가능한 인증 수준에 대한 자세한 내용은 Microsoft 설명서: HTTP로 트리거되는 함수 를 참조하십시오.
Add 라는 제목의 버튼을 클릭합니다.
그러면 함수 이름과 그 아래에 Function 이라는 단어가 표시되는 화면으로 이동합니다.
왼쪽 트리 메뉴에서 Code + Test 를 클릭합니다.
기본 코드를 자체 코드로 바꿉니다.
아래에 JavaScript “echo” 함수의 샘플 코드가 제공됩니다.
이 함수는 각 행을 읽은 다음, 해당 행을 출력(결과)에 복사합니다. 행 번호도 출력에 포함됩니다. 출력은 다단계 사전의 일부로 반환됩니다.
이 함수는 Snowflake가 보내고 읽는 것과 똑같은 형식(JSON)의 데이터를 받고 반환합니다. 데이터 타입에 대한 자세한 내용은 원격 서비스 입력 및 출력 데이터 타입 을 참조하십시오.
일반적으로, 이 함수는 HTTP 코드 200을 반환합니다. 함수로 전달되는 행이 없을 경우(즉, 요청 본문이 비어 있는 경우) 이 함수는 오류 코드 400을 반환합니다.
module.exports = async function(context, request) { context.log('JavaScript HTTP trigger function processed a request.'); if (request.body) { var rows = request.body.data; var results = []; rows.forEach(row => { results.push([row[0], row]); }); results = {data: results} context.res = { status: 200, body: JSON.stringify(results) }; } else { context.res = { status: 400, body: "Please pass data in the request body." }; } };
코드 위의 Save 버튼을 클릭합니다.
함수 테스트하기¶
방금 만든 HTTP로 트리거되는 Azure 함수를 테스트하려면 다음 샘플 데이터를 Body 필드에 붙여넣고 Test/Run 버튼을 클릭하십시오.
{ "data": [ [ 0, 43, "page" ], [ 1, 42, "life, the universe, and everything" ] ] }
출력 내용은 다음과 비슷해야 합니다.
{ "data": [ [ 0, [ 0, 43, "page" ] ], [ 1, [ 1, 42, "life, the universe, and everything" ] ] ] }
형식은 위에 표시된 것과 다를 수 있습니다.