Azure Resource Managerテンプレートを使用したサンプル外部関数の作成

このドキュメントでは、Azure Resource Manager(ARM)テンプレートを使用して、Microsoft Azureでサンプルの外部関数を作成する方法を示します。

Snowflakeは、開始できるテンプレートを提供します。このテンプレートは、作成プロセスの詳細を非表示にし、一部の名前(例: トリガー名)と機能をハードコードします。独自のカスタム外部関数を作成する準備ができたら、テンプレートのコピーをカスタマイズするか、 Azureでカスタマイズ可能な外部関数の作成 のより柔軟な手順に従うことができます。

注釈

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

このトピックの内容:

こちらもご参照ください。

概要

外部関数を作成する際の2つの重要なステップは次のとおりです。

  • リモートサービス(例: Azure Function)を作成する。

  • プロキシサービス(Azure API Managementサービス)を作成して構成する。

Azure Resource Managerテンプレートは、前述のステップ両方を実行します。

テンプレートは次も実行します。

  • Azure Functionサービスに必要なストレージアカウントを作成する。

  • Azure API Managementサービスのセキュリティを強化するために、 API 管理インスタンスにvalidate-JWT ポリシーを追加する。ただし、使用する前に JWT ポリシーを手動で更新する必要があります。

Snowflakeからテンプレートをダウンロードするには、ブラウザーで次の場所をポイントします。

ワークシート

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

Snowflakeが提供するAzure Resource Managementテンプレートにハードコーディングされている情報については、すでに値は以下に入力されています。

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

Azure Tenant ID........................: _______________________________________

    This is a UUID.

    If you do not already know your Azure AD tenant ID, you can find it by doing the following:

    #. Log into the Azure portal (http://portal.azure.com).
    #. In the "Azure services" icons near the top of the page, click on Azure Active Directory.
    #. In the menu on the left-hand side, look for the section titled :extui:`Manage`,
       then click on :extui:`Properties` under that.

       The Azure AD tenant ID is displayed in the Tenant ID field.

    .. # The Azure AD Tenant ID is used in the azure_tenant_id clause in CREATE API INTEGRATION.


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

HTTP-Triggered Function name...........: __________________ echo ________________

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.)


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

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

API Management URL...............: __________________________________________

Azure Function HTTP Trigger URL..: __________________________________________

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.....: _______________________________________________

ステップ1: Azure Functionアプリ用のAzure AD アプリを作成する

  1. Azure Portalにログインします。

  2. App registrations ページを検索します。

  3. New registration をクリックすると、 Register an application 画面が表示されます。

  4. Azure AD アプリの一意の名前を入力します。

  5. 「Azure Function AD アプリの登録名」というタイトルのワークシートフィールドに、Azure AD アプリの名前を記録します。

  6. Supported account types の下で、 Accounts in this organizational directory only (Default Directory only - Single tenant) を選択します。

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

    これにより、 Home > App registrations 画面が表示され、新しく作成されたAzure AD アプリが表示されます。

  8. 上記のワークシート「Azure Function AD アプリケーション ID」フィールドに作成したAzure AD アプリの Application (client) AD を記録します。この ID は UUID の形式である必要があります。

ステップ2: テンプレートを使用して、Azure Functionと API Managementサービスを作成する

  1. Azure Portalに移動します。

  2. Azureの検索バーで、 Template を検索します。

  3. Services の下で、 Deploy a custom template をクリックします。

  4. Build your own template in the editor を選択します。

  5. Load file を選択します。

  6. テンプレートのコピーが含まれているディレクトリに移動し、そのテンプレートを選択します。

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

    これにより、 Custom deployment 画面が表示されます。

  8. 既存の(または新しい) Resource group を選択します。

    ちなみに

    このデモ専用に新しいリソースグループを作成する場合は、名前を記録して、後で削除できるようにすることをお勧めします。

  9. 適切な Region を選択します。

  10. API Management Service Name を入力します。

  11. 上記のワークシートの API Managementサービス名にある、「API Managementサービス名」を記録します。

  12. Function App Name フィールドに一意の名前を入力します。

  13. ワークシートの「Azure Functionアプリ名」フィールドに関数アプリ名を記録します。

  14. Publisher email フィールドにメールアドレスを入力します。(Microsoftは、API Managementサービスが作成された後に電子メールで通知します。)

  15. Azuread Application Id フィールドに、前に作成したAzure AD アプリケーションの ID を入力します。これは、ワークシートに記録した「Azure Function AD アプリケーション ID」です。

  16. Review + create をクリックします。

  17. Create をクリックします。

Azure Functionアプリと API Managementサービスの作成には、通常、約30分かかります。

ステップ3: API 統合と外部関数を作成する

リモートサービスとプロキシサービスの作成は完了したため、 API 統合と外部関数を作成する必要があります。その後、このページに戻ります。API 統合と外部関数を作成するには、API Managementサービスの URL が必要です。これは、以下のステップに従って取得できます。

この時点で、Azureポータルに「デプロイメントが完了しました」というメッセージが表示され、 Deployment name が表示されます。

  1. 左側の列の「出力」をクリックします。

  2. api Management URL をワークシートの「API Management URL」フィールドにコピーします。

  3. azure Function Http Trigger URL をワークシートの「Azure Function Httpトリガー URL」フィールドにコピーします。

API 統合と外部関数を作成すると、 api_allowed_prefixes の URL を求められます。プレフィックスとして「API Management URL」を使用できます(手順の別の場所で説明されている「API Management API URL サフィックス」の有無にかかわらず)。

外部関数を作成すると、呼び出し URL を求められます。Azure Function HTTP トリガー URL を呼び出し URL として使用できます。

上記の情報を使用して、以下のリンクのステップを実行します。

その後、このページに戻ります。

ステップ4: Azure API Managementサービス(プロキシサービス)のセキュリティポリシーを更新する

Snowflakeが提供するAzure Resource Managerテンプレートは、SnowflakeがAzure Functionを呼び出すことを認証する、JWT (JSON ウェブトークン)を検証するためのセキュリティポリシーを作成します。

ただし、セキュリティポリシーには、入力する必要のある1つのフィールドがありません。Azureポータルから、次のステップを実行します。

  1. 「API Managementサービス」を選択します。

  2. 作成した API Managementサービスインスタンスを見つけます。このインスタンスの名前は、ワークシートの「API Managementサービス名」フィールドに記録されます。

  3. API Managementサービスインスタンス名をクリックします。

  4. 「APIs」->「APIs」を選択します。

  5. 「すべての APIs」で、「ext-func-api」を選択します。

  6. POST echo を選択します。

  7. Inbound processing ボックスにあるボタン validate-JWT をクリックします。

    このボタンが表示されない場合は、下にスクロールしてください。

  8. 「SNOWFLAKE_SERVICE_PRINCIPAL_ID」を検索し、Snowflake Azure AD アプリケーション ID (「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 に完全に一致するものが見つからない場合は、この名前の最初の数文字のみを使用して再度検索します(名前にアンダースコアが含まれている場合は、アンダースコアまたはアンダースコアの後の文字を含めないこと)。

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

ステップ5: 関数を呼び出す

これらの指示 に従って、関数をテストします。

トラブルシューティング

リモートサービスエラーで外部関数 <外部関数名> の要求に失敗しました: 500

考えられる原因:

Azure AD アプリに間違ったオプションを選択した可能性があります。具体的には、正しいオプション Accounts in this organizational directory only (Default Directory only - Single tenant) ではなく、 Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox) を選択した可能性があります。

外部関数<関数名>のリクエストがリモートサービスエラーで失敗しました: 401 '{ "ステータスコード": 401, "メッセージ": "無効な JWT." }'

Azure Resource Managerテンプレートを使用している場合は、テンプレートが作成した JWT を更新していない可能性があります。セクション ステップ4: Azure API Managementサービス(プロキシサービス)のセキュリティポリシーを更新する には説明があります。