다음을 통해 공유


자습서: Python 콘솔 애플리케이션에서 사용자 데이터 함수 호출

Python의 콘솔 애플리케이션에서 패브릭 사용자 데이터 함수 항목을 호출하려면 실행해야 하는 함수 엔드포인트에 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. 관리 설정으로 돌아가서플랫폼>단일 페이지 애플리케이션 추가 >을 선택합니다.

  6. 로컬 개발 목적으로 리디렉션 URI 아래에 추가하고 http://localhost:3000 애플리케이션이 PKCE(코드 교환용 증명 키)를 사용하여 권한 부여 코드 흐름에 대해 사용하도록 설정되어 있는지 확인합니다. 구성 버튼을 선택하여 변경 내용을 저장합니다. 애플리케이션에서 원본 간 요청과 관련된 오류가 발생하는 경우 이전 단계에서 동일한 리디렉션 URI를 사용하여 모바일 및 데스크톱 애플리케이션 플랫폼을 추가합니다.

  7. 인증돌아가서 고급 설정 아래로 스크롤하고, 공용 클라이언트 흐름 허용아래에서 다음 모바일 및 데스크톱 흐름사용하도록 선택합니다.

콘솔 애플리케이션 만들기

  1. 해당 함수는 공개적으로 액세스 가능해야 합니다. 함수 탐색기에서 함수 이름을 마우스로 가리키고 나타나는 줄임표 아이콘(...)을 선택한 다음, 속성을 선택합니다. 열리는 속성 창에서 공용 액세스를 사용하도록 설정합니다. Python 애플리케이션에서 사용할 공용 URL도 기록해 두어야 합니다.

  2. Python 앱을 위한 새 폴더(예: my-data-app)를 만듭니다. 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 호출을 발행하여 호출할 수 있습니다. 함수 탐색기에서 호출하려는 함수를 선택하고 함수 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: 함수 실행 및 지원되는 값Succeeded의 결과는 , BadRequestFailedTimeout및 .ResponseTooLarge
  • 출력: 함수가 반환하는 출력 값입니다.
  • 오류: 오류가 캡처된 경우 각 오류의 이름, 오류 메시지 및 오류 속성이 포함된 목록이 반환됩니다.

응답 코드

해당 함수는 실행 결과로 다음 HTTP 코드를 반환합니다.

응답 코드 Message 설명
200 성공 요청이 성공했습니다.
400 잘못된 요청 요청이 잘못되었습니다. 이 응답은 입력 매개 변수 값, 데이터 형식 또는 이름이 없거나 잘못되었으므로 발생할 수 있습니다. 이 응답은 함수에 대한 공용 액세스가 해제되어 발생할 수도 있습니다.
403 금지 응답이 너무 커서 호출이 실패했습니다.
408 요청 시간 제한 요청이 실패했습니다. 실행에 200초 이상 걸렸기 때문입니다.
409 충돌 충돌하는 상태로 인해 요청을 완료할 수 없습니다. 이는 처리되지 않은 예외 또는 사용자 자격 증명 오류로 인해 발생할 수 있습니다.
422 잘못된 요청 함수에서 UserThrownError가 발생하여 요청이 실패했습니다.
500 내부 서버 오류 서비스의 내부 오류로 인해 요청이 실패했습니다.

디버깅 및 테스트

Python 디버거를 사용하여 Visual Studio Code에서 애플리케이션을 디버그합니다. 문제가 발생할 경우 디버깅을 위해 필요한 경우 중단점을 추가합니다. 자세히 알아보기

다음 단계