Megosztás a következőn keresztül:


Azure Blob Storage-eseményindító az Azure Functionshez

A Blob Storage-eseményindító új vagy frissített blob észlelésekor elindít egy függvényt. A blob tartalma a függvény bemeneteként van megadva.

Tipp.

A függvénykódot többféleképpen is végrehajthatja a tároló blobjainak módosítása alapján. Ha a Blob Storage-eseményindító használata mellett dönt, vegye figyelembe, hogy két implementáció érhető el: egy lekérdezésalapú (ebben a cikkben hivatkozott) és egy eseményalapú. Javasoljuk, hogy az eseményalapú implementációt használja, mert kisebb a késése, mint a másiknak. A Flex Consumption csomag emellett csak az eseményalapú Blob Storage-eseményindítót támogatja.

A Blob Storage-eseményindító két implementációja közötti különbségekről, valamint az egyéb aktiválási lehetőségekről további információt a Blobok használata című témakörben talál.

A beállítással és a konfigurációval kapcsolatos információkért tekintse meg az áttekintést.

Fontos

Ez a cikk lapokat használ a Node.js programozási modell több verziójának támogatásához. A v4-modell általánosan elérhető, és úgy lett kialakítva, hogy rugalmasabb és intuitívabb felhasználói élményt nyújtson JavaScript- és TypeScript-fejlesztők számára. A v4-modell működésével kapcsolatos további információkért tekintse meg az Azure Functions Node.js fejlesztői útmutatóját. A v3 és a v4 közötti különbségekről a migrálási útmutatóban olvashat bővebben.

Az Azure Functions két Python-programozási modellt támogat. A kötések definiálásának módja a választott programozási modelltől függ.

A Python v2 programozási modell lehetővé teszi, hogy a kötéseket dekorátorokkal definiálja közvetlenül a Python-függvénykódban. További információt a Python fejlesztői útmutatójában talál.

Ez a cikk mindkét programozási modellt támogatja.

Példa

A C#-függvények a következő C#-módok egyikével hozhatók létre:

  • Izolált feldolgozómodell: Lefordított C# függvény, amely a futtatókörnyezettől elkülönített feldolgozói folyamatban fut. Izolált feldolgozói folyamat szükséges az LTS- és nem LTS-verziókon futó C#-függvények támogatásához .NET és .NET-keretrendszer. Az izolált feldolgozói folyamatfüggvények bővítményei névtereket használnak Microsoft.Azure.Functions.Worker.Extensions.* .
  • Folyamaton belüli modell: Lefordított C# függvény, amely ugyanabban a folyamatban fut, mint a Functions-futtatókörnyezet. A modell egy változatában a Functions C#-szkriptekkel futtatható, amely elsősorban a C#-portál szerkesztéséhez támogatott. A folyamaton belüli függvények bővítményei névtereket használnak Microsoft.Azure.WebJobs.Extensions.* .

Az alábbi példa egy C# függvény , amely egy izolált feldolgozófolyamatban fut, és blob-eseményindítót használ blobbemenettel és blobkimeneti blobkötésekkel. A függvényt egy blob létrehozása váltja ki a test-samples-trigger tárolóban. Beolvassa a szövegfájlt a test-samples-input tárolóból, és létrehoz egy új szövegfájlt egy kimeneti tárolóban az aktivált fájl neve alapján.

public static class BlobFunction
{
    [Function(nameof(BlobFunction))]
    [BlobOutput("test-samples-output/{name}-output.txt")]
    public static string Run(
        [BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
        [BlobInput("test-samples-input/sample1.txt")] string myBlob,
        FunctionContext context)
    {
        var logger = context.GetLogger("BlobFunction");
        logger.LogInformation("Triggered Item = {myTriggerItem}", myTriggerItem);
        logger.LogInformation("Input Item = {myBlob}", myBlob);

        // Blob Output
        return "blob-output content";
    }
}

Ez a függvény naplót ír, amikor blobot adnak hozzá vagy frissítenek a myblob tárolóban.

@FunctionName("blobprocessor")
public void run(
  @BlobTrigger(name = "file",
               dataType = "binary",
               path = "myblob/{name}",
               connection = "MyStorageAccountAppSetting") byte[] content,
  @BindingName("name") String filename,
  final ExecutionContext context
) {
  context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
}

Az alábbi példa egy TypeScript-kódot ábrázoló blob-eseményindítót mutat be. A függvény naplót ír, amikor blobot adnak hozzá vagy frissítenek a samples-workitems tárolóban.

A blob-eseményindító elérési útjának samples-workitems/{name} sztringje {name} létrehoz egy kötési kifejezést, amelyet a függvénykódban használhat az eseményindító blob fájlnevének eléréséhez. További információ: Blobnévminták a cikk későbbi részében.

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',
    handler: storageBlobTrigger1,
});

Az alábbi példa egy Blob Trigger JavaScript-kódot mutat be. A függvény naplót ír, amikor blobot adnak hozzá vagy frissítenek a samples-workitems tárolóban.

A blob-eseményindító elérési útjának samples-workitems/{name} sztringje {name} létrehoz egy kötési kifejezést, amelyet a függvénykódban használhat az eseményindító blob fájlnevének eléréséhez. További információ: Blobnévminták a cikk későbbi részében.

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

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

Az alábbi példa bemutatja, hogyan hozhat létre olyan függvényt, amely akkor fut, amikor egy fájlt hozzáadnak a Blob Storage-tárolóhoz source .

A függvénykonfigurációs fájl (function.json) tartalmaz egy kötést a type blobTrigger következővel, és direction az értékre van inállítva.

{
  "bindings": [
    {
      "name": "InputBlob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "source/{name}",
      "connection": "MyStorageAccountConnectionString"
    }
  ]
}

Itt találja a run.ps1 fájlhoz tartozó kódot.

param([byte[]] $InputBlob, $TriggerMetadata)

Write-Host "PowerShell Blob trigger: Name: $($TriggerMetadata.Name) Size: $($InputBlob.Length) bytes"

Ez a példa SDK-típusokat használ a Blob Storage-eseményindító által biztosított mögöttes BlobClient objektum közvetlen eléréséhez:

import logging

import azure.functions as func
import azurefunctions.extensions.bindings.blob as blob

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.blob_trigger(
    arg_name="client", path="PATH/TO/BLOB", connection="AzureWebJobsStorage"
)
def blob_trigger(client: blob.BlobClient):
    logging.info(
        f"Python blob trigger function processed blob \n"
        f"Properties: {client.get_blob_properties()}\n"
        f"Blob content head: {client.download_blob().read(size=1)}"
    )

Példák más SDK-típusok használatára, lásd a példákat és StorageStreamDownloader a ContainerClient példákat.

További információkért, beleértve az SDK-típuskötések projektbeli engedélyezését, tekintse meg az SDK-típuskötéseket.

Ez a példa naplózza a bejövő blob metaadatainak adatait.

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="BlobTrigger1")
@app.blob_trigger(arg_name="myblob", 
                  path="PATH/TO/BLOB",
                  connection="CONNECTION_SETTING")
def test_function(myblob: func.InputStream):
   logging.info(f"Python blob trigger function processed blob \n"
                f"Name: {myblob.name}\n"
                f"Blob Size: {myblob.length} bytes")

Attribútumok

A folyamaton belüli és az izolált feldolgozói folyamat C# kódtárai a BlobAttribute attribútummal határozzák meg a függvényt. A C#-szkript ehelyett egy function.json konfigurációs fájlt használ a C#-szkriptelési útmutatóban leírtak szerint.

Az attribútum konstruktora a következő paramétereket veszi fel:

Paraméter Leírás
BlobPath A blob elérési útja.
Kapcsolat Egy alkalmazásbeállítás vagy beállításgyűjtemény neve, amely meghatározza, hogyan csatlakozhat az Azure Blobshoz. Lásd: Kapcsolatok.
Access (Hozzáférés) Azt jelzi, hogy olvas vagy ír.
Forrás Beállítja az eseményindító esemény forrását. Event Grid-alapú blob-eseményindítóhoz használhatóBlobTriggerSource.EventGrid, amely sokkal kisebb késést biztosít. Az alapértelmezett beállítás az BlobTriggerSource.LogsAndContainerScan, amely a szabványos lekérdezési mechanizmust használja a tároló változásainak észlelésére.

Íme egy BlobTrigger attribútum egy metódus-aláírásban:

[Function(nameof(BlobFunction))]
[BlobOutput("test-samples-output/{name}-output.txt")]
public static string Run(
    [BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
    [BlobInput("test-samples-input/sample1.txt")] string myBlob,
    FunctionContext context)

Helyi fejlesztéskor adja hozzá az alkalmazásbeállításokat a gyűjtemény local.settings.json fájljáhozValues.

Dekorátorok

Csak a Python v2 programozási modellre vonatkozik.

A dekorátorokkal definiált Python v2-függvények esetében a dekorátoron a blob_trigger következő tulajdonságok határozzák meg a Blob Storage-eseményindítót:

Tulajdonság Leírás
arg_name Deklarálja a paraméter nevét a függvény-aláírásban. A függvény aktiválásakor ennek a paraméternek az értéke tartalmazza az üzenetsor-üzenet tartalmát.
path A monitorozni kívánt tároló . Lehet, hogy blobnévminta.
connection A tárfiók kapcsolati sztringjét.
source Beállítja az eseményindító esemény forrását. Event Grid-alapú blob-eseményindítóhoz használhatóEventGrid, amely sokkal kisebb késést biztosít. Az alapértelmezett beállítás az LogsAndContainerScan, amely a szabványos lekérdezési mechanizmust használja a tároló változásainak észlelésére.

A function.json használatával definiált Python-függvények esetében lásd a Konfiguráció szakaszt.

Jegyzetek

Az @BlobTrigger attribútum segítségével hozzáférést adhat a függvényt aktiváló blobhoz. Részletekért tekintse meg az eseményindító példáját . source A tulajdonság használatával állítsa be az eseményindító esemény forrását. Event Grid-alapú blob-eseményindítóhoz használhatóEventGrid, amely sokkal kisebb késést biztosít. Az alapértelmezett beállítás az LogsAndContainerScan, amely a szabványos lekérdezési mechanizmust használja a tároló változásainak észlelésére. |

Konfiguráció

Csak a Python v1 programozási modellre vonatkozik.

Az alábbi táblázat a metódusnak app.storageBlob() átadott objektumon options beállítható tulajdonságokat ismerteti.

Tulajdonság Leírás
ösvény A monitorozni kívánt tároló . Lehet, hogy blobnévminta.
kapcsolat Egy alkalmazásbeállítás vagy beállításgyűjtemény neve, amely meghatározza, hogyan csatlakozhat az Azure Blobshoz. Lásd: Kapcsolatok.
forrás Beállítja az eseményindító esemény forrását. Event Grid-alapú blob-eseményindítóhoz használhatóEventGrid, amely sokkal kisebb késést biztosít. Az alapértelmezett beállítás az LogsAndContainerScan, amely a szabványos lekérdezési mechanizmust használja a tároló változásainak észlelésére.

Az alábbi táblázat a function.json fájlban beállított kötéskonfigurációs tulajdonságokat ismerteti.

function.json tulajdonság Leírás
type A beállításnak a blobTriggerkövetkezőnek kell lennie: . Ez a tulajdonság automatikusan be van állítva, amikor létrehozza az eseményindítót az Azure Portalon.
direction A beállításnak a inkövetkezőnek kell lennie: . Ez a tulajdonság automatikusan be van állítva, amikor létrehozza az eseményindítót az Azure Portalon. A használati szakaszban kivételeket jegyezünk fel.
név Annak a változónak a neve, amely a függvénykódban a blobot jelöli.
ösvény A monitorozni kívánt tároló . Lehet, hogy blobnévminta.
kapcsolat Egy alkalmazásbeállítás vagy beállításgyűjtemény neve, amely meghatározza, hogyan csatlakozhat az Azure Blobshoz. Lásd: Kapcsolatok.
forrás Beállítja az eseményindító esemény forrását. Event Grid-alapú blob-eseményindítóhoz használhatóEventGrid, amely sokkal kisebb késést biztosít. Az alapértelmezett beállítás az LogsAndContainerScan, amely a szabványos lekérdezési mechanizmust használja a tároló változásainak észlelésére.

A teljes példákért tekintse meg a Példa szakaszt .

Metaadatok

A blob-eseményindító számos metaadat-tulajdonságot biztosít. Ezek a tulajdonságok a kötési kifejezések részeként használhatók más kötésekben vagy a kód paramétereiként. Ezek az értékek ugyanolyan szemantikával rendelkeznek, mint a CloudBlob típus.

Tulajdonság Típus Leírás
BlobTrigger string Az eseményindító blob elérési útja.
Uri System.Uri Az elsődleges hely blobjának URI-ja.
Properties BlobProperties A blob rendszertulajdonságai.
Metadata IDictionary<string,string> A blob felhasználó által definiált metaadatai.

Az alábbi példa naplózza az eseményindító blob elérési útját, beleértve a tárolót is:

public static void Run(string myBlob, string blobTrigger, ILogger log)
{
    log.LogInformation($"Full blob path: {blobTrigger}");
} 

Metaadatok

A blob-eseményindító számos metaadat-tulajdonságot biztosít. Ezek a tulajdonságok a kötési kifejezések részeként használhatók más kötésekben vagy a kód paramétereiként.

Tulajdonság Leírás
blobTrigger Az eseményindító blob elérési útja.
uri Az elsődleges hely blobjának URI-ja.
properties A blob rendszertulajdonságai.
metadata A blob felhasználó által definiált metaadatai.

A metaadatok a triggerMetadata megadott context objektum tulajdonságából kérhetők le, ahogyan az alábbi példában látható, amely naplózza az eseményindító blob elérési útját (blobTriggerbeleértve a tárolót is):

context.log(`Full blob path: ${context.triggerMetadata.blobTrigger}`);

Metaadatok

A metaadatok a $TriggerMetadata paraméteren keresztül érhetők el.

Használat

A Blob-eseményindító által támogatott kötéstípusok a bővítménycsomag verziójától és a függvényalkalmazásban használt C# módtól függnek.

A blob-eseményindító a következő típusokhoz tud kapcsolódni:

Típus Leírás
string A blob tartalma sztringként. Akkor használható, ha a blob tartalma egyszerű szöveg.
byte[] A blobtartalom bájtja.
JSON szerializálható típusok Ha egy blob JSON-adatokat tartalmaz, a Functions megpróbálja deszerializálni a JSON-adatokat egy egyszerű régi CLR-objektum (POCO) típusba.
Stream1 A blobtartalom bemeneti adatfolyama.
BlobClient1,
BlockBlobClient1,
PageBlobClient1,
AppendBlobClient1,
BlobBaseClient1
A blobhoz csatlakoztatott ügyfél. Ez a típuskészlet biztosítja a blob feldolgozásának legnagyobb vezérlését, és a blobba való visszaírásra is használható, ha a kapcsolat megfelelő engedéllyel rendelkezik.

1 Ezeknek a típusoknak a használatához hivatkoznia kell a Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 6.0.0-s vagy újabb verziójára, valamint az SDK-típuskötések gyakori függőségeire.

Kötés a stringblob méretéhez, vagy Byte[] csak akkor ajánlott, ha a blob mérete kicsi. Ez azért ajánlott, mert a blob teljes tartalma betöltődik a memóriába. A legtöbb blobhoz használjon vagy írjon be egy típust Stream BlobClient . További információ: Egyidejűség és memóriahasználat.

Ha hibaüzenet jelenik meg a Storage SDK-típusok egyikéhez való kötéskor, győződjön meg arról, hogy rendelkezik a megfelelő Storage SDK-verzióra mutató hivatkozással.

A StorageAccountAttribute használatával is megadhatja a használni kívánt tárfiókot. Ezt akkor teheti meg, ha más tárfiókot kell használnia, mint a tár más funkcióit. A konstruktor egy tárolási kapcsolati sztring tartalmazó alkalmazásbeállítás nevét veszi fel. Az attribútum a paraméter, a metódus vagy az osztály szintjén alkalmazható. Az alábbi példa az osztályszintet és a metódusszintet mutatja be:

[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
    [FunctionName("BlobTrigger")]
    [StorageAccount("FunctionLevelStorageAppSetting")]
    public static void Run( //...
{
    ....
}

A használni kívánt tárfiók meghatározása a következő sorrendben történik:

  • Az BlobTrigger attribútum tulajdonsága Connection .
  • Az StorageAccount attribútummal azonos paraméterre BlobTrigger alkalmazott attribútum.
  • A StorageAccount függvényre alkalmazott attribútum.
  • Az StorageAccount osztályra alkalmazott attribútum.
  • A függvényalkalmazás alapértelmezett tárfiókja, amely az AzureWebJobsStorage alkalmazásbeállításban van definiálva.

Az @BlobTrigger attribútum segítségével hozzáférést adhat a függvényt aktiváló blobhoz. Részletekért tekintse meg az eseményindító példáját .

A blobadatok elérése a függvény első argumentumaként.

A blobadatok elérése egy olyan paraméteren keresztül, amely megfelel a kötés névparamétere által a function.json fájlban megadott névnek.

Blobadatok elérése az InputStreamként beírt paraméteren keresztül. Részletekért tekintse meg az eseményindító példáját .

A Functions támogatja az Azure Blob Storage Python SDK típusú kötéseit is, amelyek lehetővé teszi a blobadatok használatát az alábbi mögöttes SDK-típusok használatával:

Fontos

A Python SDK-típusok támogatása jelenleg előzetes verzióban érhető el, és csak a Python v2 programozási modell esetében támogatott. További információ: SDK-típusok a Pythonban.

Kapcsolatok

A connection tulajdonság a környezetkonfigurációra mutató hivatkozás, amely meghatározza, hogy az alkalmazásnak hogyan kell csatlakoznia az Azure Blobshoz. A következőt határozhatja meg:

Ha a konfigurált érték egy adott beállítás pontos egyezése, a többi beállítás előtagja pedig egyezik, akkor a rendszer a pontos egyezést használja.

Kapcsolati sztring

A kapcsolati sztring beszerzéséhez kövesse a tárfiók hozzáférési kulcsainak kezelése című témakörben ismertetett lépéseket. A kapcsolati sztring általános célú tárfióknak kell lennie, nem Blob Storage-fióknak.

Ezt a kapcsolati sztring a kötéskonfiguráció tulajdonsága által connection megadott értéknek megfelelő névvel rendelkező alkalmazásbeállításban kell tárolni.

Ha az alkalmazásbeállítás neve az "AzureWebJobs" névvel kezdődik, itt csak a név fennmaradó részét adhatja meg. Ha például a "MyStorage" értékre van állítva connection , a Functions-futtatókörnyezet egy "AzureWebJobsMyStorage" nevű alkalmazásbeállítást keres. Ha üresen hagyjaconnection, a Functions-futtatókörnyezet az alapértelmezett Storage-kapcsolati sztring használja a névvel ellátott AzureWebJobsStoragealkalmazásbeállításban.

Identitásalapú kapcsolatok

Ha a bővítmény 5.x vagy újabb verzióját használja (a 3.x vagy újabb csomag non-.NET nyelvi veremekhez), ahelyett, hogy titkos kapcsolati sztring használ, az alkalmazás Microsoft Entra-identitást használhat. Identitás használatához olyan beállításokat kell megadnia egy közös előtag alatt, amely leképezi a tulajdonságot az connection eseményindító és a kötés konfigurációjában.

Ha az "AzureWebJobsStorage" beállítást választjaconnection, olvassa el a Csatlakozás a gazdagép tárolójához identitással című témakört. Az összes többi kapcsolat esetében a bővítményhez a következő tulajdonságok szükségesek:

Tulajdonság Környezeti változó sablonja Leírás Példaérték
Blob Service URI <CONNECTION_NAME_PREFIX>__serviceUri1 Annak a blobszolgáltatásnak az adatsíkja, amelyhez csatlakozik, a HTTPS-séma használatával. <https:// storage_account_name.blob.core.windows.net>

Az 1 <CONNECTION_NAME_PREFIX>__blobServiceUri aliasként használható. Ha a kapcsolatkonfigurációt egy blob-eseményindító fogja használni, blobServiceUri azt is mellékelnie queueServiceUrikell. Lásd alább.

Az serviceUri űrlap nem használható, ha az általános kapcsolatkonfigurációt blobokon, üzenetsorokon és/vagy táblákon kell használni. Az URI csak a blobszolgáltatást tudja kijelölni. Alternatív megoldásként külön URI-t is megadhat az egyes szolgáltatásokhoz, így egyetlen kapcsolat használható. Ha mindkét verzió meg van adva, a rendszer a többszolgáltatásos űrlapot használja. Több szolgáltatás kapcsolatának konfigurálásához a következő helyett <CONNECTION_NAME_PREFIX>__serviceUriállítsa be a következőt:

Tulajdonság Környezeti változó sablonja Leírás Példaérték
Blob Service URI <CONNECTION_NAME_PREFIX>__blobServiceUri Annak a blobszolgáltatásnak az adatsíkja, amelyhez csatlakozik, a HTTPS-séma használatával. <https:// storage_account_name.blob.core.windows.net>
Queue Service URI (a 2. blob triggerekhezszükséges) <CONNECTION_NAME_PREFIX>__queueServiceUri Egy üzenetsor-szolgáltatás adatsíkjának URI-ja a HTTPS-séma használatával. Ez az érték csak a blob-eseményindítókhoz szükséges. <https:// storage_account_name.queue.core.windows.net>

2 A blob-eseményindító több újrapróbálkozási művelet hibáit is kezeli, ha méregblobokat ír egy üzenetsorba. serviceUri Az űrlapon a rendszer a AzureWebJobsStorage kapcsolatot használja. A beállításkor blobServiceUriazonban egy üzenetsor-szolgáltatás URI-jának is meg kell adni.queueServiceUri Javasoljuk, hogy a szolgáltatást a blobszolgáltatással azonos tárfiókból használja. Arról is gondoskodnia kell, hogy az eseményindító képes legyen üzeneteket olvasni és írni a konfigurált üzenetsor-szolgáltatásban egy olyan szerepkör hozzárendelésével, mint a Storage Queue Data Contributor.

Más tulajdonságok is beállíthatók a kapcsolat testreszabásához. Tekintse meg az identitásalapú kapcsolatok gyakori tulajdonságait.

Az Azure Functions szolgáltatásban üzemeltetett identitásalapú kapcsolatok felügyelt identitást használnak. A rendszer alapértelmezés szerint a rendszer által hozzárendelt identitást használja, bár a felhasználó által hozzárendelt identitás megadható a credential tulajdonságokkal együtt clientID . Vegye figyelembe, hogy a felhasználó által hozzárendelt identitás erőforrás-azonosítóval való konfigurálása nem támogatott. Ha más környezetekben, például helyi fejlesztésben fut, a rendszer ehelyett a fejlesztői identitást használja, bár ez testre szabható. Lásd: Helyi fejlesztés identitásalapú kapcsolatokkal.

Engedély megadása az identitáshoz

Bármilyen identitást is használ, rendelkeznie kell a kívánt műveletek végrehajtásához szükséges engedélyekkel. A legtöbb Azure-szolgáltatás esetében ez azt jelenti, hogy egy szerepkört kell hozzárendelnie az Azure RBAC-ben beépített vagy egyéni szerepkörökkel, amelyek biztosítják ezeket az engedélyeket.

Fontos

A célszolgáltatás bizonyos engedélyeket közzétehet, amelyek nem minden környezethez szükségesek. Ahol lehetséges, tartsa be a minimális jogosultság elvét, és csak az identitáshoz szükséges jogosultságokat adja meg. Ha például az alkalmazásnak csak adatforrásból kell olvasnia, használjon olyan szerepkört, amely csak olvasási engedéllyel rendelkezik. Nem lenne helyénvaló olyan szerepkört hozzárendelni, amely lehetővé teszi az írást is a szolgáltatáshoz, mivel ez túlzott engedély lenne egy olvasási művelethez. Hasonlóképpen meg szeretné győződni arról, hogy a szerepkör-hozzárendelés csak az elolvasandó erőforrásokra terjed ki.

Létre kell hoznia egy szerepkör-hozzárendelést, amely futásidőben hozzáférést biztosít a blobtárolóhoz. A tulajdonoshoz hasonló felügyeleti szerepkörök nem elegendőek. Az alábbi táblázat olyan beépített szerepköröket mutat be, amelyek a Blob Storage-bővítmény normál működésben való használatakor ajánlottak. Előfordulhat, hogy az alkalmazás további engedélyeket igényel az Ön által írt kód alapján.

Kötés típusa Példa beépített szerepkörökre
Eseményindító Storage Blob Data Owner and Storage Queue Data Contributor1

További engedélyeket is meg kell adni az AzureWebJobsStorage-kapcsolatnak.2
Bemeneti kötés Storage-blobadatok olvasója
Kimeneti kötés Storage-blobadatok tulajdonosa

1 A blob-eseményindító több újrapróbálkozás során is kezeli a hibákat, ha méregblobokat ír a kapcsolat által megadott tárfiók egyik üzenetsorába.

2 Az AzureWebJobsStorage kapcsolat belsőleg használatos az eseményindítót engedélyező blobokhoz és üzenetsorokhoz. Ha identitásalapú kapcsolat használatára van konfigurálva, az alapértelmezett követelményen túl további engedélyekre van szüksége. A szükséges engedélyekre a Storage Blob Data Owner, a Storage Queue Data Közreműködő és a Tárfiók közreműködői szerepkörei vonatkoznak. További információ: Csatlakozás a gazdagép tárolójához identitással.

Blobnévminták

Blobnévmintát path a function.json tulajdonságában vagy az BlobTrigger attribútumkonstruktorban adhat meg. A névminta lehet szűrő vagy kötési kifejezés. A következő szakaszok példákat mutatnak be.

Tipp.

A tárolónevek nem tartalmazhatnak feloldót a névmintában.

Fájlnév és -bővítmény lekérése

Az alábbi példa bemutatja, hogyan lehet külön kapcsolódni a blobfájl nevéhez és bővítményéhez:

"path": "input/{blobname}.{blobextension}",

Ha a blob neve original-Blob1.txt, akkor a függvénykódban szereplő blobname értékek és blobextension változók értéke original-Blob1 és txt.

Szűrés blobnév alapján

Az alábbi példa csak az input "original-" sztringgel kezdődő tárolóban lévő blobokon aktiválódik:

"path": "input/original-{name}",

Ha a blob neve original-Blob1.txt, a name függvénykód változójának értéke .Blob1.txt

Szűrés fájltípusra

Az alábbi példa csak .png fájlokon aktiválódik:

"path": "samples/{name}.png",

Szűrés a kapcsos zárójelekre a fájlnevekben

Ha kapcsos zárójeleket szeretne keresni a fájlnevekben, két kapcsos zárójel használatával meneküljön el a kapcsos zárójelek elől. Az alábbi példa azokra a blobokra szűr, amelyek nevében kapcsos zárójelek vannak:

"path": "images/{{20140101}}-{name}",

Ha a blob neve {20140101}-soundfile.mp3, a name függvénykód változóértéke soundfile.mp3.

Lekérdezés és késés

A lekérdezés hibridként működik a naplók vizsgálata és az időszakos tárolóvizsgálatok futtatása között. A blobokat egyszerre 10 000-ből álló csoportokban ellenőrzi a rendszer, és az intervallumok között egy folytatási jogkivonatot használ. Ha a függvényalkalmazás a Használat csomagban található, akár 10 perces késés is előfordulhat az új blobok feldolgozásában, ha egy függvényalkalmazás inaktív állapotba került.

Figyelmeztetés

A tárolási naplók a "legjobb munka" alapon jönnek létre. Nincs garancia arra, hogy minden esemény rögzítve van. Bizonyos feltételek mellett előfordulhat, hogy a naplók kimaradnak.

Ha gyorsabb vagy megbízhatóbb blobfeldolgozásra van szüksége, érdemes úgy váltania a tárhelyét, hogy az Always On-nal rendelkező App Service-csomagot használja, ami megnövelheti a költségeket. Érdemes lehet a klasszikus lekérdezési blob-eseményindítótól eltérő eseményindítót is használni. További információkért és a blobtárolók különböző triggerelési beállításainak összehasonlításáért lásd : Trigger egy blobtárolón.

Blobok nyugtái

Az Azure Functions-futtatókörnyezet biztosítja, hogy egyetlen blob triggerfüggvényét sem hívja meg többször ugyanarra az új vagy frissített blobra. Annak megállapításához, hogy egy adott blobverzió feldolgozásra került-e, a blob nyugtáit tartja-e fenn.

Az Azure Functions egy azure-webjobs-hosts nevű tárolóban tárolja a blobok nyugtáit a függvényalkalmazás Azure Storage-fiókjában (amelyet az alkalmazásbeállítás AzureWebJobsStoragehatároz meg). A blobok nyugtázása a következő információkkal rendelkezik:

  • Az aktivált függvény (<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>például: MyFunctionApp.Functions.CopyBlob)
  • A tároló neve
  • A blob típusa (BlockBlob vagy PageBlob)
  • A blob neve
  • Az ETag (egy blobverzió azonosítója, például: 0x8D1DC6E70A277EF)

A blobok újrafeldolgozásának kényszerítéséhez törölje a blobhoz tartozó blob nyugtát manuálisan az Azure-webjobs-hosts tárolóból. Előfordulhat, hogy az újrafeldolgozás nem történik meg azonnal, de ez garantáltan egy későbbi időpontban történik. Az azonnali feldolgozáshoz az azure-webjobs-hosts/blobscaninfo scaninfo blobja frissíthető. A tulajdonság ismételt vizsgálata után LatestScan az utolsó módosított időbélyeggel rendelkező blobok.

Mérgező blobok

Ha egy blob triggerfüggvénye meghiúsul egy adott blob esetében, az Azure Functions alapértelmezés szerint újrapróbálkozza a függvényt, amely alapértelmezés szerint összesen ötször működik.

Ha mind az 5 próbálkozás sikertelen, az Azure Functions egy webjobs-blobtrigger-poison nevű Storage-üzenetsorhoz ad hozzá egy üzenetet. Az újrapróbálkozések maximális száma konfigurálható. Ugyanez a MaxDequeueCount beállítás használatos a méregblobok kezeléséhez és a méregsor üzenetkezeléséhez. A méregblobok üzenetsor-üzenete egy JSON-objektum, amely a következő tulajdonságokat tartalmazza:

  • FunctionId (formátum <FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>)
  • BlobType (BlockBlob vagy PageBlob)
  • ContainerName
  • BlobName
  • ETag (blobverzió azonosítója, például: 0x8D1DC6E70A277EF)

Memóriahasználat és egyidejűség

Ha olyan kimeneti típushoz kötődik, amely nem támogatja a streamelést, például stringa Byte[]futtatókörnyezetnek a teljes blobot többször kell betöltenie a memóriába a feldolgozás során. Ez a blobok feldolgozásakor a vártnál nagyobb memóriahasználatot eredményezhet. Ha lehetséges, használjon stream-támogató típust. A típustámogatás a C# módtól és a bővítmény verziójától függ. További információ: Kötéstípusok.

Jelenleg a futtatókörnyezetnek a teljes blobot többször kell betöltenie a memóriába a feldolgozás során. Ez a blobok feldolgozásakor a vártnál nagyobb memóriahasználatot eredményezhet.

A memóriahasználat további hatással lehet, ha több függvénypéldány egyidejűleg blobadatokat dolgoz fel. Ha memóriaproblémák merülnek fel egy Blob-eseményindító használatával, fontolja meg az egyidejű végrehajtások számának csökkentését. Az egyidejűség csökkentése természetesen okozhatja a feldolgozásra váró blobok hátralékának növelését. A függvényalkalmazás memóriakorlátja a tervtől függ. További információ: Szolgáltatáskorlátok.

Az egyidejű végrehajtások számának szabályozása a használt Storage-bővítmény verziójától függ.

A Storage-bővítmény 5.0.0-s vagy újabb verziójának használatakor az eseményindító egyidejűségét a maxDegreeOfParallelism host.json blobkonfigurációjának beállításával szabályozhatja.

A blob-eseményindítót használó függvényekre külön-külön vonatkoznak a korlátozások.

host.json tulajdonságok

A host.json fájl olyan beállításokat tartalmaz, amelyek szabályozzák a blobok eseményindítójának viselkedését. Az elérhető beállításokkal kapcsolatos részletekért tekintse meg a host.json beállítások szakaszát.

Következő lépések