Zagadnienia dotyczące magazynu dla usługi Azure Functions

Usługa Azure Functions wymaga konta usługi Azure Storage podczas tworzenia wystąpienia aplikacji funkcji. Następujące usługi magazynu mogą być używane przez aplikację funkcji:

Usługa magazynu Użycie funkcji
Azure Blob Storage Zachowaj stan powiązań i kluczefunkcji 1.
Używany domyślnie w przypadku centrów zadań w usłudze Durable Functions.
Może służyć do przechowywania kodu aplikacji funkcji dla zdalnego użycia systemu Linux kompilacji zdalnej lub w ramach wdrożeń zewnętrznych adresów URL pakietów.
Azure Files2 Udział plików używany do przechowywania i uruchamiania kodu aplikacji funkcji w planie zużycia i planie Premium.
Azure Queue Storage Używany domyślnie w przypadku centrów zadań w usłudze Durable Functions. Służy do obsługi błędów i ponawiania prób w określonych wyzwalaczach usługi Azure Functions. Służy do śledzenia obiektów przez wyzwalacz usługi Blob Storage.
Azure Table storage Używany domyślnie w przypadku centrów zadań w usłudze Durable Functions.

1 Magazyn obiektów blob jest domyślnym magazynem kluczy funkcji, ale można skonfigurować magazyn alternatywny.

2 Usługa Azure Files jest domyślnie skonfigurowana, ale możesz utworzyć aplikację bez usługi Azure Files w określonych warunkach.

Ważne uwagi

Należy zdecydowanie wziąć pod uwagę następujące fakty dotyczące kont magazynu używanych przez aplikacje funkcji:

  • Gdy aplikacja funkcji jest hostowana w planie Zużycie lub planie Premium, kod funkcji i pliki konfiguracji są przechowywane w usłudze Azure Files na połączonym koncie magazynu. Po usunięciu tego konta magazynu zawartość zostanie usunięta i nie można jej odzyskać. Aby uzyskać więcej informacji, zobacz Konto magazynu zostało usunięte

  • Ważne dane, takie jak kod funkcji, klucze dostępu i inne ważne dane związane z usługą, mogą być utrwalane na koncie magazynu. Należy dokładnie zarządzać dostępem do kont magazynu używanych przez aplikacje funkcji w następujący sposób:

    • Przeprowadź inspekcję i ogranicz dostęp aplikacji i użytkowników do konta magazynu na podstawie modelu z najmniejszymi uprawnieniami. Uprawnienia do konta magazynu mogą pochodzić z akcji danych w przypisanej roli lub za pomocą uprawnień do wykonania operacji listKeys.

    • Monitoruj działanie płaszczyzny sterowania (takie jak pobieranie kluczy) i operacje płaszczyzny danych (takie jak zapisywanie w obiekcie blob) na koncie magazynu. Rozważ obsługę dzienników magazynu w lokalizacji innej niż Usługa Azure Storage. Aby uzyskać więcej informacji, zobacz Dzienniki magazynu.

Wymagania konta magazynu

Konta magazynu utworzone w ramach przepływu tworzenia aplikacji funkcji w witrynie Azure Portal mają gwarancję pracy z nową aplikacją funkcji. Jeśli zdecydujesz się używać istniejącego konta magazynu, podana lista nie zawiera niektórych nieobsługiwanych kont magazynu. Następujące ograniczenia dotyczą kont magazynu używanych przez aplikację funkcji, więc upewnij się, że istniejące konto magazynu spełnia następujące wymagania:

  • Typ konta musi obsługiwać obiekty blob, kolejki i usługi Table Storage. Niektóre konta magazynu nie obsługują kolejek i tabel. Te konta obejmują konta magazynu tylko dla obiektów blob i platformę Azure Premium Storage. Aby dowiedzieć się więcej o typach kont magazynu, zobacz Omówienie konta magazynu.

  • Nie można już użyć konta magazynu zabezpieczonego za pomocą zapory lub wirtualnej sieci prywatnej podczas tworzenia aplikacji funkcji w witrynie Azure Portal. Jednak portal obecnie nie filtruje tych zabezpieczonych kont magazynu. Aby dowiedzieć się, jak używać zabezpieczonego konta magazynu z aplikacją funkcji, zobacz Jak używać zabezpieczonego konta magazynu w usłudze Azure Functions.

  • Nie można używać zabezpieczonych kont magazynu z aplikacjami funkcji hostowanymi w planie Zużycie.

  • Podczas tworzenia aplikacji funkcji w portalu możesz wybrać istniejące konto magazynu tylko w tym samym regionie, w którym tworzysz aplikację funkcji. Jest to optymalizacja wydajności, a nie ścisłe ograniczenie. Aby dowiedzieć się więcej, zobacz Lokalizacja konta magazynu.

  • Podczas tworzenia aplikacji funkcji w planie z włączoną obsługą strefy dostępności obsługiwane są tylko konta magazynu strefowo nadmiarowego.

Aplikacje funkcji można tworzyć w planie Elastic Premium lub Dedicated (App Service) przy użyciu automatyzacji wdrażania. Należy jednak uwzględnić określone konfiguracje sieciowe w szablonie usługi ARM lub pliku Bicep. Jeśli nie uwzględnisz tych ustawień i zasobów, automatyczne wdrożenie może zakończyć się niepowodzeniem w weryfikacji. Aby uzyskać więcej informacji, zobacz Zabezpieczone wdrożenia.

Wskazówki dotyczące konta magazynu

Każda aplikacja funkcji wymaga, aby konto magazynu działało. Po usunięciu tego konta aplikacja funkcji nie zostanie uruchomiona. Aby rozwiązać problemy związane z magazynem, zobacz Jak rozwiązywać problemy związane z magazynem. Poniższe inne zagadnienia dotyczą konta magazynu używanego przez aplikacje funkcji.

Lokalizacja konta magazynu

Aby uzyskać najlepszą wydajność, aplikacja funkcji powinna używać konta magazynu w tym samym regionie, co zmniejsza opóźnienie. Witryna Azure Portal wymusza to najlepsze rozwiązanie. Jeśli z jakiegoś powodu musisz użyć konta magazynu w regionie innym niż aplikacja funkcji, musisz utworzyć aplikację funkcji poza portalem.

Konto magazynu musi być dostępne dla aplikacji funkcji. Jeśli musisz użyć zabezpieczonego konta magazynu, rozważ ograniczenie konta magazynu do sieci wirtualnej.

Ustawienie połączenia konta magazynu

Domyślnie aplikacje funkcji konfigurują AzureWebJobsStorage połączenie jako parametry połączenia przechowywane w ustawieniu aplikacji AzureWebJobsStorage, ale można również skonfigurować usługę AzureWebJobsStorage do korzystania z połączenia opartego na tożsamości bez wpisu tajnego.

Aplikacje funkcji działające w planie Zużycie (tylko system Windows) lub elastyczny plan Premium (Windows lub Linux) mogą używać usługi Azure Files do przechowywania obrazów wymaganych do włączenia dynamicznego skalowania. W przypadku tych planów ustaw parametry połączenia dla konta magazynu w ustawieniu WEBSITE_CONTENTAZUREFILECONNECTIONSTRING i nazwę udziału plików w ustawieniu WEBSITE_CONTENTSHARE. Jest to zwykle to samo konto używane dla programu AzureWebJobsStorage. Możesz również utworzyć aplikację funkcji, która nie korzysta z usługi Azure Files, ale skalowanie może być ograniczone.

Uwaga

Konto magazynu parametry połączenia należy zaktualizować podczas ponownego generowania kluczy magazynu. Przeczytaj więcej na temat zarządzania kluczami magazynu tutaj.

Udostępnione konta magazynu

Istnieje możliwość, aby wiele aplikacji funkcji współużytkować to samo konto magazynu bez żadnych problemów. Na przykład w programie Visual Studio można tworzyć wiele aplikacji przy użyciu emulatora magazynu Azurite. W takim przypadku emulator działa jak pojedyncze konto magazynu. To samo konto magazynu używane przez aplikację funkcji może być również używane do przechowywania danych aplikacji. Jednak takie podejście nie zawsze jest dobrym pomysłem w środowisku produkcyjnym.

Może być konieczne użycie oddzielnych kont magazynu, aby uniknąć kolizji identyfikatorów hosta.

Zagadnienia dotyczące zasad zarządzania cyklem życia

Nie należy stosować zasad zarządzania cyklem życia do konta usługi Blob Storage używanego przez aplikację funkcji. Usługa Functions używa usługi Blob Storage do utrwalania ważnych informacji, takich jak klucze dostępu do funkcji, a zasady mogą usuwać obiekty blob (takie jak klucze) wymagane przez hosta usługi Functions. Jeśli musisz używać zasad, wyklucz kontenery używane przez funkcje, które są poprzedzone prefiksem azure-webjobs lub scm.

Dzienniki magazynu

Ponieważ kod funkcji i klucze mogą być utrwalane na koncie magazynu, rejestrowanie aktywności względem konta magazynu jest dobrym sposobem monitorowania nieautoryzowanego dostępu. Dzienniki zasobów usługi Azure Monitor mogą służyć do śledzenia zdarzeń względem płaszczyzny danych magazynu. Aby uzyskać szczegółowe informacje na temat konfigurowania i analizowania tych dzienników, zobacz Monitorowanie usługi Azure Storage .

Dziennik aktywności usługi Azure Monitor zawiera zdarzenia płaszczyzny sterowania, w tym operację listKeys. Należy jednak również skonfigurować dzienniki zasobów dla konta magazynu, aby śledzić kolejne użycie kluczy lub innych operacji płaszczyzny danych opartych na tożsamościach. Powinna być włączona co najmniej kategoria dzienników StorageWrite, aby móc identyfikować modyfikacje danych poza normalnymi operacjami funkcji.

Aby ograniczyć potencjalny wpływ wszystkich uprawnień do magazynowania w szerokim zakresie, rozważ użycie miejsca docelowego innego niż magazyn dla tych dzienników, takiego jak Log Analytics. Aby uzyskać więcej informacji, zobacz Monitorowanie usługi Azure Blob Storage.

Optymalizowanie wydajności magazynu

Aby zmaksymalizować wydajność, użyj oddzielnego konta magazynu dla każdej aplikacji funkcji. Jest to szczególnie ważne, gdy masz wyzwalane funkcje Durable Functions lub Event Hub, które generują dużą ilość transakcji magazynu. Gdy logika aplikacji współdziała z usługą Azure Storage bezpośrednio (przy użyciu zestawu SDK usługi Storage) lub za pomocą jednego z powiązań magazynu, należy użyć dedykowanego konta magazynu. Jeśli na przykład masz funkcję wyzwalaną przez centrum zdarzeń zapisując dane w magazynie obiektów blob, użyj dwóch kont magazynu — jednego dla aplikacji funkcji, a drugiego dla obiektów blob przechowywanych przez funkcję.

Praca z obiektami blob

Kluczowym scenariuszem dla usługi Functions jest przetwarzanie plików w kontenerze obiektów blob, takich jak przetwarzanie obrazów lub analiza tonacji. Aby dowiedzieć się więcej, zobacz Process file uploads (Przetwarzanie przekazywania plików).

Wyzwalanie w kontenerze obiektów blob

Istnieje kilka sposobów wykonywania kodu funkcji na podstawie zmian w obiektach blob w kontenerze magazynu. Skorzystaj z poniższej tabeli, aby określić, który wyzwalacz funkcji najlepiej odpowiada Twoim potrzebom:

Kwestie wymagające rozważenia Blob Storage (sondowanie) Blob Storage (oparty na zdarzeniach) Queue Storage Event Grid
Opóźnienie Wysoki (do 10 minut) Niski Śred. Niski
Ograniczenia konta magazynu Konta tylko do obiektów blob nie są obsługiwane ogólnego przeznaczenia, wersja 1 nie jest obsługiwana Brak ogólnego przeznaczenia, wersja 1 nie jest obsługiwana
Wersja rozszerzenia Dowolne Storage v5.x+ Dowolne Dowolne
Przetwarza istniejące obiekty blob Tak Nie. Nie. Nie.
Filtry Wzorzec nazwy obiektu blob Filtry zdarzeń nie dotyczy Filtry zdarzeń
Wymaga subskrypcji zdarzeń Nie. Tak Nie Tak
Obsługuje dużą skalę² Nie. Tak Tak Tak
opis Domyślne zachowanie wyzwalacza, które polega na sondowaniu kontenera pod kątem aktualizacji. Aby uzyskać więcej informacji, zobacz przykłady w dokumentacji wyzwalacza usługi Blob Storage. Używa zdarzeń magazynu obiektów blob z subskrypcji zdarzeń. Source Wymaga wartości parametru .EventGrid Aby uzyskać więcej informacji, zobacz Samouczek: wyzwalanie usługi Azure Functions w kontenerach obiektów blob przy użyciu subskrypcji zdarzeń. Ciąg nazwy obiektu blob jest ręcznie dodawany do kolejki magazynu po dodaniu obiektu blob do kontenera. Ta wartość jest przekazywana bezpośrednio przez wyzwalacz usługi Queue Storage do powiązania wejściowego usługi Blob Storage w tej samej funkcji. Zapewnia elastyczność wyzwalania zdarzeń oprócz zdarzeń pochodzących z kontenera magazynu. Użyj polecenia , jeśli konieczne jest również wyzwolenie funkcji przez zdarzenia inne niżtorage. Aby uzyskać więcej informacji, zobacz Jak pracować z wyzwalaczami i powiązaniami usługi Event Grid w usłudze Azure Functions.

1 Powiązania wejściowe i wyjściowe usługi Blob Storage obsługują konta tylko do obiektów blob.
2 Duże skalowanie może być luźno zdefiniowane jako kontenery, które mają więcej niż 100 000 obiektów blob w nich lub konta magazynu, które mają więcej niż 100 aktualizacji obiektów blob na sekundę.

Szyfrowanie danych magazynu

Usługa Azure Storage szyfruje wszystkie dane na koncie magazynu magazynowanych. Więcej informacji można znaleźć w sekcji Szyfrowanie danych przechowywanych w usłudze Azure Storage.

Domyślnie dane są szyfrowane przy użyciu kluczy zarządzanych przez firmę Microsoft. Aby uzyskać dodatkową kontrolę nad kluczami szyfrowania, można podać klucze zarządzane przez klienta do użycia do szyfrowania obiektów blob i danych plików. Te klucze muszą znajdować się w usłudze Azure Key Vault dla usługi Functions, aby móc uzyskać dostęp do konta magazynu. Aby dowiedzieć się więcej, zobacz Szyfrowanie magazynowane przy użyciu kluczy zarządzanych przez klienta.

Miejsce przechowywania danych w regionie

Gdy wszystkie dane klienta muszą pozostać w jednym regionie, konto magazynu skojarzone z aplikacją funkcji musi być jedno z nadmiarowością w regionie. Należy również używać konta magazynu nadmiarowego w regionie z usługą Azure Durable Functions.

Inne dane klienta zarządzane przez platformę są przechowywane tylko w regionie, gdy hostuje się w środowisku App Service Environment (ASE) ze zrównoważonym obciążeniem wewnętrznym. Aby dowiedzieć się więcej, zobacz nadmiarowość stref środowiska ASE.

Zagadnienia dotyczące identyfikatora hosta

Usługa Functions używa wartości identyfikatora hosta jako sposobu unikatowego identyfikowania określonej aplikacji funkcji w przechowywanych artefaktach. Domyślnie ten identyfikator jest automatycznie generowany z nazwy aplikacji funkcji, obcięty do pierwszych 32 znaków. Ten identyfikator jest następnie używany podczas przechowywania informacji korelacji dla aplikacji i śledzenia na połączonym koncie magazynu. Jeśli masz aplikacje funkcji o nazwach dłuższych niż 32 znaki i gdy pierwsze 32 znaki są identyczne, to obcinanie może spowodować zduplikowanie wartości identyfikatora hosta. Gdy dwie aplikacje funkcji z identycznymi identyfikatorami hostów używają tego samego konta magazynu, występuje kolizja identyfikatora hosta, ponieważ przechowywane dane nie mogą być unikatowo połączone z poprawną aplikacją funkcji.

Uwaga

Ten sam rodzaj kolizji identyfikatora hosta może wystąpić między aplikacją funkcji w miejscu produkcyjnym a tą samą aplikacją funkcji w miejscu przejściowym, gdy oba miejsca używają tego samego konta magazynu.

Począwszy od wersji 3.x środowiska uruchomieniowego usługi Functions, wykryto kolizję identyfikatora hosta i jest rejestrowane ostrzeżenie. W wersji 4.x jest rejestrowany błąd, a host jest zatrzymany, co powoduje awarię. Więcej szczegółów na temat kolizji identyfikatora hosta można znaleźć w tym problemie.

Unikanie kolizji identyfikatora hosta

Aby uniknąć kolizji identyfikatorów hosta, można użyć następujących strategii:

  • Użyj oddzielnego konta magazynu dla każdej aplikacji funkcji lub miejsca związanego z kolizją.
  • Zmień nazwę jednej z aplikacji funkcji na wartość mniejszą niż 32 znaki, która zmienia obliczony identyfikator hosta dla aplikacji i usuwa kolizję.
  • Ustaw jawny identyfikator hosta dla co najmniej jednej zderzającej się aplikacji. Aby dowiedzieć się więcej, zobacz Zastępowanie identyfikatora hosta.

Ważne

Zmiana konta magazynu skojarzonego z istniejącą aplikacją funkcji lub zmiana identyfikatora hosta aplikacji może mieć wpływ na zachowanie istniejących funkcji. Na przykład wyzwalacz usługi Blob Storage śledzi, czy są przetwarzane poszczególne obiekty blob, zapisując potwierdzenia w ramach określonej ścieżki identyfikatora hosta w magazynie. Gdy identyfikator hosta zmieni się lub wskażesz nowe konto magazynu, wcześniej przetworzone obiekty blob mogą zostać ponownie przetworzone.

Przesłanianie identyfikatora hosta

Możesz jawnie ustawić określony identyfikator hosta dla aplikacji funkcji w ustawieniach aplikacji przy użyciu AzureFunctionsWebHost__hostid ustawienia . Aby uzyskać więcej informacji, zobacz AzureFunctionsWebHost__hostid.

W przypadku wystąpienia kolizji między miejscami należy ustawić określony identyfikator hosta dla każdego miejsca, w tym miejsce produkcyjne. Należy również oznaczyć te ustawienia jako ustawienia wdrożenia, aby nie zostały zamienione. Aby dowiedzieć się, jak tworzyć ustawienia aplikacji, zobacz Praca z ustawieniami aplikacji.

Klastry z obsługą usługi Azure Arc

Po wdrożeniu aplikacji funkcji w klastrze Kubernetes z włączoną usługą Azure Arc konto magazynu może nie być wymagane przez aplikację funkcji. W takim przypadku konto magazynu jest wymagane tylko przez usługę Functions, gdy aplikacja funkcji używa wyzwalacza, który wymaga magazynu. W poniższej tabeli przedstawiono wyzwalacze, które mogą wymagać konta magazynu i które nie.

Niewymagane może wymagać magazynu
Azure Cosmos DB
HTTP
Kafka
RabbitMQ
Service Bus
Azure SQL
Magazyn obiektów blob
Event Grid
Event Hubs
IoT Hub
Queue Storage
SendGrid
SignalR
Magazyn tabel
Czasomierz
Twilio

Aby utworzyć aplikację funkcji w klastrze Kubernetes z obsługą usługi Azure Arc bez magazynu, musisz użyć polecenia interfejsu wiersza polecenia platformy Azure az functionapp create. Wersja interfejsu wiersza polecenia platformy Azure musi zawierać wersję 0.1.7 lub nowszą wersję rozszerzenia appservice-kube. az --version Użyj polecenia , aby sprawdzić, czy rozszerzenie jest zainstalowane i czy jest poprawną wersją.

Tworzenie zasobów aplikacji funkcji przy użyciu metod innych niż interfejs wiersza polecenia platformy Azure wymaga istniejącego konta magazynu. Jeśli planujesz używać wyzwalaczy, które wymagają konta magazynu, przed utworzeniem aplikacji funkcji należy utworzyć konto.

Tworzenie aplikacji bez usługi Azure Files

Usługa Azure Files jest domyślnie skonfigurowana dla planów Elastic Premium i nieużytkowania systemu Linux jako współużytkowanego systemu plików w scenariuszach o dużej skali. System plików jest używany przez platformę dla niektórych funkcji, takich jak przesyłanie strumieniowe dzienników, ale przede wszystkim zapewnia spójność wdrożonego ładunku funkcji. Po wdrożeniu aplikacji przy użyciu zewnętrznego adresu URL pakietu zawartość aplikacji jest obsługiwana z oddzielnego systemu plików tylko do odczytu. Oznacza to, że możesz utworzyć aplikację funkcji bez usługi Azure Files. Jeśli tworzysz aplikację funkcji za pomocą usługi Azure Files, nadal jest udostępniany zapisywalny system plików. Jednak ten system plików może nie być dostępny dla wszystkich wystąpień aplikacji funkcji.

Jeśli usługa Azure Files nie jest używana, musisz spełnić następujące wymagania:

  • Musisz wdrożyć z zewnętrznego adresu URL pakietu.
  • Aplikacja nie może polegać na udostępnionym systemie plików zapisywalnym.
  • Aplikacja nie może używać wersji 1.x środowiska uruchomieniowego usługi Functions.
  • Środowiska przesyłania strumieniowego dzienników na klientach, takich jak domyślna wartość dzienników systemu plików w witrynie Azure Portal. Zamiast tego należy polegać na dziennikach usługi Application Szczegółowe informacje.

Jeśli powyższe informacje są prawidłowo uwzględniane, możesz utworzyć aplikację bez usługi Azure Files. Utwórz aplikację funkcji bez określania WEBSITE_CONTENTAZUREFILECONNECTIONSTRING ustawień aplikacji i WEBSITE_CONTENTSHARE . Te ustawienia można uniknąć, generując szablon usługi ARM dla standardowego wdrożenia, usuwając te dwa ustawienia, a następnie wdrażając szablon.

Ponieważ usługa Functions korzysta z usługi Azure Files podczas części dynamicznego procesu skalowania w poziomie, skalowanie może być ograniczone w przypadku uruchamiania bez usługi Azure Files w planach Zużycie i Elastyczna wersja Premium.

Instalowanie udziałów plików

Ta funkcja jest dostępna tylko w przypadku uruchamiania w systemie Linux.

Istniejące udziały usługi Azure Files można zainstalować w aplikacjach funkcji systemu Linux. Instalowanie udziału w aplikacji funkcji systemu Linux umożliwia używanie istniejących modeli uczenia maszynowego lub innych danych w funkcjach. Aby zainstalować istniejący udział w aplikacji funkcji systemu Linux, możesz użyć następującego polecenia.

az webapp config storage-account add

W tym poleceniu share-name jest nazwą istniejącego udziału usługi Azure Files i custom-id może być dowolnym ciągiem, który jednoznacznie definiuje udział podczas instalacji w aplikacji funkcji. Jest również ścieżką, mount-path z której jest uzyskiwany dostęp do udziału w aplikacji funkcji. mount-path musi być w formacie /dir-name, a nie może zaczynać się od /home.

Aby zapoznać się z kompletnym przykładem, zobacz skrypty w temacie Tworzenie aplikacji funkcji języka Python i instalowanie udziału usługi Azure Files.

Obecnie obsługiwany jest tylko element storage-type z AzureFiles . W danej aplikacji funkcji można zainstalować tylko pięć udziałów. Instalowanie udziału plików może zwiększyć zimny czas rozpoczęcia o co najmniej 200–300 ms, a nawet więcej, gdy konto magazynu znajduje się w innym regionie.

Zainstalowany udział jest dostępny dla kodu funkcji w mount-path określonym miejscu. Na przykład, gdy mount-path ma /path/to/mountwartość , można uzyskać dostęp do katalogu docelowego za pomocą interfejsów API systemu plików, jak w poniższym przykładzie języka Python:

import os
...

files_in_share = os.listdir("/path/to/mount")

Następne kroki

Dowiedz się więcej o opcjach hostingu usługi Azure Functions.