Biblioteka klienta obiektów blob usługi Azure WebJobs Storage dla platformy .NET — wersja 5.1.1
To rozszerzenie zapewnia funkcje uzyskiwania dostępu do obiektów blob usługi Azure Storage w Azure Functions.
Wprowadzenie
Instalowanie pakietu
Zainstaluj rozszerzenie Storage Blobs za pomocą narzędzia NuGet:
dotnet add package Microsoft.Azure.WebJobs.Extensions.Storage.Blobs
Wymagania wstępne
Do korzystania z tego pakietu potrzebna jest subskrypcja platformy Azure i konto magazynu .
Aby utworzyć nowe konto magazynu, możesz użyć witryny Azure Portal, Azure PowerShell lub interfejsu wiersza polecenia platformy Azure. Oto przykład użycia interfejsu wiersza polecenia platformy Azure:
az storage account create --name <your-resource-name> --resource-group <your-resource-group-name> --location westus --sku Standard_LRS
Uwierzytelnianie klienta
Aby rozszerzenie uzyskiwało dostęp do obiektów blob, potrzebne będą parametry połączenia, które można znaleźć w witrynie Azure Portal lub przy użyciu poniższego fragmentu wiersza polecenia platformy Azure .
az storage account show-connection-string -g <your-resource-group-name> -n <your-resource-name>
Parametry połączenia można dostarczyć za pomocą ustawienia aplikacji AzureWebJobsStorage.
Kluczowe pojęcia
Korzystanie z wyzwalacza obiektu blob
Wyzwalacz usługi Blob Storage uruchamia funkcję po wykryciu nowego lub zaktualizowanego obiektu blob. Zawartość obiektu blob jest dostarczana jako dane wejściowe funkcji.
Postępuj zgodnie z samouczkiem , aby dowiedzieć się więcej o wyzwalaniu funkcji platformy Azure po zmodyfikowaniu obiektu blob.
Strategie nasłuchiwania
Wyzwalacz obiektu blob oferuje kilka strategii, jeśli chodzi o nasłuchiwanie tworzenia i modyfikowania obiektów blob. Strategię można dostosować, określając Source
właściwość elementu BlobTrigger
(zobacz przykłady poniżej).
Strategia domyślna
Domyślnie wyzwalacz obiektów blob używa sondowania , które działa jako rozwiązanie hybrydowe między inspekcją rejestrowania analizy usługi Azure Storage a okresowym skanowaniem kontenerów. Obiekty blob są skanowane w grupach 10 000 jednocześnie z tokenem kontynuacji używanym między interwałami.
Rejestrowanie analizy usługi Azure Storage nie jest domyślnie włączone. Zobacz Rejestrowanie analizy usługi Azure Storage , aby dowiedzieć się, jak ją włączyć.
Ta strategia nie jest zalecana w przypadku aplikacji lub scenariuszy o dużej skali, które wymagają małych opóźnień.
Event Grid
Zdarzenia usługi Blob Storage mogą służyć do nasłuchiwania zmian. Ta strategia wymaga dodatkowej konfiguracji.
Ta strategia jest zalecana w przypadku aplikacji o dużej skali.
Korzystanie z powiązania obiektu blob
Powiązanie wejściowe umożliwia odczytywanie danych magazynu obiektów blob jako danych wejściowych funkcji platformy Azure. Powiązanie wyjściowe umożliwia modyfikowanie i usuwanie danych magazynu obiektów blob w funkcji platformy Azure.
Postępuj zgodnie z samouczkiem dotyczącym powiązania wejściowego i powiązaniem danych wyjściowych , aby dowiedzieć się więcej o używaniu tego rozszerzenia do uzyskiwania dostępu do obiektów blob.
Przykłady
Reagowanie na zmianę obiektu blob
Strategia domyślna
public static class BlobFunction_ReactToBlobChange
{
[FunctionName("BlobFunction")]
public static void Run(
[BlobTrigger("sample-container/sample-blob")] Stream blobStream,
ILogger logger)
{
using var blobStreamReader = new StreamReader(blobStream);
logger.LogInformation("Blob sample-container/sample-blob has been updated with content: {content}", blobStreamReader.ReadToEnd());
}
}
Strategia usługi Event Grid
public static class BlobFunction_ReactToBlobChange_EventGrid
{
[FunctionName("BlobFunction")]
public static void Run(
[BlobTrigger("sample-container/sample-blob", Source = BlobTriggerSource.EventGrid)] Stream blobStream,
ILogger logger)
{
using var blobStreamReader = new StreamReader(blobStream);
logger.LogInformation("Blob sample-container/sample-blob has been updated with content: {content}", blobStreamReader.ReadToEnd());
}
}
Odczytywanie ze strumienia
public static class BlobFunction_ReadStream
{
[FunctionName("BlobFunction")]
public static void Run(
[BlobTrigger("sample-container/sample-blob-1")] Stream blobStream1,
[Blob("sample-container/sample-blob-2", FileAccess.Read)] Stream blobStream2,
ILogger logger)
{
using var blobStreamReader1 = new StreamReader(blobStream1);
logger.LogInformation("Blob sample-container/sample-blob-1 has been updated with content: {content}", blobStreamReader1.ReadToEnd());
using var blobStreamReader2 = new StreamReader(blobStream2);
logger.LogInformation("Blob sample-container/sample-blob-2 has content: {content}", blobStreamReader2.ReadToEnd());
}
}
Zapisywanie w strumieniu
public static class BlobFunction_WriteStream
{
[FunctionName("BlobFunction")]
public static async Task Run(
[BlobTrigger("sample-container/sample-blob-1")] Stream blobStream1,
[Blob("sample-container/sample-blob-2", FileAccess.Write)] Stream blobStream2,
ILogger logger)
{
await blobStream1.CopyToAsync(blobStream2);
logger.LogInformation("Blob sample-container/sample-blob-1 has been copied to sample-container/sample-blob-2");
}
}
Wiązanie z ciągiem
public static class BlobFunction_String
{
[FunctionName("BlobFunction")]
public static void Run(
[BlobTrigger("sample-container/sample-blob-1")] string blobContent1,
[Blob("sample-container/sample-blob-2")] string blobContent2,
ILogger logger)
{
logger.LogInformation("Blob sample-container/sample-blob-1 has been updated with content: {content}", blobContent1);
logger.LogInformation("Blob sample-container/sample-blob-2 has content: {content}", blobContent2);
}
}
Zapisywanie ciągu w obiekcie blob
public static class BlobFunction_String_Write
{
[FunctionName("BlobFunction")]
public static void Run(
[BlobTrigger("sample-container/sample-blob-1")] string blobContent1,
[Blob("sample-container/sample-blob-2")] out string blobContent2,
ILogger logger)
{
logger.LogInformation("Blob sample-container/sample-blob-1 has been updated with content: {content}", blobContent1);
blobContent2 = blobContent1;
logger.LogInformation("Blob sample-container/sample-blob-1 has been copied to sample-container/sample-blob-2");
}
}
Wiązanie z tablicą bajtów
public static class BlobFunction_ByteArray
{
[FunctionName("BlobFunction")]
public static void Run(
[BlobTrigger("sample-container/sample-blob-1")] byte[] blobContent1,
[Blob("sample-container/sample-blob-2")] byte[] blobContent2,
ILogger logger)
{
logger.LogInformation("Blob sample-container/sample-blob-1 has been updated with content: {content}", Encoding.UTF8.GetString(blobContent1));
logger.LogInformation("Blob sample-container/sample-blob-2 has content: {content}", Encoding.UTF8.GetString(blobContent2));
}
}
Zapisywanie tablicy bajtów w obiekcie blob
public static class BlobFunction_ByteArray_Write
{
[FunctionName("BlobFunction")]
public static void Run(
[BlobTrigger("sample-container/sample-blob-1")] byte[] blobContent1,
[Blob("sample-container/sample-blob-2")] out byte[] blobContent2,
ILogger logger)
{
logger.LogInformation("Blob sample-container/sample-blob-1 has been updated with content: {content}", Encoding.UTF8.GetString(blobContent1));
blobContent2 = blobContent1;
logger.LogInformation("Blob sample-container/sample-blob-1 has been copied to sample-container/sample-blob-2");
}
}
Wiązanie z kontrolkami TextReader i TextWriter
public static class BlobFunction_TextReader_TextWriter
{
[FunctionName("BlobFunction")]
public static async Task Run(
[BlobTrigger("sample-container/sample-blob-1")] TextReader blobContentReader1,
[Blob("sample-container/sample-blob-2")] TextWriter blobContentWriter2,
ILogger logger)
{
while (blobContentReader1.Peek() >= 0)
{
await blobContentWriter2.WriteLineAsync(await blobContentReader1.ReadLineAsync());
}
logger.LogInformation("Blob sample-container/sample-blob-1 has been copied to sample-container/sample-blob-2");
}
}
Wiązanie z typami zestawu SDK obiektów blob usługi Azure Storage
public static class BlobFunction_BlobClient
{
[FunctionName("BlobFunction")]
public static async Task Run(
[BlobTrigger("sample-container/sample-blob-1")] BlobClient blobClient1,
[Blob("sample-container/sample-blob-2")] BlobClient blobClient2,
ILogger logger)
{
BlobProperties blobProperties1 = await blobClient1.GetPropertiesAsync();
logger.LogInformation("Blob sample-container/sample-blob-1 has been updated on: {datetime}", blobProperties1.LastModified);
BlobProperties blobProperties2 = await blobClient2.GetPropertiesAsync();
logger.LogInformation("Blob sample-container/sample-blob-2 has been updated on: {datetime}", blobProperties2.LastModified);
}
}
Uzyskiwanie dostępu do kontenera obiektów blob
public static class BlobFunction_AccessContainer
{
[FunctionName("BlobFunction")]
public static async Task Run(
[BlobTrigger("sample-container/sample-blob")] Stream blobStream,
[Blob("sample-container")] BlobContainerClient blobContainerClient,
ILogger logger)
{
logger.LogInformation("Blobs within container:");
await foreach (BlobItem blobItem in blobContainerClient.GetBlobsAsync())
{
logger.LogInformation(blobItem.Name);
}
}
}
Wyliczanie obiektów blob w kontenerze
public static class BlobFunction_EnumerateBlobs_Stream
{
[FunctionName("BlobFunction")]
public static async Task Run(
[BlobTrigger("sample-container/sample-blob")] Stream blobStream,
[Blob("sample-container")] IEnumerable<Stream> blobs,
ILogger logger)
{
logger.LogInformation("Blobs contents within container:");
foreach (Stream content in blobs)
{
using var blobStreamReader = new StreamReader(content);
logger.LogInformation(await blobStreamReader.ReadToEndAsync());
}
}
}
public static class BlobFunction_EnumerateBlobs_BlobClient
{
[FunctionName("BlobFunction")]
public static void Run(
[BlobTrigger("sample-container/sample-blob")] Stream blobStream,
[Blob("sample-container")] IEnumerable<BlobClient> blobs,
ILogger logger)
{
logger.LogInformation("Blobs within container:");
foreach (BlobClient blob in blobs)
{
logger.LogInformation(blob.Name);
}
}
}
Konfigurowanie rozszerzenia
Zapoznaj się z przykładową aplikacją funkcji.
Rozwiązywanie problemów
Aby uzyskać wskazówki dotyczące rozwiązywania problemów, zapoznaj się z artykułem Monitorowanie Azure Functions.
Następne kroki
Przeczytaj wprowadzenie do funkcji platformy Azure lub przewodnik po tworzeniu funkcji platformy Azure.
Współtworzenie
Zobacz CONTRIBUTING.md Storage , aby uzyskać szczegółowe informacje na temat kompilowania, testowania i współtworzenia tej biblioteki.
W tym projekcie zachęcamy do współtworzenia i zgłaszania sugestii. Współtworzenie w większości przypadków wymaga zgody na umowę licencyjną dotyczącą współautorów (CLA, Contributor License Agreement), zgodnie z którą współautor ma prawo udzielić i faktycznie udziela nam praw do używania wytworzonej przez siebie zawartości. Aby uzyskać szczegółowe informacje, odwiedź cla.microsoft.com.
W tym projekcie przyjęto Kodeks postępowania oprogramowania Open Source firmy Microsoft. Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące kodeksu postępowania lub skontaktuj się z opencode@microsoft.com dodatkowymi pytaniami lub komentarzami.