ステップ1: ポータルでリモートサービスを作成する(Azure Function)¶
このトピックでは、外部関数のリモートサービスとして使用するAzure Functionを作成するための詳細な手順について説明します。
このトピックの内容:
前のステップ¶
Azure Functionsアプリを作成する¶
リモートサービスを作成するには、複数の方法があります。このセクションでは、 JavaScript 関数として実装されるリモートサービスを作成する方法を示します。
この外部関数は 同期性 です。 非同期性 の外部関数の作成については、 Azureでの非同期関数の作成 をご参照ください。
後で作成する関数のコンテナーとして機能するAzure Functionsアプリを作成します。
まだログインしていない場合は、Azure Portalにログインします。
Microsoftのドキュメント Azure Functionsアプリ の手順に従って、Azure Functionsアプリを作成します。
これらの手順に従うときは、次の点に注意してください。
Function App Name フィールドに名前を入力するときは、追跡ワークシートの
Azure Function app name
フィールドにも名前を記録します。Publish の方法を選択するように求められた場合は、 Code を選択します。
同じリソースグループに複数のアプリを作成する場合、いくつかの制限が適用されます。詳細については、Microsoftのドキュメント Azureアプリサービス を参照してください。
Snowflakeは、Node.jsでサンプルの「エコー」関数を提供します。このサンプル関数を使用して開始する場合は、次のようにします。
Runtime stack
を求められたら、Node.jsを選択します。Node.jsのバージョンを尋ねられたら、バージョン12を選択します。
関数を実行するOSを尋ねられたら、「Windows」または「Linux」を選択します。
デモ機能のみを作成する場合、Snowflakeは「Windows」を選択することをお勧めします。
Linux関数アプリはAzure Portalで編集できません。ユーザーは、Visual Studio Codeインターフェイスを介してコードを公開する必要があります。
Microsoft WindowsではなくLinuxでAzure Functionを実行する場合は、Microsoftのドキュメント Azure Functions を参照してください。
Azure Functionsの「従量課金」プランを使用している場合、LinuxではAzure AD認証を使用できません。Azure ADで認証するには、「App Service」料金プランまたは「Premium」料金プランを使用する必要があります。
詳細については、Microsoftのドキュメント Azure AD をご参照ください。
HTTPでトリガーされるAzure Functionを作成する¶
Azure Functionsアプリ(コンテナー)を作成した後、そのコンテナーにAzure Functionを作成する必要があります。この関数はリモートサービスとして作動します。
Microsoftでは、Azure Functionをさまざまな方法で呼び出す(「トリガーする」)ことができます。Snowflake外部関数はHTTP POSTコマンドを介してリモートサービスを呼び出すため、作成するAzure Functionは「HTTP によってトリガーされる関数」である必要があります。
Tip
Microsoftが提供する手順を使用して、HTTPでトリガーされる関数を作成できます。
ただし、Snowflakeは、追加の詳細とサンプルコードを含むカスタム手順を提供し、Microsoftとは異なる認証レベルを提案します。Microsoftの指示の代わりに、カスタムの指示を使用することをお勧めします。
関数を作成する¶
このセクションで説明されているタスクを実行するには、Azure Portalの Function App 画面が表示されている必要があります。Azure Functionsアプリの名前は通常、画面の左上隅の近くに表示されます。
HTTPでトリガーされる関数を作成するには:
左側のメニューツリーで、 Functions というタイトルのセクションを探します。そのセクションで、 Functions というラベルの付いた項目をクリックして関数を追加します。
+ Add ボタンをクリックします。
右側の潜在的なトリガーのリストから HTTP trigger を選択します。
HTTP でトリガーされる関数に使用する名前を入力します。
この名前を追跡ワークシートの
HTTP-Triggered Function name
フィールドに記録します。Authorization level を入力します。
Snowflakeは、認証レベルとして Function を選択することをお勧めします。
可能な認証レベルの詳細については、 HTTPによってトリガーされた関数 をご参照ください。
Add というタイトルのボタンをクリックします。
これにより、関数名とその下に Function という単語が表示された画面に移動します。
左側のツリーメニューで、 Code + Test をクリックします。
デフォルトのコードを独自のコードに置き換えます。
JavaScript「エコー」関数のサンプルコードを以下に示します。
この関数は各行を読み取り、その行を出力(結果)にコピーします。行番号も出力に含まれます。出力は、マルチレベルディクショナリの一部として返されます。
この関数は、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" ] ] ] }
フォーマットは上記と異なる場合があることに注意してください。