Udostępnij za pomocą


Szybki start: reagowanie na zdarzenia magazynu obiektów blob przy użyciu usługi Azure Functions

W tym przewodniku szybkiego startu utworzysz aplikację odpowiadającą na zdarzenia w kontenerze Blob Storage za pomocą programu Visual Studio Code. Po przetestowaniu kodu lokalnie przy użyciu emulatora należy wdrożyć go w nowej aplikacji funkcji bezserwerowej uruchomionej w planie Flex Consumption w usłudze Azure Functions.

Projekt używa rozszerzenia interfejsu wiersza polecenia dla deweloperów platformy Azure (azd) z programem Visual Studio Code, aby uprościć inicjowanie i weryfikowanie kodu projektu lokalnie, a także wdrażanie kodu na platformie Azure. To wdrożenie jest zgodne z bieżącymi najlepszymi rozwiązaniami dotyczącymi bezpiecznych i skalowalnych wdrożeń usługi Azure Functions.

Ten artykuł obsługuje wersję 4 modelu programowania Node.js dla usługi Azure Functions.

Ten artykuł obsługuje wersję 2 modelu programowania w języku Python dla usługi Azure Functions.

Wymagania wstępne

  • Node.js 18.x lub nowszym. Użyj polecenia node --version, aby sprawdzić swoją wersję.

Inicjowanie projektu

azd init Użyj polecenia z palety poleceń, aby utworzyć lokalny projekt kodu usługi Azure Functions na podstawie szablonu.

  1. W programie Visual Studio Code otwórz folder lub obszar roboczy, w którym chcesz utworzyć projekt.

  2. Naciśnij F1 , aby otworzyć paletę poleceń, wyszukaj i uruchom polecenie Azure Developer CLI (azd): Initialize App (init), a następnie wybierz pozycję Wybierz szablon.

    Może wystąpić niewielkie opóźnienie podczas azd inicjowania bieżącego folderu lub obszaru roboczego.

  1. Po wyświetleniu monitu wybierz pozycję Wybierz szablon, a następnie wyszukaj i wybierz pozycję Azure Functions C# Event Grid Blob Trigger using Azure Developer CLI.

  2. Po wyświetleniu monitu w terminalu wprowadź unikatową nazwę środowiska, na przykład blobevents-dotnet.

    To polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze lub obszarze roboczym.

  1. Po wyświetleniu monitu wybierz pozycję Wybierz szablon, a następnie wyszukaj i wybierz pozycję Azure Functions Python Event Grid Blob Trigger using Azure Developer CLI.

  2. Po wyświetleniu monitu w terminalu wprowadź unikatową nazwę środowiska, na przykład blobevents-python.

    To polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze lub obszarze roboczym.

  1. Po wyświetleniu monitu wybierz pozycję Wybierz szablon, a następnie wyszukaj i wybierz pozycję Azure Functions TypeScript Event Grid Blob Trigger using Azure Developer CLI.

  2. Po wyświetleniu monitu wprowadź unikatową nazwę środowiska, na przykład blobevents-typescript.

    To polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze lub obszarze roboczym.

  1. Po wyświetleniu monitu wybierz pozycję Wybierz szablon, a następnie wyszukaj i wybierz pozycję Azure Functions Java Event Grid Blob Trigger using Azure Developer CLI.

  2. Po wyświetleniu monitu wprowadź unikatową nazwę środowiska, na przykład blobevents-java.

    To polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze lub obszarze roboczym.

  1. Po wyświetleniu monitu wybierz pozycję Wybierz szablon, a następnie wyszukaj i wybierz pozycję Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLI.

  2. Po wyświetleniu monitu wprowadź unikatową nazwę środowiska, na przykład blobevents-powershell.

    To polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze lub obszarze roboczym.

W azd środowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Jest również częścią nazwy grupy zasobów utworzonej na platformie Azure.

Dodawanie pliku local.settings.json

Funkcje wymagają pliku local.settings.json do skonfigurowania hosta podczas uruchamiania lokalnego.

  1. Uruchom to polecenie, aby przejść do src folderu aplikacji:

    cd src
    
  1. Utwórz plik o nazwie local.settings.json w src folderze zawierającym te dane JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Utwórz plik o nazwie local.settings.json w src folderze zawierającym te dane JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Utwórz plik o nazwie local.settings.json w src folderze zawierającym te dane JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Utwórz plik o nazwie local.settings.json w src folderze zawierającym te dane JSON:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. Utwórz plik o nazwie local.settings.json w src folderze zawierającym te dane JSON:

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

Tworzenie i aktywowanie środowiska wirtualnego

W folderze src uruchom następujące polecenia, aby utworzyć i aktywować środowisko wirtualne o nazwie .venv:

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

Jeśli język Python nie instaluje pakietu venv w dystrybucji systemu Linux, uruchom następujące polecenie:

sudo apt-get install python3-venv

Konfigurowanie lokalnego emulatora magazynu

Użyj emulatora usługi Azurite, aby uruchomić projekt kodu lokalnie przed utworzeniem i użyciem zasobów platformy Azure.

  1. Jeśli jeszcze tego nie zrobiono, zainstaluj aplikację Azurite.

  2. Naciśnij F1. W palecie komend wyszukaj i uruchom polecenie Azurite: Start, aby uruchomić emulator magazynu lokalnego.

  3. W obszarze Platformy Azure rozwiń Obszar roboczy>Dołączone konta magazynu>Lokalny emulator, kliknij prawym przyciskiem myszy (na Macu użyj Ctrl i kliknij) Kontenery blobów, wybierz opcję Utwórz kontener blob... i utwórz te dwa kontenery przechowywania blobów w lokalnym emulatorze:

    • unprocessed-pdf: kontener monitorowany przez wyzwalacz pod względem zdarzeń przechowywania.
    • processed-pdf: kontener, w którym funkcja wysyła przetworzone obiekty blob jako dane wyjściowe.
  4. Rozwiń węzeł Kontenery obiektów blob, kliknij prawym przyciskiem myszy (kliknij na komputerze Mac) nieprzetworzony plik PDF, wybierz polecenie Przekaż pliki..., naciśnij Enter , aby zaakceptować katalog główny i przekazać pliki PDF z data folderu projektu.

W przypadku uruchamiania lokalnego można użyć interfejsu REST, aby wyzwolić funkcję, symulując funkcję odbierającą komunikat z subskrypcji zdarzeń.

Lokalne uruchamianie funkcji

Program Visual Studio Code integruje się z narzędziami Azure Functions Core , aby umożliwić uruchamianie tego projektu na lokalnym komputerze deweloperów przy użyciu emulatora Azurite. Zmienna PDFProcessorSTORAGE środowiskowa definiuje połączenie z kontem magazynu, które jest również ustawione jako "UseDevelopmentStorage=true" w pliku local.settings.json podczas uruchamiania lokalnie.

  1. Uruchom to polecenie z folderu projektu w terminalu src lub wierszu polecenia:

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

    Po uruchomieniu hosta usługi Functions zapisuje nazwę wyzwalacza i typ wyzwalacza do danych wyjściowych terminalu. W usłudze Functions folder główny projektu zawiera plik host.json.

  2. Narzędzia Core Tools nadal działają w terminalu, otwórz test.http plik w projekcie, i wybierz pozycję Wyślij żądanie, aby wyzwolić funkcję poprzez wysłanie zdarzenia testowego obiektu blob do webhooka zdarzenia obiektu blob.

    Ten krok symuluje odbieranie zdarzenia z subskrypcji zdarzeń, gdy uruchamiane jest lokalnie, i prawdopodobnie zobaczysz żądanie oraz informacje o przetworzonych plikach zapisane w dziennikach. Jeśli nie używasz klienta REST, musisz użyć innego bezpiecznego narzędzia REST, aby wywołać punkt końcowy z ładunkiem w pliku test.http.

  3. W obszarze roboczym kontenera obiektów blob rozwiń processed-pdf i sprawdź, czy funkcja przetworzyła plik PDF i skopiowała go z prefiksem processed-.

  4. Po zakończeniu naciśnij Ctrl+C w oknie terminalu func.exe , aby zatrzymać proces hosta.

Przejrzyj kod (opcjonalnie)

Możesz przejrzeć kod, który definiuje wyzwalacz typu blob usługi Event Grid w pliku projektu ProcessBlobUpload.cs. Funkcja pokazuje, jak:

  • Użyj BlobTrigger wraz z Source = BlobTriggerSource.EventGrid do przetwarzania niemal w czasie rzeczywistym
  • Powiąż z BlobClient obiektem blob źródłowym i BlobContainerClient obiektem blob docelowym
  • Przetwarzanie zawartości obiektu blob i kopiowanie jej do innego kontenera przy użyciu strumieni

Możesz przejrzeć kod definiujący wyzwalacz obiektu blob usługi Event Grid w pliku projektu function_app.py. Funkcja pokazuje, jak:

  • Użyj @app.blob_trigger wraz z source="EventGrid" do przetwarzania niemal w czasie rzeczywistym
  • Uzyskiwanie dostępu do zawartości obiektu blob przy użyciu parametru InputStream
  • Kopiowanie przetworzonych plików do kontenera docelowego przy użyciu zestawu SDK usługi Azure Storage

Możesz przejrzeć kod definiujący wyzwalacz blob dla usługi Event Grid w pliku projektu processBlobUpload.ts. Funkcja pokazuje, jak:

  • Użyj app.storageBlob() wraz z source: 'EventGrid' do przetwarzania niemal w czasie rzeczywistym
  • Uzyskiwanie dostępu do zawartości obiektu blob przy użyciu zestawu SDK usługi Node.js Azure Storage
  • Przetwarzanie i kopiowanie plików do kontenera docelowego asynchronicznie

Możesz przejrzeć kod, który definiuje wyzwalacz blob dla usługi Event Grid w pliku projektu ProcessBlobUpload.java. Funkcja pokazuje, jak:

  • Użyj @BlobTrigger wraz z source = "EventGrid" do przetwarzania niemal w czasie rzeczywistym
  • Uzyskiwanie dostępu do zawartości obiektu blob przy użyciu BlobInputStream parametru
  • Kopiowanie przetworzonych plików do kontenera docelowego przy użyciu zestawu SDK usługi Azure Storage dla języka Java

Możesz przejrzeć kod definiujący wyzwalacz obiektu blob w ramach Event Grid w pliku projektu ProcessBlobUpload/run.ps1 i odpowiadającym mu function.json. Funkcja pokazuje, jak:

  • Konfiguracja wyzwalacza blob za pomocą "source": "EventGrid" w pliku function.json do przetwarzania prawie w czasie rzeczywistym
  • Uzyskiwanie dostępu do zawartości obiektu blob za pomocą poleceń cmdlet Azure Storage w PowerShell
  • Przetwarzanie i kopiowanie plików do kontenera docelowego przy użyciu modułów programu Azure PowerShell

Po przejrzeniu i zweryfikowaniu kodu funkcji lokalnie nadszedł czas na opublikowanie projektu na platformie Azure.

Tworzenie zasobów platformy Azure i wdrażanie

Użyj polecenia azd up, aby utworzyć aplikację funkcji w planie Flex Consumption wraz z innymi wymaganymi zasobami platformy Azure, w tym subskrypcją zdarzeń. Po przygotowaniu infrastruktury azd kod projektu zostaje wdrożony do nowej aplikacji funkcyjnej na platformie Azure.

  1. W programie Visual Studio Code naciśnij F1 , aby otworzyć paletę poleceń. Wyszukaj i uruchom polecenie Azure Developer CLI (azd): Sign In with Azure Developer CLI, a następnie zaloguj się przy użyciu konta platformy Azure.

  2. W katalogu głównym projektu naciśnij F1 , aby otworzyć paletę poleceń. Wyszukaj i uruchom polecenie Azure Developer CLI (azd): Provision and Deploy (up) , aby utworzyć wymagane zasoby platformy Azure i wdrożyć kod.

  3. Po wyświetleniu monitu w oknie Terminal podaj następujące wymagane parametry wdrożenia:

    Podpowiedź Description
    Wybieranie subskrypcji platformy Azure do użycia Wybierz subskrypcję, w której chcesz utworzyć zasoby.
    Nazwa środowiska Środowisko używane do obsługi unikatowego kontekstu wdrażania aplikacji.
    Lokalizacja platformy Azure Region platformy Azure, w którym ma zostać utworzona grupa zasobów zawierająca nowe zasoby platformy Azure. Wyświetlane są tylko regiony, które obecnie obsługują plan Flex Consumption.

    Polecenie azd up używa odpowiedzi do tych monitów z plikami konfiguracji Bicep w celu utworzenia i skonfigurowania tych wymaganych zasobów platformy Azure, zgodnie z najnowszymi najlepszymi rozwiązaniami:

    • Flex Consumption plan i aplikacja funkcji
    • Konto magazynu Azure z kontenerami BLOB
    • Application Insights (zalecane)
    • Zasady dostępu i role dla twojego konta
    • Subskrypcja usługi Event Grid dla zdarzeń blobów
    • Połączenia między usługami przy użyciu tożsamości zarządzanych (zamiast przechowywanych parametrów połączenia)

    Po pomyślnym wykonaniu polecenia Twoja aplikacja działa na platformie Azure, a subskrypcja zdarzeń jest skonfigurowana do wyzwalania funkcji po dodaniu obiektów blob do kontenera unprocessed-pdf.

  4. Zanotuj wartości AZURE_STORAGE_ACCOUNT_NAME i AZURE_FUNCTION_APP_NAME w danych wyjściowych. Te nazwy są unikatowe dla Twojego konta magazynowego i aplikacji funkcji w Azure.

Weryfikowanie wdrożonej funkcji

  1. W programie Visual Studio Code naciśnij F1. W palecie poleceń wyszukaj i uruchom polecenie Azure Storage: Upload Files.... Zaakceptuj katalog główny i tak jak wcześniej przekaż co najmniej jeden plik PDF z data folderu projektu.

  2. Po wyświetleniu się monitu wybierz nazwę nowego konta magazynowego (z AZURE_STORAGE_ACCOUNT_NAME). Wybierz Kontenery Blob>unprocessed-pdf.

  3. Naciśnij F1. W palecie poleceń wyszukaj i uruchom polecenie Azure Storage: Open in Explorer. Wybierz to samo konto magazynowe >Kontenery obiektów Blob>processed-pdf, a następnie Otwórz w nowym oknie.

  4. W Eksploratorze sprawdź, czy przekazane pliki PDF zostały przetworzone przez funkcję. Dane wyjściowe są zapisywane w kontenerze processed-pdf z prefiksem processed- .

Wyzwalacz obiektu blob usługi Event Grid przetwarza pliki w ciągu kilku sekund od przekazania. Ta szybkość pokazuje niemal rzeczywiste zdolności czasowe tego podejścia w porównaniu z tradycyjnymi wyzwalaczami obiektów blob opartymi na odpytywaniu.

Ponowne wdrażanie kodu

azd up Uruchom polecenie tyle razy, ile potrzebujesz, aby aprowizować zasoby platformy Azure i wdrażać aktualizacje kodu w aplikacji funkcji.

Uwaga / Notatka

Wdrożone pliki kodu są zawsze zastępowane przez najnowszy pakiet wdrożeniowy.

Początkowe odpowiedzi na azd monity i wszystkie zmienne środowiskowe wygenerowane przez azd program są przechowywane lokalnie w nazwanym środowisku. Użyj polecenia , azd env get-values aby przejrzeć wszystkie zmienne w środowisku, które zostały użyte podczas tworzenia zasobów platformy Azure.

Uprzątnij zasoby

Po zakończeniu pracy z aplikacją funkcji i powiązanymi zasobami użyj tego polecenia, aby usunąć aplikację funkcji i powiązane z nią zasoby z platformy Azure. Ta akcja pomaga uniknąć ponoszenia dodatkowych kosztów:

azd down --no-prompt

Uwaga / Notatka

Opcja --no-prompt powoduje azd usunięcie grupy zasobów bez potwierdzenia.

To polecenie nie ma wpływu na lokalny projekt kodu.