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.*
.
Fontos
A folyamaton belüli modell támogatása 2026. november 10-én megszűnik. Erősen javasoljuk, hogy az alkalmazásokat az elkülönített feldolgozói modellbe migrálja a teljes támogatás érdekében.
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:
Í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 blobTrigger kö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 in kö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 (blobTrigger
beleé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 string
blob 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ágaConnection
. - Az
StorageAccount
attribútummal azonos paraméterreBlobTrigger
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 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:
- Egy kapcsolati sztring tartalmazó alkalmazásbeállítás neve
- Egy megosztott előtag neve több alkalmazásbeállításhoz, valamint identitásalapú kapcsolat definiálása.
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 AzureWebJobsStorage
alkalmazá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>__serviceUri 1 |
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 queueServiceUri
kell. 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 blobServiceUri
azonban 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 AzureWebJobsStorage
hatá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
vagyPageBlob
) - 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
vagyPageBlob
) - 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 string
a 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.