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

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

このトピックの内容:

前のステップ

Azureの外部関数の計画

Azure Functionsアプリを作成する

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

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

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

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

  2. 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でトリガーされる関数を作成するには:

  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."
           };
       }
    };
    
    Copy
  9. コードの上にある Save ボタンをクリックします。

関数をテストする

作成したHTTPによってトリガーされるAzure関数をテストするには、次のサンプルデータを Body フィールドに貼り付けて、 Test/Run ボタンをクリックします。

{
    "data": [ [ 0, 43, "page" ], [ 1, 42, "life, the universe, and everything" ] ]
}
Copy

出力の内容は次のようになります。

{ "data":
    [
        [ 0, [ 0, 43, "page" ] ],
        [ 1, [ 1, 42, "life, the universe, and everything" ]  ]
    ]
}
Copy

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

Azure Functionsアプリの認証要件を設定する

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

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

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

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

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

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

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

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

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

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

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

注釈

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

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

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

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

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

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

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

  3. Identity provider ドロップダウンメニューで、 Microsoft を選択します。

  4. App registration type には、 Create new app registration を選択します。

  5. Name フィールドに、アプリの名前を入力します。

  6. Supported account types には、 Current tenant - Single tenant を選択します。

  7. Restrict access には、 Require authentication を選択します。

  8. Unauthenticated requests には、 HTTP 401 Unauthorized を選択します。

  9. Next: Permissions をクリックします。権限を確認します。

  10. Add をクリックします。新しいAzure AD アプリケーションが作成され、アプリケーションページが表示されます。

  11. アプリケーションの名前を示すリンクをクリックして、Azure AD アプリケーションのページに移動します。

  12. Application (client) ID フィールドを探します。

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

    重要

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

次のステップ

ステップ2: ポータルでプロキシサービス(Azure API Management Service)を作成する