次の方法で共有


チュートリアル: Python コンソール アプリケーションからユーザー データ関数を呼び出す

Python でコンソール アプリケーションから Fabric ユーザー データ関数項目を呼び出すには、実行する必要がある関数エンドポイントに HTTP 要求を送信できます。 このクイック スタートでは、Visual Studio Code を使用して Python アプリを設定する方法について説明します。

前提条件

Microsoft Entra アプリを作成する

次の手順では、Microsoft Entra で ReactJS アプリケーションのサポートを構成する方法について説明します。

  1. クイック スタート: Microsoft ID プラットフォームにアプリケーションを登録する」で説明されている手順を使用してアプリケーションを登録します。

  2. Microsoft Entra アプリ アプリケーション (クライアント) IDディレクトリ (テナント) ID の値が [概要] ボックスに表示されます。 後で必要になるため、これらの値を記録します。

  3. [管理] リストで、[API 権限] を選択し、[権限を追加] します。

  4. PowerBI サービスを追加し、委任されたアクセス許可を選択し、UserDataFunction.Execute.All または項目を選択します。Execute.All アクセス許可。 管理者の同意が必要ないことを確認します。

  5. [管理] 設定に戻り、[認証] を選択>プラットフォーム>Single-page アプリケーションを追加します

  6. ローカル開発の目的で、http://localhost:3000 を追加し、Proof Key for Code Exchange (PKCE) を使用した認証コード フローに対してアプリケーションが有効になっていることを確認します。 [構成] ボタンを選択して、変更を保存します。 アプリケーションでクロスオリジン要求に関連するエラーが発生した場合は、前の手順で同じリダイレクト URI を使用 して Mobile アプリケーションとデスクトップ アプリケーション プラットフォームを追加します。

  7. 認証に戻り、下にスクロールして [詳細設定] を し、[パブリック クライアント フローのを許可 する] の下にある [はい] を選択 次のモバイル およびデスクトップ フローを有効にします。

コンソール アプリケーションを作成する

  1. この関数はパブリックにアクセスできる必要があります。 関数エクスプローラーで、関数の名前をポイントし、表示される省略記号アイコン (...) を選択して [プロパティ] を選択します。 開いた [プロパティ] ウィンドウで、[パブリック アクセス] を有効にします。 また、Python アプリケーションで使用するパブリック URL も書き留める必要があります。

  2. たとえば、my-data-app など、Python アプリ用の新しいフォルダーを作成します。 Visual Studio Code でフォルダーを開きます。

  3. Visual Studio Code で Python 仮想環境を設定します。 Visual Studio Code でローカル環境を作成するには、Ctrl + Shift + P キーを押してコマンド パレットを開き、[Python: 環境の作成] コマンドを検索して選択します。

    • このコマンドは、環境の種類の一覧を表示し、 venv を選択します。
    • Python インタープリター バージョン Python 3.11 を選択します。
  4. 次のコマンドを実行して、Visual Studio Code ターミナルで仮想環境をアクティブ化します。

    venv\Scripts\activate.bat
    
  5. 次に、コマンドを実行して、この例に必要な Python ライブラリをインストールします。

    pip install azure-identity, requests 
    
  6. app.py ファイルを作成し、コードを使用してユーザー データ関数項目を呼び出します。

    from azure.identity import InteractiveBrowserCredential
    import requests
    import json
    
    # Acquire a token
    # DO NOT USE IN PRODUCTION.
    # Below code to acquire token is to test the User data function endpoint and is for the purpose of development only.
    # For production, always register an application in a Microsoft Entra ID tenant and use the appropriate client_id and scopes.
    
    
    app = InteractiveBrowserCredential()
    scp = 'https://analysis.windows.net/powerbi/api/user_impersonation'
    result = app.get_token(scp)
    
    if not result.token:
        print('Error:', "Could not get access token")
    
    # Prepare headers
    headers = {
        'Authorization': f'Bearer {result.token}',
        'Content-Type': 'application/json'
    }
    
    FUNCTION_URL = '<REPLACE WITH USER DATA FUNCTION URL>'
    
    # Prepare the request data
    data = '{"name": "John"}' # JSON payload to send to the Azure Function
    headers = {
        #  "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json"
            }
    
    try:   
        # Call the user data function public URL 
        response = requests.post(FUNCTION_URL, json=data, headers=headers)
        response.raise_for_status()
        print(json.dumps(response.json()))
    except Exception as e:
        print({"error": str(e)}, 500)
    
    if __name__ == "__main__":
        app.run(debug=True)
    
    

    この例は、開発用途のみが想定されています。 運用環境のユース ケースでこのアプリケーションを使用する前に、Microsoft Entra ID 認証を使用するようにアプリケーションを更新してください。

外部アプリケーションからの関数の呼び出し

関数は、エンドポイント URL への REST 呼び出しを発行することによって呼び出すことができます。 関数エクスプローラーで呼び出す関数を選択し、[Copy Function URL] (関数 URL のコピー) を選択します。 [プロパティ] メニューから、外部でこの URL を使用する機能をオンまたはオフにすることもできます。

ブレークポイントを使用してローカルでデバッグする方法を示すスクリーンショット。

次に、アプリケーションでこの URL を使用して関数を呼び出します。 「アプリケーションからユーザー データ関数を呼び出す」を参照してください。

出力スキーマ

外部アプリケーションからユーザー データ関数を呼び出すと、出力スキーマの形式は次のようになります。

{
  "functionName": "hello_fabric",
  "invocationId": "1234567890", 
  "status": "Succeeded | BadRequest | Failed | Timeout | ResponseTooLarge",
  "output": /*shows the result of the function dependeing on the output type*/,
  "errors": [
     {
       "name": "Error name",
       "message": "Error message",
       "properties": {
          /*Key value pairs custom to error*/
       }
     },
  ]
}

次のプロパティが返されます。

  • functionName: 実行された関数の名前。
  • invocationId: 関数を実行するための呼び出し ID。
  • status: 関数の実行結果とサポートされる値は、 SucceededBadRequestFailedTimeout 、および ResponseTooLargeです。
  • output: 関数によって返される出力値。
  • errors: エラーがキャプチャされた場合、ここに、各エラーの名前、エラー メッセージ、エラー プロパティのリストが返されます。

応答コード

この関数は、実行の結果として次の HTTP コードを返します。

応答コード メッセージ 説明
200 Success 要求は成功しました。
400 正しくない要求 要求が無効でした。 この応答は、入力パラメーター値、データ型、または名前が見つからないか、正しくない可能性があります。 この応答は、関数のパブリック アクセスがオフになっている場合にも発生する可能性があります。
4:03 許可されていません 応答は大きすぎ、実行は失敗しました。
408 要求タイムアウト 実行が 200 秒を超えたため、要求は失敗しました。
409 葛藤 状態が競合しているため、要求を完了できませんでした。 これは、ハンドルされない例外またはユーザー資格情報のエラーが原因で発生する可能性があります。
422 正しくない要求 関数で UserThrownError が発生したため、要求は失敗しました。
500 内部サーバー エラー サービスの内部エラーが原因で要求が失敗しました。

デバッグおよびテスト

Python デバッガーを使用して Visual Studio Code でアプリケーションをデバッグします。 問題が発生した場合にデバッグで必要な場合は、ブレークポイントを追加します。 詳細情報

次のステップ