Samouczek: wyzwalanie usługi Azure Functions w kontenerach obiektów blob przy użyciu subskrypcji zdarzeń

Jeśli używasz wcześniejszych wersji wyzwalacza usługi Blob Storage z usługą Azure Functions, często występuje opóźnienie wykonywania, ponieważ wyzwalacz sonduje kontener obiektów blob pod kątem aktualizacji. Opóźnienie można zmniejszyć, wyzwalając funkcję przy użyciu subskrypcji zdarzeń do tego samego kontenera. Subskrypcja zdarzeń używa infrastruktury usługi Event Grid do przekazywania zmian w kontenerze w miarę ich występowania. Tę funkcję można zaimplementować przy użyciu najnowszych rozszerzeń usługi Azure Functions.

W tym artykule pokazano, jak utworzyć funkcję uruchamianą na podstawie zdarzeń zgłaszanych podczas dodawania obiektu blob do kontenera. Użyjesz programu Visual Studio Code do programowania lokalnego i sprawdzisz, czy funkcja działa lokalnie przed wdrożeniem projektu na platformie Azure.

  • Utwórz ogólne konto magazynu w wersji 2 w usłudze Azure Storage.
  • Tworzenie kontenera w magazynie obiektów blob.
  • Utwórz funkcję wyzwalaną przez usługę Blob Storage opartą na zdarzeniach.
  • Utwórz subskrypcję zdarzeń w kontenerze obiektów blob.
  • Debuguj lokalnie przy użyciu narzędzia ngrok, przekazując pliki.
  • Wdróż na platformie Azure i utwórz filtrowaną subskrypcję zdarzeń.

Ważne

W tym artykule są używane karty do obsługi wielu wersji modelu programowania Node.js. Model w wersji 4 jest ogólnie dostępny i ma bardziej elastyczne i intuicyjne środowisko dla deweloperów języka JavaScript i Języka TypeScript. Aby uzyskać więcej informacji na temat sposobu działania modelu w wersji 4, zapoznaj się z przewodnikiem dewelopera dotyczącym usługi Azure Functions Node.js. Aby dowiedzieć się więcej o różnicach między wersjami 3 i v4, zapoznaj się z przewodnikiem migracji.

Wymagania wstępne

  • Narzędzie ngrok , które umożliwia platformie Azure wywoływanie funkcji uruchomionej lokalnie.

  • Rozszerzenie usługi Azure Storage dla programu Visual Studio Code w wersji 5.x.

Uwaga

Rozszerzenie usługi Azure Storage dla programu Visual Studio Code jest obecnie dostępne w wersji zapoznawczej.

Tworzenie konta magazynu

Aby korzystać z subskrypcji zdarzeń w usłudze Azure Storage, musisz mieć konto magazynu ogólnego przeznaczenia w wersji 2. Domyślnie możesz utworzyć to konto magazynu z projektu programu Visual Studio Code po zainstalowaniu rozszerzenia usługi Azure Storage.

  1. W programie Visual Studio Code otwórz paletę poleceń (naciśnij klawisz F1), wprowadź .Azure Storage: Create Storage Account... Po wyświetleniu monitów podaj następujące informacje:

    Monit Akcja
    Wprowadź nazwę nowego konta magazynu Podaj nazwę unikatową w skali globalnej. Nazwy kont magazynu muszą mieć długość od 3 do 24 znaków z małymi literami i cyframi. Aby ułatwić identyfikację, użyjemy tej samej nazwy dla grupy zasobów i nazwy aplikacji funkcji.
    Wybieranie lokalizacji dla nowych zasobów Aby uzyskać lepszą wydajność, wybierz region blisko Ciebie.

    Rozszerzenie tworzy konto magazynu ogólnego przeznaczenia w wersji 2 o podanej nazwie. Ta sama nazwa jest również używana dla grupy zasobów zawierającej konto magazynu.

  2. Po utworzeniu konta magazynu otwórz paletę poleceń (naciśnij klawisz F1) i wprowadź polecenie Azure Storage: Create Blob Container.... Po wyświetleniu monitów podaj następujące informacje:

    Monit Akcja
    Wybierz zasób Wybierz utworzone konto magazynu.
    Wprowadź nazwę nowego kontenera obiektów blob Wprowadź samples-workitems, czyli nazwę kontenera, do której odwołuje się projekt kodu.

Po utworzeniu kontenera obiektów blob możesz utworzyć zarówno funkcję wyzwalającą w tym kontenerze, jak i subskrypcję zdarzeń, która dostarcza zdarzenia do funkcji.

Tworzenie funkcji wyzwalanej przez obiekt blob

Podczas tworzenia funkcji wyzwalanej przez usługę Blob Storage przy użyciu programu Visual Studio Code utworzysz również nowy projekt. Musisz edytować funkcję, aby korzystać z subskrypcji zdarzeń jako źródła, zamiast używać zwykłego sondowanego kontenera.

  1. W programie Visual Studio Code otwórz aplikację funkcji.

  2. Otwórz paletę poleceń (naciśnij klawisz F1), wprowadź ciąg Azure Functions: Create Function..., a następnie wybierz pozycję Utwórz nowy projekt.

  3. W obszarze roboczym projektu wybierz lokalizację katalogu. Upewnij się, że utworzono nowy folder lub wybrano pusty folder dla obszaru roboczego projektu.

    Nie wybieraj folderu projektu, który jest już częścią obszaru roboczego.

  4. Po wyświetleniu monitów podaj następujące informacje:

    Monit Akcja
    Wybieranie języka Wybierz opcję C#.
    Wybieranie środowiska uruchomieniowego platformy .NET Wybierz .NET 6.0 Isolated LTS opcję uruchamiania w izolowanym procesie roboczym lub .NET 6.0 LTS w procesie przetwarzania.
    Wybieranie szablonu dla pierwszej funkcji projektu Wybierz opcję Azure Blob Storage trigger.
    Podaj nazwę funkcji Wprowadź BlobTriggerEventGrid.
    Podaj przestrzeń nazw Wprowadź My.Functions.
    Wybierz ustawienie z "local.settings.json" Wybierz opcję Create new local app setting.
    Wybieranie konta magazynu Wybierz konto magazynu utworzone z listy.
    Jest to ścieżka na koncie magazynu, które wyzwalacz będzie monitorować Zaakceptuj wartość samples-workitemsdomyślną .
    Wybierz sposób otwierania projektu Wybierz opcję Open in current window.
    Monit Akcja
    Wybieranie języka Wybierz opcję Python.
    Wybieranie interpretera języka Python w celu utworzenia środowiska wirtualnego Wybierz preferowany interpreter języka Python. Jeśli opcja nie jest wyświetlana, wprowadź pełną ścieżkę do pliku binarnego języka Python.
    Wybieranie szablonu dla pierwszej funkcji projektu Wybierz opcję Azure Blob Storage trigger.
    Podaj nazwę funkcji Wprowadź BlobTriggerEventGrid.
    Wybierz ustawienie z "local.settings.json" Wybierz opcję Create new local app setting.
    Wybieranie konta magazynu Wybierz konto magazynu utworzone z listy.
    Jest to ścieżka na koncie magazynu, które wyzwalacz będzie monitorować Zaakceptuj wartość samples-workitemsdomyślną .
    Wybierz sposób otwierania projektu Wybierz opcję Open in current window.
    Monit Akcja
    Wybieranie języka Wybierz opcję Java.
    Wybieranie wersji języka Java Java 8Wybierz Java 11 wersję języka Java, w której działają funkcje na platformie Azure i czy zweryfikowano lokalnie.
    Podaj identyfikator grupy Wybierz opcję com.function.
    Podaj identyfikator artefaktu Wybierz opcję BlobTriggerEventGrid.
    Podaj wersję Wybierz opcję 1.0-SNAPSHOT.
    Podaj nazwę pakietu Wybierz opcję com.function.
    Podaj nazwę aplikacji Zaakceptuj wygenerowaną nazwę rozpoczynającą się od BlobTriggerEventGrid.
    Wybieranie narzędzia kompilacji dla projektu Java Wybierz opcję Maven.
    Wybierz sposób otwierania projektu Wybierz opcję Open in current window.
    Monit Akcja
    Wybieranie języka projektu funkcji Wybierz opcję TypeScript.
    Wybieranie modelu programowania TypeScript Wybierz opcję Model V4.
    Wybieranie szablonu dla pierwszej funkcji projektu Wybierz opcję Azure Blob Storage trigger.
    Podaj nazwę funkcji Wprowadź BlobTriggerEventGrid.
    Wybierz ustawienie z "local.settings.json" Wybierz opcję Create new local app setting.
    Wybieranie konta magazynu Wybierz utworzone konto magazynu.
    Jest to ścieżka na koncie magazynu, które wyzwalacz będzie monitorować Zaakceptuj wartość samples-workitemsdomyślną .
    Wybierz sposób otwierania projektu Wybierz opcję Open in current window.
    Monit Akcja
    Wybieranie języka projektu funkcji Wybierz opcję JavaScript.
    Wybieranie modelu programowania JavaScript Wybierz opcję Model V4.
    Wybieranie szablonu dla pierwszej funkcji projektu Wybierz opcję Azure Blob Storage trigger.
    Podaj nazwę funkcji Wprowadź BlobTriggerEventGrid.
    Wybierz ustawienie z "local.settings.json" Wybierz opcję Create new local app setting.
    Wybieranie konta magazynu Wybierz utworzone konto magazynu.
    Jest to ścieżka na koncie magazynu, które wyzwalacz będzie monitorować Zaakceptuj wartość samples-workitemsdomyślną .
    Wybierz sposób otwierania projektu Wybierz opcję Open in current window.
    Monit Akcja
    Wybieranie języka projektu funkcji Wybierz opcję PowerShell.
    Wybieranie szablonu dla pierwszej funkcji projektu Wybierz opcję Azure Blob Storage trigger.
    Podaj nazwę funkcji Wprowadź BlobTriggerEventGrid.
    Wybierz ustawienie z "local.settings.json" Wybierz opcję Create new local app setting.
    Wybieranie konta magazynu Wybierz utworzone konto magazynu.
    Jest to ścieżka na koncie magazynu, które wyzwalacz będzie monitorować Zaakceptuj wartość samples-workitemsdomyślną .
    Wybierz sposób otwierania projektu Wybierz opcję Open in current window.
  5. Po wyświetleniu monitu wybierz pozycję Wybierz konto>magazynu Dodaj do obszaru roboczego.

Dla uproszczenia ten samouczek ponownie używa tego samego konta magazynu w aplikacji funkcji. Jednak w środowisku produkcyjnym możesz chcieć użyć oddzielnego konta magazynu z aplikacją funkcji. Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące magazynu dla usługi Azure Functions.

Uaktualnianie rozszerzenia magazynu

Aby użyć wyzwalacza usługi Blob Storage opartego na usłudze Event Grid, funkcja wymaga co najmniej wersji 5.x dla rozszerzenia magazynu.

Aby uaktualnić projekt przy użyciu wymaganej wersji rozszerzenia, w oknie terminalu uruchom następujące polecenie: dotnet add package

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs --version 6.1.0
  1. Otwórz plik projektu host.json i sprawdź extensionBundle element.

  2. Jeśli extensionBundle.version nie ma co najmniej 3.3.0 wartości , zastąp ciąg extensionBundle najnowszym:

    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
    

Aktualizowanie funkcji w celu używania zdarzeń

W pliku BlobTriggerEventGrid.cs dodaj Source = BlobTriggerSource.EventGrid do parametrów atrybutu wyzwalacza obiektu blob, na przykład:

[Function("BlobTriggerCSharp")]
public async Task Run([BlobTrigger("samples-workitems/{name}", Source = BlobTriggerSource.EventGrid, Connection = "<NAMED_STORAGE_CONNECTION>")] Stream myBlob, string name, FunctionContext executionContext)
{
    var logger = executionContext.GetLogger("BlobTriggerCSharp");
    logger.LogInformation($"C# Blob trigger function Processed blob\n Name: {name} \n Size: {myBlob.Length} Bytes");
}

Po utworzeniu funkcji w pliku konfiguracji function.json dodaj "source": "EventGrid" do myBlob powiązania, na przykład:

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "samples-workitems/{name}",
      "source": "EventGrid",
      "connection": "<NAMED_STORAGE_CONNECTION>"
    }
  ]
}
  1. W wygenerowany Function.java plik zastąp zawartość następującym kodem i zmień nazwę pliku na BlobTriggerEventGrid.java:

    package com.function;
    
    import com.microsoft.azure.functions.annotation.*;
    import com.microsoft.azure.functions.*;
    
    /**
    * Azure Functions with Azure Blob trigger.
    */
    public class BlobTriggerEventGrid {
        /**
        * This function will be invoked when a new or updated blob is detected at the specified path. The blob contents are provided as input to this function.
        */
        @FunctionName("BlobTriggerEventGrid")
        @StorageAccount("glengatesteventgridblob_STORAGE")
        public void run(
            @BlobTrigger(name = "content", path = "samples-workitems/{name}", dataType = "binary", source = "EventGrid" ) byte[] content,
            @BindingName("name") String name,
            final ExecutionContext context
        ) {
              context.getLogger().info("Java Blob trigger function processed a blob. Name: " + name + "\n  Size: " + content.length + " Bytes");
          }
    }
    
  2. Usuń skojarzony plik testu jednostkowego, który nie ma już zastosowania do nowego typu wyzwalacza.

Po utworzeniu funkcji dodaj source: "EventGrid" do options obiektu w pliku TypeScript, na przykład:

import { app, InvocationContext } from '@azure/functions';

export async function storageBlobTrigger1(blob: Buffer, context: InvocationContext): Promise<void> {
    context.log(
        `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
    );
}

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    source: 'EventGrid',
    handler: storageBlobTrigger1,
});

Po utworzeniu funkcji dodaj source: "EventGrid" do options obiektu w pliku JavaScript, na przykład:

const { app } = require('@azure/functions');

app.storageBlob('storageBlobTrigger1', {
    path: 'samples-workitems/{name}',
    connection: 'MyStorageAccountAppSetting',
    source: 'EventGrid',
    handler: (blob, context) => {
        context.log(
            `Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
        );
    },
});

Po utworzeniu funkcji w pliku konfiguracji function.json dodaj "source": "EventGrid" do myBlob powiązania, na przykład:

{
    "bindings": [
        {
            "name": "myblob",
            "type": "blobTrigger",
            "direction": "in",
            "path": "samples-workitems/{name}",
            "source": "EventGrid",
            "connection": "<NAMED_STORAGE_CONNECTION>"
        }
    ]
}

Rozpocznij debugowanie lokalne

Usługa Event Grid weryfikuje adres URL punktu końcowego podczas tworzenia subskrypcji zdarzeń w witrynie Azure Portal. Ta weryfikacja oznacza, że zanim będzie można utworzyć subskrypcję zdarzeń na potrzeby lokalnego debugowania, funkcja musi być uruchomiona lokalnie z dostępem zdalnym włączonym przez narzędzie ngrok. Jeśli lokalny kod funkcji nie jest uruchomiony i dostępny dla platformy Azure, nie będzie można utworzyć subskrypcji zdarzeń.

Określanie punktu końcowego wyzwalacza obiektu blob

Gdy funkcja jest uruchamiana lokalnie, domyślny punkt końcowy używany dla wyzwalacza magazynu obiektów blob sterowanych zdarzeniami wygląda jak następujący adres URL:

http://localhost:7071/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid
http://localhost:7071/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid

Zapisz tę ścieżkę, która będzie używana później do tworzenia adresów URL punktów końcowych dla subskrypcji zdarzeń. Jeśli użyto innej nazwy funkcji wyzwalanej przez usługę Blob Storage, musisz zmienić functionName wartość w ciągu zapytania.

Uwaga

Ponieważ punkt końcowy obsługuje zdarzenia wyzwalacza usługi Blob Storage, ścieżka punktu końcowego zawiera blobswartość . Adres URL punktu końcowego wyzwalacza usługi Event Grid byłby zamiast tego w eventgrid ścieżce.

Uruchamianie narzędzia ngrok

Aby podzielić się na funkcję debugowaną na maszynie, musisz zapewnić usługę Azure Event Grid w celu komunikowania się z funkcjami uruchomionymi na komputerze lokalnym.

Narzędzie ngrok przekazuje żądania zewnętrzne do losowo wygenerowanego adresu serwera proxy do określonego adresu i portu na komputerze lokalnym. za pomocą polecenia , aby wywołać punkt końcowy elementu webhook funkcji uruchomionej na maszynie.

  1. Uruchom program ngrok przy użyciu następującego polecenia:

    ngrok.exe http http://localhost:7071
    

    Po uruchomieniu narzędzia okno polecenia powinno wyglądać podobnie do poniższego zrzutu ekranu:

    Screenshot that shows the Command Prompt after starting the

  2. Skopiuj adres URL HTTPS wygenerowany podczas uruchamiania narzędzia ngrok. Ta wartość służy do określania punktu końcowego elementu webhook na komputerze uwidocznionych przy użyciu narzędzia ngrok.

Ważne

W tym momencie nie zatrzymaj ngrokpolecenia . Za każdym razem, gdy uruchamiasz ngrokpolecenie , adres URL HTTPS jest ponownie wygenerowany przy użyciu innej wartości. Ponieważ nie można zmodyfikować punktu końcowego subskrypcji zdarzeń, musisz utworzyć nową subskrypcję zdarzeń za każdym razem, gdy uruchamiasz polecenie ngrok.

Jeśli nie utworzysz konta ngrok, maksymalny czas sesji ngrok jest ograniczony do dwóch godzin.

Kompilowanie adresu URL punktu końcowego

Punkt końcowy używany w subskrypcji zdarzeń składa się z trzech różnych części, nazwy prefiksu serwera, ścieżki i ciągu zapytania. W poniższej tabeli opisano następujące części:

Część adresu URL opis
Prefiks i nazwa serwera Gdy funkcja działa lokalnie, nazwa serwera z prefiksem pochodzi z adresu URL przekazywania wygenerowanego https:// przez narzędzie ngrok. W adresie URL hosta lokalnego adres URL serwera ngrok zastępuje wartość http://localhost:7071. Podczas uruchamiania na platformie Azure zamiast tego użyjesz opublikowanego serwera aplikacji funkcji, który jest zwykle w postaci https://<FUNCTION_APP_NAME>.azurewebsites.net.
Ścieżka Część ścieżki adresu URL punktu końcowego pochodzi z skopiowanego wcześniej adresu URL hosta lokalnego i wygląda jak /runtime/webhooks/blobs w przypadku wyzwalacza usługi Blob Storage. Ścieżka wyzwalacza usługi Event Grid będzie następująca: /runtime/webhooks/EventGrid
Ciąg zapytania Dla wszystkich języków, w tym .NET Isolated parametru functionName=Host.Functions.BlobTriggerEventGrid , z wyjątkiem .NET In-process, który powinien znajdować się functionName=BlobTriggerEventGrid w ciągu zapytania ustawia nazwę funkcji, która obsługuje zdarzenie. Jeśli dla funkcji użyto innej nazwy, musisz zmienić tę wartość. Klucz dostępu nie jest wymagany podczas uruchamiania lokalnego. Podczas uruchamiania na platformie Azure należy również uwzględnić code= parametr w adresie URL, który zawiera klucz, który można uzyskać z portalu.

Poniższy zrzut ekranu przedstawia przykładowy wygląd końcowego adresu URL punktu końcowego podczas korzystania z wyzwalacza usługi Blob Storage o nazwie BlobTriggerEventGrid:

Endpoint selection

Rozpocznij debugowanie

Po uruchomieniu narzędzia ngrok uruchom projekt lokalny w następujący sposób:

  1. Ustaw punkt przerwania w funkcji w wierszu, który obsługuje rejestrowanie.

  2. Rozpocznij sesję debugowania.

    Otwórz nowy terminal i uruchom następujące mvn polecenie, aby uruchomić sesję debugowania.

    mvn azure-functions:run -DenableDebug
    

    Naciśnij klawisz F5 , aby rozpocząć sesję debugowania.

Po uruchomieniu kodu i żądaniu przesyłania dalej ngrok nadszedł czas, aby utworzyć subskrypcję zdarzeń do kontenera obiektów blob.

Tworzenie subskrypcji zdarzeń

Subskrypcja zdarzeń obsługiwana przez usługę Azure Event Grid zgłasza zdarzenia na podstawie zmian w połączonym kontenerze obiektów blob. To zdarzenie jest następnie wysyłane do punktu końcowego elementu webhook w wyzwalaczu funkcji. Po utworzeniu subskrypcji zdarzeń nie można zmienić adresu URL punktu końcowego. Oznacza to, że po zakończeniu debugowania lokalnego (lub po ponownym uruchomieniu narzędzia ngrok) musisz usunąć i ponownie utworzyć subskrypcję zdarzeń.

  1. W programie Visual Studio Code wybierz ikonę platformy Azure na pasku Działania. W obszarze Zasoby rozwiń subskrypcję, rozwiń węzeł Konta magazynu, kliknij prawym przyciskiem myszy utworzone wcześniej konto magazynu i wybierz polecenie Otwórz w portalu.

  2. Zaloguj się do witryny Azure Portal i zanotuj grupę zasobów dla konta magazynu. Utworzysz inne zasoby w tej samej grupie, aby ułatwić czyszczenie zasobów po zakończeniu pracy.

  3. wybierz opcję Zdarzenia z menu po lewej stronie.

    Add storage account event

  4. W oknie Zdarzenia wybierz przycisk + Subskrypcja zdarzeń i podaj wartości z poniższej tabeli na karcie Podstawowa:

    Ustawienie Sugerowana wartość opis
    Nazwa/nazwisko myBlobLocalNgrokEventSub Nazwa identyfikująca subskrypcję zdarzeń. Możesz użyć nazwy , aby szybko znaleźć subskrypcję zdarzeń.
    Schemat zdarzeń Schemat usługi Event Grid Użyj domyślnego schematu dla zdarzeń.
    Nazwa tematu systemowego samples-workitems-blobs Nazwa tematu, który reprezentuje kontener. Temat jest tworzony przy użyciu pierwszej subskrypcji i będzie używany do przyszłych subskrypcji zdarzeń.
    Filtrowanie do typów zdarzeń Utworzony obiekt blob
    Typ punktu końcowego Web Hook Wyzwalacz magazynu obiektów blob używa punktu końcowego elementu Web Hook. Do wyzwalacza usługi Event Grid należy użyć usługi Azure Functions.
    Punkt końcowy Punkt końcowy adresu URL oparty na serwerze ngrok Użyj określonego wcześniej punktu końcowego adresu URL opartego na serwerze ngrok.
  5. Wybierz pozycję Potwierdź wybór , aby zweryfikować adres URL punktu końcowego.

  6. Wybierz pozycję Utwórz , aby utworzyć subskrypcję zdarzeń.

Przekazywanie pliku do kontenera

Po utworzeniu subskrypcji zdarzeń, a projekt kodu i program ngrok nadal działają, możesz teraz przekazać plik do kontenera magazynu, aby wyzwolić funkcję. Plik można przekazać z komputera do kontenera magazynu obiektów blob przy użyciu programu Visual Studio Code.

  1. W programie Visual Studio Code otwórz paletę poleceń (naciśnij klawisz F1) i wpisz Azure Storage: Upload Files....

  2. W oknie dialogowym Otwieranie wybierz plik, najlepiej plik obrazu binarnego, który nie jest zbyt duży, wybierz pozycję Przekaż .

  3. Podaj następujące informacje po wyświetleniu monitów:

    Ustawienie Sugerowana wartość opis
    Wybierz zasób Nazwa konta magazynu Wybierz nazwę konta magazynu utworzonego w poprzednim kroku.
    Wybieranie typu zasobu Kontenery obiektów blob Przekazujesz do kontenera obiektów blob.
    Wybieranie kontenera obiektów blob samples-workitems Ta wartość to nazwa kontenera utworzonego w poprzednim kroku.
    Wprowadź docelowy katalog tego przekazywania domyślna Po prostu zaakceptuj wartość /domyślną , która jest katalogem głównym kontenera.

To polecenie przekazuje plik z komputera do kontenera magazynu na platformie Azure. Na tym etapie uruchomione wystąpienie ngrok powinno zgłosić, że żądanie zostało przesłane dalej. Zobaczysz również w danych wyjściowych func.exe dla sesji debugowania, że funkcja została uruchomiona. Mam nadzieję, że w tym momencie sesja debugowania czeka na Ciebie, gdzie ustawiono punkt przerwania.

Publikowanie projektu na platformie Azure

Teraz, gdy kod funkcji został pomyślnie zweryfikowany lokalnie, nadszedł czas, aby opublikować projekt w nowej aplikacji funkcji na platformie Azure.

Tworzenie aplikacji funkcji

Poniższe kroki umożliwiają utworzenie potrzebnych zasobów na platformie Azure i wdrożenie plików projektu.

  1. Na palecie poleceń wprowadź wartość Azure Functions: Create function app in Azure... (Tworzenie aplikacji funkcji na platformie Azure... (Zaawansowane).

  2. Po wyświetleniu monitów podaj następujące informacje:

    Monit Wybór
    Wprowadź globalnie unikatową nazwę nowej aplikacji funkcji. Wpisz globalnie unikatową nazwę identyfikującą nową aplikację funkcji, a następnie wybierz klawisz Enter. Prawidłowe znaki dla nazwy aplikacji funkcji to a-z, 0-9 i -. Zapisz tę nazwę; Będzie on potrzebny później podczas kompilowania nowego adresu URL punktu końcowego.
    Wybierz stos środowiska uruchomieniowego. Wybierz wersję języka, dla której uruchomiono lokalnie.
    Wybierz system operacyjny. Wybierz pozycję Linux lub Windows. Aplikacje języka Python muszą działać w systemie Linux.
    Wybierz grupę zasobów dla nowych zasobów. Wybierz nazwę grupy zasobów utworzonej przy użyciu konta magazynu, które zostało wcześniej zanotowany w portalu.
    Wybierz lokalizację nowych zasobów. Wybierz lokalizację w regionie w pobliżu ciebie lub w pobliżu innych usług, do których uzyskujesz dostęp do funkcji.
    Wybierz plan hostingu. Wybierz pozycję Zużycie dla hostingu planu zużycie bezserwerowego, w którym opłaty są naliczane tylko po uruchomieniu funkcji.
    Wybierz konto magazynu. Wybierz nazwę istniejącego konta magazynu, którego używasz.
    Wybierz zasób aplikacji Szczegółowe informacje dla aplikacji. Wybierz pozycję Utwórz nową aplikację Szczegółowe informacje zasobu i w wierszu polecenia wpisz nazwę wystąpienia używanego do przechowywania danych środowiska uruchomieniowego z funkcji.

    Po utworzeniu aplikacji funkcji zostanie wyświetlone powiadomienie i zostanie zastosowane pakiet wdrożeniowy. Wybierz pozycję Wyświetl dane wyjściowe w tym powiadomieniu, aby wyświetlić wyniki tworzenia i wdrażania, w tym utworzone zasoby platformy Azure.

Wdrażanie kodu funkcji

Ważne

Wdrażanie w istniejącej aplikacji funkcji zawsze zastępuje zawartość tej aplikacji na platformie Azure.

  1. W obszarze Zasoby działania platformy Azure znajdź właśnie utworzony zasób aplikacji funkcji, kliknij prawym przyciskiem myszy zasób i wybierz polecenie Wdróż w aplikacji funkcji....

  2. Po wyświetleniu monitu o zastąpienie poprzednich wdrożeń wybierz pozycję Wdróż , aby wdrożyć kod funkcji w nowym zasobie aplikacji funkcji.

  3. Po zakończeniu wdrażania wybierz pozycję Wyświetl dane wyjściowe , aby wyświetlić wyniki tworzenia i wdrażania, w tym utworzone zasoby platformy Azure. Jeśli przegapisz powiadomienie, wybierz ikonę dzwonka w prawym dolnym rogu, aby zobaczyć je ponownie.

    Screenshot of the View Output window.

Publikowanie ustawień aplikacji

Ponieważ ustawienia lokalne z local.settings.json nie są automatycznie publikowane, musisz przekazać je teraz, aby funkcja działała poprawnie na platformie Azure.

Na palecie poleceń wprowadź ciąg Azure Functions: Upload Local Ustawienia..., a następnie w wierszu polecenia Select a resource (Wybierz zasób). Wybierz nazwę aplikacji funkcji.

Ponowne tworzenie subskrypcji zdarzeń

Teraz, gdy aplikacja funkcji jest uruchomiona na platformie Azure, musisz utworzyć nową subskrypcję zdarzeń. Ta nowa subskrypcja zdarzeń używa punktu końcowego funkcji na platformie Azure. Dodasz również filtr do subskrypcji zdarzeń, aby funkcja została wyzwolona tylko po dodaniu plików JPEG (.jpg) do kontenera. Na platformie Azure adres URL punktu końcowego zawiera również klucz dostępu, który pomaga zablokować aktorom innym niż usługa Event Grid uzyskiwanie dostępu do punktu końcowego.

Pobieranie klucza rozszerzenia obiektu blob

  1. W programie Visual Studio Code wybierz ikonę platformy Azure na pasku Działania. W obszarze Zasoby rozwiń subskrypcję, rozwiń węzeł Aplikacja funkcji, kliknij prawym przyciskiem myszy utworzoną aplikację funkcji i wybierz pozycję Otwórz w portalu.

  2. W obszarze Funkcje w menu po lewej stronie wybierz pozycję Klucze aplikacji.

  3. W obszarze Klucze systemowe wybierz klucz o nazwie blobs_extension i skopiuj wartość klucza.

Ta wartość zostanie uwzględnina w ciągu zapytania nowego adresu URL punktu końcowego.

Kompilowanie adresu URL punktu końcowego

Utwórz nowy adres URL punktu końcowego dla wyzwalacza usługi Blob Storage na podstawie następującego przykładu:

https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid&code=<BLOB_EXTENSION_KEY>
https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid&code=<BLOB_EXTENSION_KEY>

W tym przykładzie zastąp <FUNCTION_APP_NAME> ciąg nazwą aplikacji funkcji i zastąp <BLOB_EXTENSION_KEY> wartość uzyskaną z portalu. Jeśli użyto innej nazwy funkcji, musisz również zmienić functionName ciąg zapytania zgodnie z potrzebami.

Tworzenie filtrowanej subskrypcji zdarzeń

Ponieważ nie można zmienić adresu URL punktu końcowego subskrypcji zdarzeń, musisz utworzyć nową subskrypcję zdarzeń. W tej chwili należy również usunąć starą subskrypcję zdarzeń, ponieważ nie można jej ponownie użyć.

Tym razem dołączysz filtr do subskrypcji zdarzeń, aby tylko pliki JPEG (*.jpg) wyzwoliły funkcję.

  1. W programie Visual Studio Code wybierz ikonę platformy Azure na pasku Działania. W obszarze Zasoby rozwiń subskrypcję, rozwiń węzeł Konta magazynu, kliknij prawym przyciskiem myszy utworzone wcześniej konto magazynu i wybierz polecenie Otwórz w portalu.

  2. W witrynie Azure Portal wybierz opcję Zdarzenia z menu po lewej stronie.

  3. W oknie Zdarzenia wybierz starą subskrypcję zdarzeń opartą na narzędziu ngrok, a następnie wybierz pozycję Usuń>zapisz. Ta akcja powoduje usunięcie starej subskrypcji zdarzeń.

  4. Wybierz przycisk + Subskrypcjazdarzeń i podaj wartości z poniższej tabeli na karcie Podstawowe:

    Ustawienie Sugerowana wartość opis
    Nazwa/nazwisko myBlobAzureEventSub Nazwa identyfikująca subskrypcję zdarzeń. Możesz użyć nazwy , aby szybko znaleźć subskrypcję zdarzeń.
    Schemat zdarzeń Schemat usługi Event Grid Użyj domyślnego schematu dla zdarzeń.
    Filtrowanie do typów zdarzeń Utworzony obiekt blob
    Typ punktu końcowego Web Hook Wyzwalacz magazynu obiektów blob używa punktu końcowego elementu Web Hook. Do wyzwalacza usługi Event Grid należy użyć usługi Azure Functions.
    Punkt końcowy Nowy punkt końcowy adresu URL oparty na platformie Azure Użyj utworzonego punktu końcowego adresu URL, który zawiera wartość klucza.
  5. Wybierz pozycję Potwierdź wybór , aby zweryfikować adres URL punktu końcowego.

  6. Wybierz kartę Filtry w obszarze Filtry tematu zaznacz pole Włącz filtrowanie tematu, wpisz .jpg w polu Temat kończy się ciągiem . Spowoduje to filtrowanie zdarzeń tylko do plików JPEG.

    Add filter

  7. Wybierz pozycję Utwórz , aby utworzyć subskrypcję zdarzeń.

Weryfikowanie funkcji na platformie Azure

Po uruchomieniu całej topologii platformy Azure nadszedł czas, aby sprawdzić, czy wszystko działa poprawnie. Ponieważ jesteś już w portalu, najłatwiej jest po prostu przekazać plik stamtąd.

  1. Na stronie konta magazynu w portalu wybierz pozycję Kontenery i wybierz kontener samples-workitems .

  2. Wybierz przycisk Przekaż, aby otworzyć stronę przekazywania po prawej stronie, przejrzyj lokalny system plików, aby znaleźć .jpg plik do przekazania, a następnie wybierz przycisk Przekaż, aby przekazać obiekt blob. Teraz możesz sprawdzić, czy funkcja została uruchomiona na podstawie zdarzenia przekazywania kontenera.

  3. Na koncie magazynu wróć do strony Zdarzenia , wybierz pozycję Subskrypcje zdarzeń i powinno zostać wyświetlone zdarzenie.

  4. Po powrocie na stronę aplikacji funkcji w portalu w obszarze Funkcje wybierz pozycję Funkcje, wybierz funkcję i powinna zostać wyświetlona wartość Total Execution Count (Łączna liczba wykonań) wynosząca co najmniej jedną.

  5. W obszarze Deweloper wybierz pozycję Monitor i powinny zostać wyświetlone ślady zapisane z pomyślnych wykonań funkcji. Może wystąpić pięciominutowe opóźnienie, ponieważ zdarzenia są przetwarzane przez aplikację Szczegółowe informacje.

Czyszczenie zasobów

Gdy przejdziesz do następnego kroku i dodasz powiązanie kolejki usługi Azure Storage z funkcją, musisz zachować wszystkie zasoby na miejscu, aby opierać się na tym, co zostało już zrobione.

W przeciwnym razie możesz użyć poniższych kroków, aby usunąć aplikację funkcji i powiązane z nią zasoby, aby uniknąć ponoszenia dodatkowych kosztów.

  1. W programie Visual Studio Code naciśnij klawisz F1 , aby otworzyć paletę poleceń. W palecie poleceń wyszukaj i wybierz pozycję Azure: Open in portal.

  2. Wybierz aplikację funkcji i naciśnij klawisz Enter. Strona aplikacji funkcji zostanie otwarta w witrynie Azure Portal.

  3. Na karcie Przegląd wybierz nazwany link obok pozycji Grupa zasobów.

    Screenshot of select the resource group to delete from the function app page.

  4. Na stronie Grupa zasobów przejrzyj listę uwzględnionych zasobów i sprawdź, czy są to te, które chcesz usunąć.

  5. Wybierz pozycję Usuń grupę zasobów, a następnie postępuj zgodnie z instrukcjami.

    Usuwanie może potrwać kilka minut. Po jego zakończeniu przez kilka sekund będzie widoczne powiadomienie. Możesz również wybrać ikonę dzwonka w górnej części strony, aby wyświetlić powiadomienie.

Aby uzyskać więcej informacji na temat kosztów usługi Functions, zobacz Szacowanie kosztów planu zużycia.

Następne kroki