Bibliothèque cliente Azure WebJobs Storage Blobs pour .NET - version 5.2.1
Cette extension fournit des fonctionnalités permettant d’accéder aux objets blob stockage Azure dans Azure Functions au sein du processus.
Prise en main
Installer le package
Installez l’extension Blobs de stockage avec NuGet :
dotnet add package Microsoft.Azure.WebJobs.Extensions.Storage.Blobs
Prérequis
Vous avez besoin d’un abonnement Azure et d’un compte de stockage pour utiliser ce package.
Pour créer un compte de stockage, vous pouvez utiliser le portail Azure, Azure PowerShell ou Azure CLI. Voici un exemple utilisant Azure CLI :
az storage account create --name <your-resource-name> --resource-group <your-resource-group-name> --location westus --sku Standard_LRS
Authentifier le client
Pour que l’extension accède aux objets blob, vous aurez besoin de la chaîne de connexion qui se trouve dans le portail Azure ou à l’aide de l’extrait de code Azure CLI ci-dessous.
az storage account show-connection-string -g <your-resource-group-name> -n <your-resource-name>
La chaîne de connexion peut être fournie via le paramètre d’application AzureWebJobsStorage.
Concepts clés
Utilisation du déclencheur Blob
Le déclencheur de stockage Blob démarre une fonction lors de la détection d’un objet blob nouveau ou mis à jour. Le contenu de l’objet blob est fourni comme entrée de la fonction.
Suivez le tutoriel pour en savoir plus sur le déclenchement d’une fonction Azure lorsqu’un objet blob est modifié.
Stratégies d’écoute
Le déclencheur d’objets blob offre une poignée de stratégies lorsqu’il s’agit d’écouter la création et la modification d’objets blob. La stratégie peut être personnalisée en spécifiant Source
la BlobTrigger
propriété du (voir les exemples ci-dessous).
Stratégie par défaut
Par défaut, le déclencheur d’objet blob utilise l’interrogation qui fonctionne comme un hybride entre l’inspection de la journalisation d’analyse du stockage Azure et l’exécution d’analyses de conteneur périodiques. Les objets blob sont analysés dans des groupes de 10 000 à la fois avec un jeton de continuation utilisé entre les intervalles.
La journalisation de l’analytique de stockage Azure n’est pas activée par défaut. Pour savoir comment l’activer, consultez Journalisation des analyses de stockage Azure.
Cette stratégie n’est pas recommandée pour les applications ou scénarios à grande échelle qui nécessitent une faible latence.
Event Grid
Les événements de stockage d’objets blob peuvent être utilisés pour écouter les modifications. Cette stratégie nécessite une configuration supplémentaire.
Cette stratégie est recommandée pour les applications à grande échelle.
Utilisation de la liaison d’objets blob
La liaison d’entrée vous permet de lire des données de stockage Blob en tant qu’entrée d’une fonction Azure. La liaison de sortie vous permet de modifier et de supprimer des données de stockage d’objets Blob dans une fonction Azure.
Suivez le tutoriel sur la liaison d’entrée et le tutoriel de liaison de sortie pour en savoir plus sur l’utilisation de cette extension pour accéder aux objets blob.
Exemples
Réaction à la modification d’objets blob
Stratégie par défaut
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());
}
}
Stratégie 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());
}
}
Lecture à partir d’un flux
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());
}
}
Écriture dans le flux
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");
}
}
Liaison à une chaîne
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);
}
}
Écriture de chaîne dans un objet 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");
}
}
Liaison à un tableau d’octets
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));
}
}
Écriture d’un tableau d’octets dans un objet 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");
}
}
Liaison à TextReader et 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");
}
}
Liaison à des types de KIT de développement logiciel (SDK) Blob Stockage Azure
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);
}
}
Accès au conteneur d’objets 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);
}
}
}
Énumération d’objets blob dans un conteneur
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);
}
}
}
Configuration de l’extension
Reportez-vous à l’exemple d’application de fonctions.
Dépannage
Reportez-vous à Monitor Azure Functions pour obtenir des conseils de résolution des problèmes.
Étapes suivantes
Lisez l’introduction d’Azure Function ou la création d’un guide de fonction Azure.
Contribution
Pour plus d’informations sur la création, le test et la contribution à cette bibliothèque, consultez le CONTRIBUTING.md stockage .
Ce projet accepte les contributions et les suggestions. La plupart des contributions vous demandent d’accepter un contrat de licence de contribution (CLA) déclarant que vous avez le droit de nous accorder, et que vous nous accordez réellement, les droits d’utilisation de votre contribution. Pour plus d’informations, consultez cla.microsoft.com.
Ce projet a adopté le Code de conduite Open Source de Microsoft. Pour plus d’informations, consultez les Questions fréquentes (FAQ) sur le code de conduite ou envoyez vos questions ou vos commentaires à opencode@microsoft.com.