다음을 통해 공유


자습서: Azure Blob Storage를 입력으로 사용하는 Python 함수

이 자습서에서는 다음 작업을 완료하여 Azure Blob Storage를 입력으로 사용하여 Python 함수를 구성하는 방법에 대해 알아봅니다.

  • Visual Studio Code를 사용하여 Python 함수 프로젝트를 만듭니다.
  • Storage Blob 입력 함수 바인딩을 추가하도록 코드를 변경합니다.
  • Visual Studio Code를 사용하여 함수를 로컬로 실행합니다.
  • Azure CLI를 사용하여 서비스 커넥터로 Azure Function과 Storage Blob 간에 연결을 만듭니다.
  • Visual Studio를 사용하여 함수를 배포합니다.

이 자습서의 함수 프로젝트 구성 요소 개요:

프로젝트 구성 요소 선택/솔루션
원본 서비스 Azure 함수
대상 서비스 Azure Storage Blob
함수 바인딩 HTTP 트리거, Storage Blob을 입력으로 사용
로컬 프로젝트 인증 유형 연결 문자열
클라우드 함수 인증 유형 시스템이 할당한 관리 ID

Warning

사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 이 절차에서 설명된 인증 흐름은 다른 흐름에는 없는 위험을 전달하며, 애플리케이션에서 매우 높은 신뢰 수준을 요구합니다. 이 흐름은 관리 ID와 같은 보다 안전한 다른 흐름을 실행할 수 없는 경우에만 사용되어야 합니다.

필수 조건

Python 함수 프로젝트 만들기

자습서에 따라 로컬 Azure Functions 프로젝트를 만들고 프롬프트에서 다음 정보를 제공합니다.

프롬프트 선택 사항
언어 선택 Python을 선택합니다. (v1 프로그래밍 언어 모델)
가상 환경을 만들 Python 인터프리터 선택 선호하는 Python 인터프리터를 선택합니다. 옵션이 표시되지 않으면 Python 이진에 대한 전체 경로를 입력합니다.
프로젝트의 첫 번째 함수에 사용할 템플릿 선택 HTTP trigger을 선택합니다.
함수 이름 제공 BlobStorageInputFunc를 입력합니다.
권한 부여 수준 누구나 함수 엔드포인트를 호출할 수 있는 Anonymous를 선택합니다. 

HTTP 트리거를 사용하여 Python 함수 프로젝트를 만들었습니다.

Blob Storage 입력 바인딩 추가

바인딩 특성은 지정된 함수에 대한 function.json 파일에 정의되어 있습니다. 바인딩을 만들려면 함수 폴더의 function.json 파일을 마우스 오른쪽 단추로 클릭하고(macOS의 경우 Ctrl+ 클릭) 바인딩 추가...를 선택합니다. 프롬프트에 따라 새 바인딩에 대해 다음 바인딩 속성을 정의합니다.

prompt 설명
바인딩 방향 선택 in 바인딩은 입력 바인딩입니다.
...방향으로 바인딩 선택 Azure Blob Storage 바인딩은 Azure Storage Blob 바인딩입니다.
코드에서 이 바인딩을 식별하는 데 사용하는 이름 inputBlob 코드에서 참조되는 바인딩 매개 변수를 식별하는 이름입니다.
Blob을 읽을 스토리지 계정 내의 경로 testcontainer/test.txt 함수가 입력으로 읽은 Blob 경로입니다. 파일 콘텐츠가 Hello, World!test.txt라는 이름의 파일을 준비합니다. testcontainer 라는 이름의 컨테이너를 만들고 컨테이너에 파일을 업로드합니다.
"local.setting.json"에서 설정 선택 Create new local app settings 함수가 입력으로 읽는 스토리지 계정을 선택합니다. Visual Studio Code가 로컬 프로젝트 연결을 위한 연결 문자열을 검색합니다.

바인딩이 성공적으로 추가되었는지 확인하려면 다음을 수행합니다.

  1. BlobStorageInputFunc/function.json 파일을 열고 type: blobdirection: in이 적용된 새 바인딩이 이 파일에 추가되었는지 확인합니다.
  2. local.settings.json 파일을 열고 스토리지 계정 연결 문자열이 포함된 새 키-값 쌍 <your-storage-account-name>_STORAGE: <your-storage-account-connection-string>이 이 파일에 추가되었는지 확인합니다.

바인딩이 추가된 후 여기서 BlobStorageInputFunc/__init__.py를 Python 파일로 바꿔 바인딩을 사용하도록 함수 코드를 업데이트합니다.

import logging
import azure.functions as func

def main(req: func.HttpRequest, inputBlob: bytes) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    return func.HttpResponse('The triggered function executed successfully. And read blob content: {}'.format(inputBlob))

로컬에서 함수 실행

자습서에 따라 함수를 로컬로 실행하고 Blob 입력을 확인합니다.

  1. Storage에 연결하라는 메시지가 표시되면 Azure Function 리소스를 만들 때 사용한 스토리지 계정을 선택합니다. 이는 Azure Function 런타임의 내부 사용을 위한 것이며 입력에 사용하는 것과 반드시 동일하지 않아도 됩니다.
  2. 함수를 로컬로 시작하려면 <kbd>F5</kbd> 키를 누르거나 왼쪽 작업 표시줄에서 실행 및 디버그 아이콘을 선택합니다.
  3. 함수가 Blob을 읽을 수 있는지 확인하려면 Visual Studio Code WORKSPACE에서 함수의 Exucute Function Now...를 마우스 오른쪽 단추로 클릭하고 함수 응답을 확인합니다. 응답 메시지에는 Blob 파일의 콘텐츠가 포함되어야 합니다.

서비스 커넥터를 사용하여 연결 만들기

조금 전 프로젝트를 실행하고 함수를 로컬로 확인했으며 로컬 프로젝트는 연결 문자열을 사용하여 Storage Blob에 연결합니다.

이제 함수가 클라우드에 배포된 후 Blob을 읽을 수 있도록 Azure Function과 Azure Blob Storage 간의 연결을 구성하는 방법을 알아보겠습니다. 클라우드 환경에서는 시스템이 할당한 관리 ID를 사용하여 인증하는 방법을 보여줍니다.

  1. 로컬 프로젝트에서 function.json 파일을 열고 bindingsconnection 속성 값을 MyBlobInputConnection으로 변경합니다.
  2. 다음 Azure CLI 명령을 실행하여 Azure Function과 Azure Storage 간에 연결을 만듭니다.
az functionapp connection create storage-blob --source-id "<your-function-resource-id>" --target-id "<your-storage-blob-resource-id>" --system-identity --customized-keys AZURE_STORAGEBLOB_RESOURCEENDPOINT=MyBlobInputConnection__serviceUri
  • --source-id 형식: /subscriptions/{subscription}/resourceG roups/{source_resource_group}/providers/Microsoft.Web/sites/{site}
  • --target-id 형식: /subscriptions/{subscription}/resourceGroups/{target_resource_group}/providers/Microsoft.Storage/storageAccounts/{account}/blobServices/default

시스템이 할당한 관리 ID를 사용하여 서비스 커넥터로 Azure Function과 Azure Blob Storage 간에 연결을 만들었습니다.

서비스 커넥터는 함수 바인딩 런타임에서 스토리지에 연결하기 위해 사용하는 함수 앱 설정의 MyBlobInputConnection__serviceUri 변수를 구성하여 함수가 Blob Storage에서 데이터를 읽을 수 있도록 했습니다. 서비스 커넥터를 통해 Azure Functions가 서비스에 연결하는 방법에 대해 자세히 알아볼 수 있습니다.

Azure에 함수 배포

이제 Azure에 함수를 배포하고 Storage Blob 입력 바인딩이 작동하는지 확인할 수 있습니다.

  1. 자습서에 따라 함수를 Azure에 배포합니다.
  2. 함수가 Blob을 읽을 수 있는지 확인하려면 Visual Studio Code RESOURCES에서 함수의 Exucute Function Now...를 마우스 오른쪽 단추로 클릭하고 함수 응답을 확인합니다. 응답 메시지에는 Blob 파일의 콘텐츠가 포함되어야 합니다.

문제 해결

스토리지 호스트와 관련된 오류(예: No such host is known (<acount-name>.blob.core.windows.net:443))가 있는 경우 Azure Storage에 연결하는 데 사용하는 연결 문자열에 Blob 엔드포인트가 포함되어 있는지 확인해야 합니다. 그렇지 않은 경우 Azure Portal에서 Azure Storage로 이동하여 Access keys 블레이드에서 연결 문자열을 복사하고 값을 바꿉니다.

프로젝트를 로컬로 시작할 때 오류가 발생하면 local.settings.json 파일을 확인합니다.

클라우드에 함수를 배포할 때 오류가 발생하면(이 경우 함수 배포는 일반적으로 Syncing triggers에서 실패함) 함수의 앱 설정을 확인합니다.

리소스 정리

이 프로젝트를 계속 사용하지 않으려면 이전에 만든 함수 앱 리소스를 삭제합니다.

  1. Azure Portal에서 함수 앱 리소스를 열고 삭제를 선택합니다.
  2. 앱 이름을 입력하고 삭제를 선택하여 확인합니다.

다음 단계

서비스 커넥터 개념 및 Azure Functions를 다른 클라우드 서비스에 연결할 때 서비스 커넥터가 지원하는 방식을 자세히 알아보려면 아래 문서를 참조하세요.