다음을 통해 공유


빠른 시작: Azure Functions를 사용하여 Blob Storage 이벤트에 응답

이 빠른 시작에서는 Visual Studio Code를 사용하여 Blob Storage 컨테이너의 이벤트에 응답하는 앱을 빌드합니다. 에뮬레이터를 사용하여 코드를 로컬로 테스트한 후 Azure Functions의 Flex Consumption 계획에서 실행되는 새 서버리스 함수 앱에 배포합니다.

이 프로젝트는 Visual Studio Code와 함께 Azure Developer CLI(azd) 확장을 사용하여 로컬로 프로젝트 코드를 초기화 및 확인하고 코드를 Azure에 배포하는 작업을 간소화합니다. 이 배포는 안전하고 확장성 있는 Azure Functions 배포에 대한 최신 모범 사례를 따릅니다.

이 문서에서는 Azure Functions용 Node.js 프로그래밍 모델 버전 4를 지원합니다.

이 문서에서는 Azure Functions용 Python 프로그래밍 모델 버전 2를 지원합니다.

필수 조건

  • Node.js 18.x 이상. node --version 명령을 사용하여 버전을 확인하십시오.

프로젝트 시작

명령 팔레트의 azd init 명령을 사용하여 템플릿에서 로컬 Azure Functions 코드 프로젝트를 만듭니다.

  1. Visual Studio Code에서 프로젝트를 만들 폴더 또는 작업 영역을 엽니다.

  2. F1 키를 눌러 명령 팔레트를 열고, 명령을 Azure Developer CLI (azd): Initialize App (init)검색하고 실행한 다음, 템플릿 선택을 선택합니다.

    현재 폴더 또는 작업 영역을 초기화하는 동안 azd 약간의 지연이 있을 수 있습니다.

  1. 메시지가 표시되면 템플릿을 선택하고, Azure Functions C# Event Grid Blob Trigger using Azure Developer CLI를 검색하여, 선택합니다.

  2. 터미널에서 메시지가 표시되면 고유한 환경 이름(예: blobevents-dotnet.)을 입력합니다.

    이 명령은 템플릿 리포지토리 에서 프로젝트 파일을 끌어오고 현재 폴더 또는 작업 영역에서 프로젝트를 초기화합니다.

  1. 메시지가 표시되면 템플릿을 선택하고, Azure Functions Python Event Grid Blob Trigger using Azure Developer CLI를 검색하여, 선택합니다.

  2. 터미널에서 메시지가 표시되면 고유한 환경 이름(예: blobevents-python.)을 입력합니다.

    이 명령은 템플릿 리포지토리 에서 프로젝트 파일을 끌어오고 현재 폴더 또는 작업 영역에서 프로젝트를 초기화합니다.

  1. 메시지가 표시되면 템플릿을 선택하고, Azure Functions TypeScript Event Grid Blob Trigger using Azure Developer CLI를 검색하여, 선택합니다.

  2. 메시지가 표시되면 고유한 환경 이름(예: blobevents-typescript.)을 입력합니다.

    이 명령은 템플릿 리포지토리 에서 프로젝트 파일을 끌어오고 현재 폴더 또는 작업 영역에서 프로젝트를 초기화합니다.

  1. 메시지가 표시되면 템플릿을 선택하고, Azure Functions Java Event Grid Blob Trigger using Azure Developer CLI를 검색하여, 선택합니다.

  2. 메시지가 표시되면 고유한 환경 이름(예: blobevents-java.)을 입력합니다.

    이 명령은 템플릿 리포지토리 에서 프로젝트 파일을 끌어오고 현재 폴더 또는 작업 영역에서 프로젝트를 초기화합니다.

  1. 메시지가 표시되면 템플릿을 선택하고, Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLI를 검색하여, 선택합니다.

  2. 메시지가 표시되면 고유한 환경 이름(예: blobevents-powershell.)을 입력합니다.

    이 명령은 템플릿 리포지토리 에서 프로젝트 파일을 끌어오고 현재 폴더 또는 작업 영역에서 프로젝트를 초기화합니다.

환경에서 azd는 앱에 대한 고유한 배포 컨텍스트를 유지 관리하며 둘 이상을 정의할 수 있습니다. 또한 Azure에서 만드는 리소스 그룹의 이름의 일부이기도 합니다.

local.settings.json 파일 추가

함수는 로컬로 실행할 때 호스트를 구성하기 위해 local.settings.json 파일이 필요합니다.

  1. 다음 명령을 실행하여 앱 폴더로 src 이동합니다.

    cd src
    
  1. 폴더에 이 JSON 데이터가 포함된 src이라는 이름의 파일을 만듭니다.

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. 폴더에 이 JSON 데이터가 포함된 src이라는 이름의 파일을 만듭니다.

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. 폴더에 이 JSON 데이터가 포함된 src이라는 이름의 파일을 만듭니다.

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. 폴더에 이 JSON 데이터가 포함된 src이라는 이름의 파일을 만듭니다.

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. 폴더에 이 JSON 데이터가 포함된 src이라는 이름의 파일을 만듭니다.

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    

가상 환경 만들기 및 활성화

폴더에서 src 다음 명령을 실행하여 다음과 같은 .venv가상 환경을 만들고 활성화합니다.

python3 -m venv .venv
source .venv/bin/activate

Python에서 Linux 배포판에 venv 패키지를 설치하지 않는 경우 다음 명령을 실행합니다.

sudo apt-get install python3-venv

로컬 스토리지 에뮬레이터 설정

Azure 리소스를 만들고 사용하기 전에 Azurite 에뮬레이터를 사용하여 코드 프로젝트를 로컬로 실행합니다.

  1. 아직 설치하지 않은 경우 Azurite를 설치합니다.

  2. F1 키를 누릅니다. 명령 팔레트에서 명령을 Azurite: Start 검색하고 실행하여 로컬 스토리지 에뮬레이터를 시작합니다.

  3. Azure 영역에서 작업 영역>연결된 스토리지 계정>로컬 에뮬레이터를 확장하고, 마우스 오른쪽 단추로 클릭(Mac에서 Ctrl 클릭) Blob 컨테이너를 선택하고, Blob 컨테이너 만들기를 선택하고, 로컬 에뮬레이터에 다음 두 개의 Blob Storage 컨테이너를 만듭니다.

    • unprocessed-pdf: 트리거가 스토리지 이벤트를 모니터링하는 컨테이너입니다.
    • processed-pdf: 함수가 처리된 Blob을 출력으로 보내는 컨테이너입니다.
  4. Blob 컨테이너를 확장하고 마우스 오른쪽 단추로 클릭하고(Mac에서 Ctrl 클릭) 처리되지 않은 pdf, 파일 업로드를 차례로 선택하고 Enter 키를 눌러 루트 디렉터리를 수락하고 프로젝트 폴더에서 data PDF 파일을 업로드합니다.

로컬로 실행하는 경우 REST를 사용하여 이벤트 구독에서 메시지를 수신하는 함수를 시뮬레이션하여 함수를 트리거할 수 있습니다.

로컬에서 함수 실행

Visual Studio Code는 Azure Functions Core 도구 와 통합되어 Azurite 에뮬레이터를 사용하여 로컬 개발 컴퓨터에서 이 프로젝트를 실행할 수 있습니다. 환경 변수는 스토리지 계정 연결을 정의하며, 이는 로컬에서 실행할 때 local.settings.json 파일에서 PDFProcessorSTORAGE로도 설정됩니다.

  1. 터미널 또는 명령 프롬프트의 src 프로젝트 폴더에서 다음 명령을 실행합니다.

    func start
    
    mvn clean package
    mvn azure-functions:run
    
    npm install
    func start  
    
    npm install
    npm start  
    

    Functions 호스트가 시작되면 트리거의 이름과 트리거 유형을 터미널 출력에 씁니다. Functions에서 프로젝트 루트 폴더에는 host.json 파일이 포함됩니다.

  2. 핵심 도구가 터미널에서 계속 실행 중인 상태에서 프로젝트에서 파일을 열고 test.http요청 보내기 를 선택하여 Blob 이벤트 웹후크에 테스트 Blob 이벤트를 전송하여 함수를 트리거 ProcessBlobUpload 합니다.

    이 단계에서는 로컬로 실행할 때 이벤트 구독에서 이벤트 수신을 시뮬레이션하고 로그에 기록된 요청 및 처리된 파일 정보를 확인해야 합니다. REST 클라이언트를 사용하지 않는 경우 다른 보안 REST 도구를 사용하여 페이로드가 있는 test.http엔드포인트를 호출해야 합니다.

  3. Blob 컨테이너의 작업 영역 영역에서 processed-pdf를 확장하고 함수가 PDF 파일을 처리하고 접두사를 사용하여 processed- 복사했는지 확인합니다.

  4. 완료되면 터미널 창에서 Ctrl+C를 눌러 func.exe 호스트 프로세스를 중지합니다.

코드 검토(선택 사항)

ProcessBlobUpload.cs 프로젝트 파일에서 Event Grid Blob 트리거를 정의하는 코드를 검토할 수 있습니다. 이 함수는 다음 방법을 보여 줍니다.

  • BlobTriggerSource = BlobTriggerSource.EventGrid를 함께 사용하여 거의 실시간 처리하세요
  • BlobClient에 소스 Blob을, BlobContainerClient에 대상 Blob을 바인딩하세요.
  • 스트림을 사용하여 Blob 콘텐츠를 처리하고 다른 컨테이너에 복사

function_app.py 프로젝트 파일에서 Event Grid Blob 트리거를 정의하는 코드를 검토할 수 있습니다. 이 함수는 다음 방법을 보여 줍니다.

  • @app.blob_triggersource="EventGrid"를 함께 사용하여 거의 실시간 처리하세요
  • InputStream 매개변수를 사용하여 blob 콘텐츠에 액세스하세요.
  • Azure Storage SDK를 사용하여 처리된 파일을 대상 컨테이너에 복사

processBlobUpload.ts 프로젝트 파일에서 Event Grid Blob 트리거를 정의하는 코드를 검토할 수 있습니다. 이 함수는 다음 방법을 보여 줍니다.

  • app.storageBlob()source: 'EventGrid'를 함께 사용하여 거의 실시간 처리하세요
  • Node.js Azure Storage SDK를 사용하여 Blob 콘텐츠에 액세스
  • 비동기적으로 대상 컨테이너에 파일 처리 및 복사

ProcessBlobUpload.java 프로젝트 파일에서 Event Grid Blob 트리거를 정의하는 코드를 검토할 수 있습니다. 이 함수는 다음 방법을 보여 줍니다.

  • @BlobTriggersource = "EventGrid"를 함께 사용하여 거의 실시간 처리하세요
  • BlobInputStream 매개 변수를 사용하여 Blob 콘텐츠를 액세스합니다.
  • Java용 Azure Storage SDK를 사용하여 처리된 파일을 대상 컨테이너에 복사

ProcessBlobUpload/run.ps1 프로젝트 파일 및 해당 function.jsonEvent Grid Blob 트리거를 정의하는 코드를 검토할 수 있습니다. 이 함수는 다음 방법을 보여 줍니다.

  • 거의 실시간 처리를 위해 function.json 파일의 "source": "EventGrid" 블롭 트리거를 구성합니다.
  • PowerShell Azure Storage cmdlet을 사용하여 Blob 콘텐츠에 액세스
  • Azure PowerShell 모듈을 사용하여 대상 컨테이너에 파일 처리 및 복사

함수 코드를 로컬로 검토하고 확인한 후에는 Azure에 프로젝트를 게시해야 합니다.

Azure 리소스 만들기 및 배포

azd up 명령을 사용하여 이벤트 구독을 비롯한 다른 필수 Azure 리소스와 함께 Flex Consumption 계획에서 함수 앱을 만듭니다. 인프라가 준비 azd 되면 Azure의 새 함수 앱에도 프로젝트 코드를 배포합니다.

  1. Visual Studio Code에서 F1 키를 눌러 명령 팔레트를 엽니다. 명령을 Azure Developer CLI (azd): Sign In with Azure Developer CLI검색하고 실행한 다음, Azure 계정을 사용하여 로그인합니다.

  2. 프로젝트 루트에서 F1 키를 눌러 명령 팔레트를 엽니다. 명령을 Azure Developer CLI (azd): Provision and Deploy (up) 검색하여 실행하여 필요한 Azure 리소스를 만들고 코드를 배포합니다.

  3. 터미널 창에 메시지가 표시되면 다음 필수 배포 매개 변수를 제공합니다.

    프롬프트 Description
    사용할 Azure 구독 선택 리소스를 만들려는 구독을 선택합니다.
    환경 이름 앱에 대한 고유한 배포 컨텍스트를 유지하는 데 사용되는 환경.
    Azure 위치 새 Azure 리소스가 포함된 리소스 그룹을 만들 Azure 지역입니다. 현재 Flex 사용량 플랜을 지원하는 지역만 표시됩니다.

    azd up 명령은 Bicep 구성 파일과 함께 이러한 프롬프트에 대한 응답을 사용하여 최신 모범 사례에 따라 이러한 필수 Azure 리소스를 만들고 구성합니다.

    • 플렉스 사용량 플랜 및 함수 앱
    • Blob 컨테이너가 있는 Azure Storage 계정
    • Application Insights(권장)
    • 사용자의 계정에 대한 액세스 정책 및 역할
    • Blob 이벤트에 대한 Event Grid 구독
    • 저장된 연결 문자열 대신 관리 ID를 사용하여 서비스 대 서비스 연결

    명령이 성공적으로 완료되면, 앱이 Azure에서 실행되며, unprocessed-pdf 컨테이너에 Blob이 추가될 때 함수를 트리거하기 위해 구성된 이벤트 구독이 작동합니다.

  4. AZURE_STORAGE_ACCOUNT_NAMEAZURE_FUNCTION_APP_NAME를 출력에서 기록해 둔다. 이러한 이름은 각각 Azure의 스토리지 계정 및 함수 앱에 대해 고유합니다.

배포된 함수 확인

  1. Visual Studio Code에서 F1 키를 누릅니다. 명령 팔레트에서 명령을 Azure Storage: Upload Files...검색하고 실행합니다. 루트 디렉터리를 수락하고 이전과 마찬가지로 프로젝트 폴더에서 data 하나 이상의 PDF 파일을 업로드합니다.

  2. 메시지가 표시되면 새 스토리지 계정의 이름(원본 AZURE_STORAGE_ACCOUNT_NAME)을 선택합니다. Blob 컨테이너>처리되지 않은 PDF를 선택합니다.

  3. F1 키를 누릅니다. 명령 팔레트에서 명령을 Azure Storage: Open in Explorer검색하고 실행합니다. 동일한 스토리지 계정 >Blob Containers>processed-pdf를 선택한 다음 새 창에서 엽니다.

  4. 탐색기에서 업로드한 PDF 파일이 함수에서 처리되었는지 확인합니다. 출력은 processed-pdf 접두사를 사용하여 processed- 컨테이너에 기록됩니다.

Event Grid Blob 트리거는 업로드 후 몇 초 이내에 파일을 처리합니다. 이 속도는 기존의 폴링 방식 Blob 트리거에 비해 이 접근 방식이 거의 실시간으로 작동할 수 있음을 보여줍니다.

코드 다시 배포

필요에 따라 Azure 리소스를 프로비전하고 함수 앱에 코드 업데이트를 배포하기 위해 azd up 명령을 여러 번 실행합니다.

비고

배포된 코드 파일은 항상 최신 배포 패키지로 덮어쓰여집니다.

azd 프롬프트에 대한 초기 응답과 azd에서 생성된 모든 환경 변수는 명명된 환경에 로컬로 저장됩니다. azd env get-values 명령을 사용하여 Azure 리소스를 만들 때 사용된 환경의 모든 변수를 검토합니다.

자원을 정리하세요

함수 앱 및 관련 리소스 작업을 마쳤으면 이 명령을 사용하여 Azure에서 함수 앱 및 관련 리소스를 삭제합니다. 이 작업을 통해 추가 비용이 발생하지 않도록 방지할 수 있습니다.

azd down --no-prompt

비고

--no-prompt 옵션은 사용자의 확인 없이 azd에게 리소스 그룹을 삭제하도록 지시합니다.

이 명령은 로컬 코드 프로젝트에는 영향을 미치지 않습니다.