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" ] ] ] }
형식은 위에 표시된 것과 다를 수 있습니다.