Azureでカスタマイズ可能な外部関数の作成

このドキュメントでは、Microsoft Azureで外部関数を作成する方法の1つを示しています。

これらの手順では、Microsoft Azureの管理に精通していることを前提としています。これらの手順では、実行する必要のある一般的な手順について説明しますが、詳細が変更される可能性があるため、AzurePortalのユーザーインターフェイスについては詳しく説明しません。

このトピックの内容:

前提条件

必須:

  • Azure AD (Active Directory)テナント。

  • そのAzure AD テナントのアカウント。アカウントには、次の権限が必要です。

    • Azure Functionアプリの作成。

    • Azure API Managementサービスエンドポイントの作成。

    • Azure AD アプリケーションの登録。

  • LinuxでAzure Functionをリモートサービスとして使用する場合は、認証とAzureの料金プランの有効な組み合わせを選択する必要があります。

    • プレミアムまたはアプリサービスの料金プランを使用する場合は、Azureの Authentication/Authorization タブからAzure AD アプリケーションを作成し、Azure Functionサービスでの認証にAzure AD を使用できます。

    • 従量課金プランを使用する場合は、次のようにします。

Azureにおける外部関数の作成準備

次の情報をすでに入手している必要があります。

Azure AD Tenant ID: _____________________________________

    This is a UUID.

Azure AD テナント ID をまだ知らない場合は、次の手順で見つけることができます。

  1. Azure portalにログインします(http://portal.azure.com)。

  2. ページ上部付近にある「Azureサービス」アイコンで、「Azure ActiveDirectory」をクリックします。

  3. 左側のメニューで、 Manage というタイトルのセクションを探し、その下の Properties をクリックします。

    Azure AD テナント ID が、テナント ID フィールドに表示されます。

外部関数を作成するときは、入力した特定の情報(例: Azure Functionアプリ名)を記録して、後続のステップでその情報を使用できるようにする必要があります。以下のワークシートは、この情報を追跡するのに役立ちます。

==============================================================================================
=========================================== Worksheet ========================================
==============================================================================================

----------------- Information about the Azure Function (remote service) ----------------------

Azure Function app name................: _________________________________________

HTTP-Triggered Function name...........: _________________________________________

Azure Function AD app registration name: _________________________________________

Azure Function AD Application ID.......: _________________________________________

    (This is the "Application (client) ID" of the Azure AD app registration for the Azure function, and
    is used to fill in the "azure_ad_application_id" field in the CREATE API INTEGRATION command.
    This is in the form of a UUID. See https://en.wikipedia.org/wiki/Universally_unique_identifier .)


------------ Information about the Azure API Management Service (proxy service) --------------

API Management service name......: __________________________________________

API Management API URL suffix....: __________________________________________


---------------- Snowflake API Integration and External Function Information -----------------

API Integration Name.............: _______________________________________________

AZURE_MULTI_TENANT_APP_NAME......: _______________________________________________

AZURE_CONSENT_URL................: _______________________________________________

External Function Name...........: _______________________________________________

External Function Name.....: _______________________________________________

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

このチュートリアルでは、リモートサービスがAzure Functionとして実装されています。

Azure Functionアプリの作成

最初のステップは、後で作成する関数のコンテナーとして機能するAzure Functionアプリを作成することです。

Microsoftの手順に従って、関数アプリを作成できます(これらの手順へのリンクは以下)。これらの手順に従うときは、次の点に注意してください。

  • 「関数アプリ名」フィールドに入力するときは、上のワークシートの「Azure Functionアプリ名」フィールドにその名前を記録します。

  • 同じリソースグループに複数のアプリを作成する場合、いくつかの制限が適用されます。詳細については、以下をご参照ください。

    https://docs.microsoft.com/en-us/azure/app-service/containers/app-service-linux-intro#limitations

  • Snowflakeは、Node.jsでサンプルの「エコー」関数を提供します。このサンプル関数を使用して開始する場合は、次のようにします。

    • Runtime stack を求められたら、Node.jsを選択します。

    • Node.jsのバージョンを尋ねられたら、バージョン12を選択します。

    • 関数を実行する OS を尋ねられたら、「Windows」または「Linux」を選択します。

Azure関数アプリを作成するためのMicrosoftの手順は次のとおりです。

HTTP でトリガーされる関数の作成

Azure Functionアプリ(コンテナー)を作成した後、そのコンテナーにAzure Functionを作成する必要があります。この関数はリモートサービスとして作動します。

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

Microsoftは、 HTTP でトリガーされる関数を作成する方法をここに文書化しています。

以下のSnowflakeの手順は似ていますが、追加の詳細とサンプルコードが含まれており、Microsoftが提案するものとは異なる認証レベルを提案しています。

以下の手順を実行する前に、「関数アプリ」画面を開いている必要があります。Azure Functionアプリの名前は通常、画面の左上隅の近くに表示されます。

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

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

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

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

    この名前を「HTTP-トリガーされた関数名」というタイトルのワークシートフィールドに記録します。

  5. Authorization level を入力します。

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

    可能な認証レベルの詳細については、https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook-trigger?tabs=csharp#configurationをご参照ください。

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

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

  7. 左側のツリーメニューで、「コード+テスト」をクリックします。

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

    これはサンプルの JavaScript 「echo」関数で、渡された行を単純に返します。

    この関数は各行を読み取り、その行を出力(結果)にコピーします。行番号も出力に含まれます。出力は、マルチレベルディクショナリの一部として返されます。

    通常、関数は 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 というタイトルのボタンをクリックします。

  10. 「テスト/実行」ボタンをクリックしてコードをテストすることにより、Azure関数をテストできます。

    テストにはペイロード(データ)が必要です。サンプルペイロードは以下のとおりです。

    {
         "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 クライアント資格情報付与フローを使用します。

(クライアント資格情報の付与フローの詳細については、 https://docs.microsoft.com/en-us/azure/active-directory/azuread-dev/v1-oauth2-client-creds-grant-flow を参照。)

このクライアント資格情報フローには、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以外のリモートサービスを使用している場合は、「アプリの登録」ページを使用して、リモートサービスの新しいAzure AD アプリ登録を作成します。アプリ登録の詳細については、Microsoftのドキュメントをご参照ください。

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

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

    左側の余白に「開発者」メニュー(「コード+テスト」、「統合」など)が表示され、画面の下部にスクロールバーがある場合は、スクロールバーを左にスライドを試み、 Function App または「アプリサービス」セクションに戻り、 Settings を探してください。

  2. App Service Authentication というタイトルのボタンを見つけて、 Off から On に変更します。

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

  3. 「リクエストが認証されていない場合に実行するアクション」というタイトルのドロップダウンメニューを見つけて、「Azure ActiveDirectoryでログイン」の値を選択します。

  4. 「認証プロバイダー」で、「Azure ActiveDirectory」を選択します。

次のセクションに進んで、Azure Active Directory(AD)を介した認証を構成します。

Azure ActiveDirectoryを介した認証

この時点で、「Azure ActiveDirectory設定」画面が表示されているはずです。

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

  2. Azure FunctionアプリのAzure AD アプリ登録を作成するには、次のステップに従います。

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

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

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

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

    3. ウィンドウの左下にある OK ボタンをクリックします。これにより、Azure AD アプリの登録が作成され、「AppServiceの認証/承認」画面に戻ります。

    4. App Service Authentication という名前のボタンが On であることを確認します。

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

    前述の手順のほとんどは、Azureのドキュメントにも記載されており、詳細については以下をご参照ください。

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

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

    これが表示されない場合は、画面上部のMicrosoftAzure検索ウィンドウで「アプリの登録」を検索してください。

    これで、「アプリの登録」画面が表示されます。

    「すべてのアプリケーション」というタイトルのタブと、「所有するアプリケーション」というタイトルのタブの2つが表示されます。

  2. まだ選択されていない場合は、「すべてのアプリケーション」タブを選択します。

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

    注釈

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

    これにより、「アプリの登録」画面が表示されます。

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

  5. 「アプリケーション(クライアント) ID」という名前のフィールドを見つけます。

    これをワークシートの「Azure Functionアプリ AD アプリケーション ID」という名前のフィールドに記録します。(Azure AD アプリケーション名ではなく、必ず ID をコピーしてください。ID には UUID が含まれている必要があります。)

ステップ2: プロキシサービス(Azure API Managementサービス)を作成して構成する

Snowflakeは、データ(HTTP POST リクエスト)をリモートサービス(例: Azure Function)に直接送信しません。代わりに、Snowflakeは、Snowflakeからリモートサービスにデータを中継し、リモートサービスからSnowflakeにデータを中継するプロキシサービスにデータを送信します。

Azureでは、Snowflake外部関数がプロキシサービスとしてAzure API Managementをサポートしています。

API 管理サービスの作成

API 管理サービスを作成するには、Microsoftの手順に従います(手順へのリンクは以下)。

これらの手順を実行するときは、次のことを忘れないでください。

  • 上記のワークシートに、 API Managementサービス名( Resource name というタイトルの場合あり)を「API Managementサービス名」として記録します。

API Managementサービスを作成するためのMicrosoftの手順は次のとおりです。

API 管理サービスの導入には、30分以上かかる場合があります。展開が完了すると、「展開が完了しました」のようなメッセージが表示されます。

展開が完了したら、 Go to resource ボタンをクリックします。

Azure Functionを含む API のインポート

API Managementサービス(プロキシサービス)を作成したら、次のステップで、その API Managementサービスを介して呼び出す APIs (関数)を含むAzure Functionアプリをインポートして公開します。

  1. Azure Functionをインポートして公開するためのMicrosoftの手順に従ってください(手順へのリンクは以下)。

    これらの命令を実行するときは、次の点に注意してください。

    • これらの手順の1つでは、 Product のオプションを指定する必要があります。このデモでは、 Unlimited ではなく Starter を選択します。(実稼働システムの場合は、選択方法が異なる場合あり。)

    • ワークシートに次の値を記録します。

      • 上記のワークシートの「API 管理 API URL サフィックス」セクションに API URL suffix を記録します。

    以下は、Microsoftの手順へのリンクです。このページには、 APIs のインポートだけでなく、他のタスクの手順も含まれています。このデモでは、通常、Azure Functionアプリを新しい API としてインポートするための手順のみが必要です。

    Azureのドキュメントに記載されているステップを完了してAzure Functionアプリをインポートすると、 API Management service ページに戻るはずです。

  2. Settings タブで、 Subscription Required チェックボックスにチェックマークが付いている場合は、サブスクリプションを必要するとき以外、チェックを外します。

    Subscription セクションが表示されない場合は、下にスクロール。)

  3. Save ボタンをクリックします。

注釈

Azure API Managementサービスでセキュリティポリシーを設定 する必要があります。今ここでセキュリティポリシーを設定するか、Azure API Managementサービスでセキュリティポリシーを設定する前に、まず外部関数の作成を完了し、外部関数のサニティテストを実行します。デバッグを簡素化するために、これらの手順では最初に外部関数の作成とサニティテストを終了します。

ステップ3:Snowflakeで API 統合オブジェクトを作成する

前提条件

次の点に注意してください。

  • ワークシートからのAzure関数アプリ AD アプリケーション ID。

  • Azure AD テナント ID。(テナントIDを見つけるための手順は、 Azureにおける外部関数の作成準備 というタイトルのセクションにあります。)

CREATE API INTEGRATION ステートメントを作成します。

  1. Snowflakeウェブインターフェイスのセッションを開きます(まだ開いていない場合)。

  2. ACCOUNTADMIN 権限を持つSnowflakeロールまたは CREATE INTEGRATION 権限を持つロールを使用します。次に例を示します。

    use role accountadmin;
    
  3. CREATE API INTEGRATION コマンドを入力して、 API 統合を作成します。コマンドは次のようになります。

    create or replace api integration <integration_name>
        api_provider = azure_api_management
        azure_tenant_id = '<tenant_id>'
        azure_ad_application_id = '<azure_application_id>'
        api_allowed_prefixes = ('<url>')
        enabled = true;
    

    統合名

    この名前は オブジェクト識別子 のルールに従う必要があります。

    テナントID

    Azure AD テナント ID。

    別の方法として、ドメイン(例: my_company.onmicrosoft.com)を使用できます。

    AzureアプリケーションID

    これをワークシートのAzure Functionアプリ AD アプリケーション ID に設定します。

    APIが許可するプレフィックス

    このフィールドでは、このAPI統合を適用できるURLsを制限できます。

    通常、このフィールドはプロキシサービスの URL を保持します(例:Azure API Managementサービスの URL)。これをさらに絞り込むために、 API 管理 API URL サフィックスを追加できます。API 管理 API URL サフィックスを含めると、 api_allowed_prefixes フィールドの URL は次のようになります。

    https://<api-management-service-name>.azure-api.net/<api_url_suffix>

    例:

    これは、インポートした API の API Managementサービス Settings タブのベース URL およびサフィックスと一致する必要があります。都合がよければそこからコピーします。

    詳細については、 CREATE API INTEGRATION をご参照ください。

  4. 「API 統合名」というタイトルのワークシートスロットに、作成した API 統合の名前を記録します。後で CREATE EXTERNAL FUNCTION コマンドを実行するときに、 API 統合名が必要になります。

  5. 上で入力した CREATE API INTEGRATION コマンドを実行します。

ステップ5: Snowflakeに外部関数を作成する

Snowflake内から、コマンド CREATE EXTERNAL FUNCTION を実行します。コマンドは次のようになります。

create or replace external function <function_name>(<parameters>)
    returns variant
    api_integration = <api_integration_name>
    as '<invocation_URL>'
    ;

関数名

関数の名前。この名前は オブジェクト識別子 のルールに従う必要があります。

パラメーター

関数のパラメーター(ある場合)。パラメーターは、リモートサービス(例: Azure Function)のパラメーターに対応している必要があります。パラメーター名は一致する必要はありませんが、データ型には互換性が必要です。

Azure Functionが上記のサンプル JavaScript コードを使用する場合、パラメーターは INTEGER と VARCHAR です。

API統合名

ワークシートの「API統合名」フィールドに以前に記録したAPI統合名。

呼び出しURL

これは、Snowflakeがリモートサービスを呼び出すために HTTP POST コマンドを送信する URL です。プロキシサービスがAzure API Managementサービスで、リモートサービスがAzure Functionである場合、 URL は次のようになります。

https://<API_Management_service_name>.azure-api.net/<api_url_suffix>/<http_triggered_function_name>

条件:

API URLサフィックス

ワークシートからのAPI Management API URLサフィックス。

httpによりトリガーされた関数名

ワークシートからHTTPでトリガーされた関数名。

ワークシート内の「外部関数名」というタイトルのスロットに、作成した外部関数の名前を記録します。

ステップ6:外部関数をテストする

外部関数を呼び出してテストします。たとえば、次のような SQL コマンドを実行します。

select my_external_function(42);

戻り値は、次のようになっている必要があります。

[0, 42]

ここで、 42 は戻り値、 0 は戻り値の行番号です。

ステップ7: Azure API Managementサービス(プロキシサービス)でセキュリティポリシーを設定する

前のステップにより、Snowflakeだけでなく、Azure AD テナントにあるアプリケーションや、 Azure AD テナントでサービスプリンシパルがあるアプリケーションなどにより、インポートした APIs (つまりAzure Function)を呼び出せるようになります。SnowflakeのみによりAzure Functionを呼び出すことを許可する場合は、追加の認証ステップであるトークンの検証を強制する必要があります。

Snowflakeが API Managementサービスにアクセスしようとすると、SnowflakeはAzure AD から取得した JWT アクセストークンを提示します。API Managementサービスは、 JWT を検証するか、検証せずにパススルーすることができます。トークンを検証するために API Managementサービスを要求するには、トークンを検証するためのルールを指定するvalidate-JWT ポリシーを追加します。

注釈

validate-JWT ポリシーでロールベースの検証を使用する場合は、以下のリンクに従って、Snowflakeサービスプリンシパルにロールを割り当ててください。

SnowflakeがAzure Functionを呼び出すことができることを指定するvalidate-JWT ポリシーの作成

このセクションでは、SnowflakeがAzure Functionを呼び出すことを許可する JSON ウェブトークン(JWT)を検証するためのポリシーを指定する方法を示します。検証ポリシー(「validate-JWT ポリシー」)は、 JWT の次の2つの要求を検証します。

  • Snowflakeサービスのプリンシパルアプリケーション ID (「リクエスター AppID」または単に「appid」)。

  • Azure Functionのターゲットアプリケーションアプリ ID (「オーディエンス ID」または単に「aud」)。

Azure ActiveDirectoryによって発行された JSON ウェブトークン(JWTs)の要求の詳細については、以下をご参照ください。

次のステップでは、インポートされた API により JSON ウェブトークンを使用するように構成します。

  1. 「API Managementサービス」画面に移動します。

  2. API Managementサービスを選択します。

  3. 左側の列で「APIs」セクションを見つけ、その下の「APIs」オプションをクリックします。

  4. 「すべての APIs」を含む列で、セキュリティポリシーを追加する API Managementサービスの名前をクリックします。

  5. 「インバウンド処理」を探します。

    1. + Add policy をクリックします。

    2. validate-jwt をクリックします。

    3. Header name に値 Authorization を入力します。

    4. Azure関数にアクセスするために、Snowflakeによって提供される JWT (JSON ウェブトークン)の検証を追加します。

      1. Required claims を探し、 + Add claim をクリックします。

      2. Name フィールドに「aud」(「audience」の略)と入力します。

      3. 必要な要求の中で Values を探し、 +Add value をクリックします。

        コピーした UUID を CREATE API INTEGRATION コマンドのAzure ADアプリケーション IDフィールドに追加します。これは、ワークシートの「Azure関数アプリ AD アプリケーション ID」フィールドに記録されます。

    5. Snowflakeに対する個別の「要求」を追加します。

      1. + Add claim をもう一度クリックします。

      2. Name フィールドにリテラル文字列「appid」と入力します。

      3. 要求の中で + Add value をクリックして、SnowflakeアプリIDを追加します。

        SnowflakeアプリIDをまだお持ちでない場合は、次のステップを実行して取得できます。

        1. ワークシートで、前に入力した AZURE_MULTI_TENANT_APP_NAME を見つけます。

        2. Azure Portalの検索ボックスで、 Enterprise Applications を探します。

          これにより、 Enterprise applications | All applications 画面が表示されます。

        3. その画面で、 AZURE_MULTI_TENANT_APP_NAME を検索します。

          検索ボックスには明確なラベルがありません。ラベルの ない 広いフィールドを探します。

          AZURE_MULTI_TENANT_APP_NAME に完全に一致するものが見つからない場合は、この名前の最初の数文字のみを使用して再度検索します(名前にアンダースコアが含まれている場合は、アンダースコアまたはアンダースコアの後の文字を含めないこと)。

        1. アプリケーション ID (UUID の形式)を Values フィールドにコピーします。

  6. 以下を Open ID URLs に貼り付けます。

    https://login.microsoftonline.com/<テナントID>/.well-known/openid-configuration

    テナント ID をワークシートのすぐ上の Azureにおける外部関数の作成準備 というタイトルのセクションに記録した、Azure AD テナント ID に置き換えます。

  7. Save をクリックします。

  8. 外部関数を再度呼び出して、変更をテストします。

Azure Function(リモートサービス)呼び出しが受け入れられる IP アドレスの制限(オプション)

validate-JWT ポリシーの指定(またはロールベースの認証の使用)に加えて、 IP アドレス制限を追加して、 API Managementサービスの IP のみにAzure Functionを含むAzure Functionアプリへのアクセスを許可すると、セキュリティをさらに強化できます。IP アドレスの制限については、以下をご参照ください。

トラブルシューティング

このセクションには、Azure固有のトラブルシューティング情報が含まれています。

一般的なトラブルシューティング情報については、 一般的な外部関数のトラブルシューティングドキュメント をご参照ください。

タイムアウト

タイムアウトの原因には多くの可能性が考えられます。Azureで考えられる原因の1つは、Azure Functionアプリが適切にスケーリングするように記述されていないことです。 スケーラブルな関数を作成するためのAzureガイドライン に従っていることを確認してください。

スケーラビリティとパフォーマンスの問題のトラブルシューティングに関する詳細については、 一般的な外部関数のトラブルシューティングドキュメント をご参照ください。

外部関数 <関数名> のリクエストに失敗しました。エラー:401 '{「ステータスコード」:401、「メッセージ」:「サブスクリプションキーがないため、アクセスが拒否されました。API にリクエストを送信するときは、必ずサブスクリプションキーを含めてください。」}'

API Managementサービスのサブスクリプション要件をオフにする必要がある場合があります。

外部関数 <関数名> のリクエストに失敗しました。エラー:401 '{「ステータスコード」:401、「メッセージ」:「無効な JWT。」}'

  • Azure API Managementサービスでセキュリティポリシーの設定が完了していない可能性があります。たとえば、次のようになります。

    • JWT を作成しましたが、編集していません。

    • 必要な要求/値の1つ以上を省略しました。たとえば、Snowflakeの要求を指定したが、リモートサービス(Azure Function)は指定しなかった、またはその逆の場合があります。

  • 無効なオープン ID URL 使用した可能性があります。

SQL実行エラー: Azure Active Directoryアクセストークンの取得に失敗しました。

次の手順を試してください。

  • SnowflakeサービスプリンシパルがAzure ADテナントにアクセスできることを確認します。

  • テナントIDとAzure ADアプリケーションIDが正しいことを確認します。

    IDフィールドでは、先頭と後続の空白(空白など)を含む空白が重要であることに注意してください。誤った先頭または後続の空白を確認してください。

Authentication/Authorization メニューでAzure Functionの設定が変更できない

Azure Functionを作成するときに、 Authentication/Authorization メニューでその関数の設定を変更できない場合があります。これは、次の すべて が当てはまる場合に発生します。

  • Azure Functionが、Microsoft WindowsではなくLinuxで実行されている。

  • Azure FunctionにAzure AD 認証/承認を使用することを計画している。

  • Azureの「従量」課金ティア(「プレミアム」課金ティアではなく)を使用している。

Azure AD 認証は、Azure Function用のLinux従量課金プランでは使用できません。Azure AD で認証するには、App ServiceプランまたはPremiumプランを使用する必要があります。

考えられる解決策は次のとおりです。