ステップ1: ポータルでリモートサービスを作成する(Azure Function)

このトピックでは、外部関数のリモートサービスとして使用するAzure Functionを作成するための詳細な手順について説明します。

このトピックの内容:

前のステップ

Azureの外部関数の計画

Azure Functionアプリを作成する

リモートサービスを作成するには、複数の方法があります。このセクションでは、 JavaScript 関数として実装されるリモートサービスを作成する方法を示します。

この外部関数は 同期性 です。 非同期性 の外部関数の作成については、 Azureでの非同期関数の作成 をご参照ください。

後で作成する関数のコンテナーとして機能するAzure Functionアプリを作成します。

  1. まだログインしていない場合は、Azure Portalにログインします。

  2. Microsoftのドキュメント Azure Functionアプリ の手順に従って、Azure Functionアプリを作成します。

    これらの手順に従うときは、次の点に注意してください。

    • Function App Name:extui: フィールドに名前を入力するときは、追跡ワークシートの「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 Functionアプリ(コンテナー)を作成した後、そのコンテナーにAzure Functionを作成する必要があります。この関数はリモートサービスとして作動します。

Microsoftでは、Azure Functionをさまざまな方法で呼び出す(「トリガーする」)ことができます。Snowflake外部関数はHTTP POSTコマンドを介してリモートサービスを呼び出すため、作成するAzure Functionは「HTTP によってトリガーされる関数」である必要があります。

ちなみに

Microsoftが提供する手順を使用して、HTTPでトリガーされる関数を作成できます。

ただし、Snowflakeは、追加の詳細とサンプルコードを含むカスタム手順を提供し、Microsoftとは異なる認証レベルを提案します。Microsoftの指示の代わりに、カスタムの指示を使用することをお勧めします。

関数を作成する

このセクションで説明されているタスクを実行するには、Azure Portalの Function App 画面が表示されている必要があります。Azure Functionアプリの名前は通常、画面の左上隅の近くに表示されます。

HTTPでトリガーされる関数を作成するには:

  1. 左側のメニューツリーで、 Functions というタイトルのセクションを探します。そのセクションで、 Functions というラベルの付いた項目をクリックして関数を追加します。

  2. + Add ボタンをクリックします。

  3. 右側の潜在的なトリガーのリストから HTTP trigger を選択します。

  4. HTTP でトリガーされる関数に使用する名前を入力します。

    この名前を、追跡ワークシートの「HTTP-Triggered Function name」フィールドに記録します。

  5. Authorization level を入力します。

    Snowflakeは、認証レベルとして Function を選択することをお勧めします。

    可能な認証レベルの詳細については、 HTTPによってトリガーされた関数 をご参照ください。

  6. Add というタイトルのボタンをクリックします。

    これにより、関数名とその下に Function という単語が表示された画面に移動します。

  7. 左側のツリーメニューで、 Code + Test をクリックします。

  8. デフォルトのコードを独自のコードに置き換えます。

    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."
           };
       }
    };
    
  9. コードの上にある 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" ]  ]
    ]
}

フォーマットは上記と異なる場合があることに注意してください。

Azure Functionアプリの認証要件の設定

外部関数が呼び出されると、Snowflakeは HTTP POST コマンドをプロキシサービス(例: Azure API Managementサービス)に送信し、プロキシサービスは POST をリモートサービス(例: Azure Function)に中継します。

これらの2つのステップにはそれぞれ認証要件が必要なため、通常は次のように指定します。

  • API Managementサービスを呼び出すために必要な認証。

  • Azure Functionを含むAzure Functionアプリで、関数を呼び出すために必要な認証。

このセクションでは、Azure Functionアプリの認証を要求する方法について説明します。API Managementサービスは後で作成され、その認証要件も後で指定します。

SnowflakeがAzure Functionアプリで認証する場合、SnowflakeはAzure ADでOAuthクライアント資格情報付与フローを使用します。

クライアント資格情報付与フローの詳細については、Microsoftのドキュメント クライアント資格情報 を参照してください。

このクライアント資格情報フローには、Azure Functionアプリを表すAzure ADアプリの登録が必要です。

このセクションには、Azure FunctionアプリのAzure ADアプリ登録を作成するための手順があります。たとえば、Azure AD認証を要求するようにAzure Functionアプリを設定できます。Azure AD を介して認証を構成するには、次を実行する必要があります。

  • Azure AD アプリ登録を作成します。これは、IDまたはリソース識別子(つまり、保護するもの)を表すAzure AD ベースのエンティティです。

  • Azure AD アプリの登録を、認証が必要なAzure Functionアプリに関連付けます。

注釈

Azure Functionの場合、Azure AD アプリの登録を作成する最も速い方法は、以下に説明するように、サービスに対してAzure AD 認証を有効にすることです。Azure Function以外のリモートサービスを使用している場合は、 App registrations ページを使用して、リモートサービスの新しいAzure ADアプリ登録を作成します。

アプリ登録の詳細については、Microsoftのドキュメントをご参照ください。

Azure Functionアプリのアプリサービス認証を有効にする

以下のステップを実行する前に、Azure Functionアプリの Function App 画面を開いている必要があります。

  1. 左側のメニューペインで、 Settings という名前のセクションを探し、 Authentication / Authorization をクリックします。

    左側の余白に Developer メニュー(Code + TestIntegration など)が表示され、画面の下部にスクロールバーがある場合は、スクロールバーを左にスライドを試み、 Function App または App Service セクションに戻り、 Settings を探してください。

  2. App Service Authentication ボタンを見つけて、 Off から On に変更します。

    この Authentication / Authorization ページで設定を変更できない場合は、トラブルシューティングのヒント Azure Functionの作成中に設定を変更できない をご参照ください。

  3. Action to take when request is not authenticated ドロップダウンメニューを見つけて、 Log in with Azure Active Directory を選択します。

  4. Authentication Providers で、まだ選択されていない場合は Azure Active Directory を選択します。

  5. Azure Active Directory をクリックすると、 Azure Active Directory Settings 画面に移動します。

Azure ADアプリを登録する

この時点で、 Azure Active Directory Settings 画面が表示されます。Azure FunctionアプリにADアプリを登録するには:

  1. 最初の Management mode ボタンを Off から Express または Advanced に変更します。以下の手順は、 Express を選択することを想定しています。

  2. 2番目の Management mode ボタンを見つけて、 Create New AD App または Select Existing AD App のいずれかを選択します。

    このデモでは、使用するAzure AD アプリがすでに登録がされている場合を除き、 Create New AD App を選択します。

  3. デフォルトでは、Azure AD アプリの登録名はAzure Functionのアプリ名と同じです。この名前が Create App フィールドに表示されます。必要に応じて、この名前を変更できます。

    追跡ワークシートの「Azure Function AD app registration name」フィールドに、Azure ADアプリ登録名を記録します。

  4. ウィンドウの左下にある OK ボタンをクリックします。これにより、Azure ADアプリの登録が作成され、 App Service Authentication / Authorization 画面に戻ります。

  5. App Service Authentication ボタンが On であることを確認します。

  6. メインペインの左上隅(メニューペインの右側)の近くにある Save ボタンをクリックします。

前述の手順のほとんどは、Microsoftのドキュメント 認証プロバイダーの構成 にも記載されています。

Azure ADアプリを確認します

Azure ADアプリが登録されたら、次のステップでアプリが App registrations の下にリストされていることを確認します。

  1. 新しいブラウザータブを開き、 http://portal.azure.com に移動して、 App registrations をクリックします。

    これが表示されない場合は、画面上部付近のMicrosoft Azure検索ウィンドウで App registrations を検索します。

    これで、 All applicationsOwned applications の2つのタブが表示されている App registrations 画面が表示されます。

  2. まだ選択されていない場合は、 All applications タブを選択します。

  3. Azure Functionアプリ用に作成したAzure AD アプリ登録の名前をクリックします。

    注釈

    検索バーを使用して、Azure AD アプリを名前で検索できます。これを実行するには、名前の 最初の 数文字を入力します。検索バーには、名前の先頭部分が入力されることを前提としています。関数名の指定された部分文字列のいずれでも検索できるわけではありません。

    これにより、 App registrations 画面に移動します。

  4. Azure FunctionアプリのAzure ADアプリを説明するアプリの登録画面に、Azure ADアプリの名前が表示されます。

  5. Application (client) ID フィールドを見つけます。

    このIDを追跡ワークシートの Azure Function App AD Application ID フィールドに記録します。

    重要

    Azure ADアプリケーション名ではなく、必ずIDをコピーしてください。IDにはUUIDが含まれている必要があります。