Skapa och använda resursfiler
En Azure Batch-uppgift kräver ofta någon form av data att bearbeta. Resursfiler är ett sätt att tillhandahålla dessa data till din virtuella Batch-dator (VM) via en uppgift. Alla typer av uppgifter stöder resursfiler: uppgifter, startaktiviteter, jobbförberedelseaktiviteter, uppgifter för jobbpublicering osv. Den här artikeln beskriver några vanliga metoder för hur du skapar resursfiler och placerar dem på en virtuell dator.
Resursfiler placerar data på en virtuell dator i Batch, men typen av data och hur de används är flexibel. Det finns dock några vanliga användningsfall:
- Etablera vanliga filer på varje virtuell dator med hjälp av resursfiler för en startaktivitet.
- Etablera indata som ska bearbetas av uppgifter.
Vanliga filer kan till exempel vara filer i en startuppgift som används för att installera program som dina uppgifter körs på. Indata kan vara rådata för bilder eller video, eller information som ska bearbetas av Batch.
Typer av resursfiler
Det finns några olika alternativ för att generera resursfiler, var och en med sina egna metoder. Skapandeprocessen för resursfiler varierar beroende på var de ursprungliga data lagras och om flera filer ska skapas.
- URL för lagringscontainer: Genererar resursfiler från valfri lagringscontainer i Azure.
- Namn på lagringscontainer: Genererar resursfiler från namnet på en container i Azure Storage-kontot som är länkat till ditt Batch-konto (kontot för automatisk lagring).
- Enskild resursfil från webbslutpunkten: Genererar en enskild resursfil från en giltig HTTP-URL.
URL för lagringscontainer
Med hjälp av en URL för lagringscontainer kan du med rätt behörighet komma åt filer i valfri lagringscontainer i Azure.
I det här C#-exemplet har filerna redan laddats upp till en Azure Storage-container som bloblagring. För att få åtkomst till de data som behövs för att skapa en resursfil måste vi först få åtkomst till lagringscontainern. Detta kan göras på flera sätt.
Signatur för delad åtkomst
Skapa en SAS-URI (signatur för delad åtkomst) med rätt behörigheter för åtkomst till lagringscontainern. Ange förfallotid och behörigheter för SAS. I det här fallet anges ingen starttid, så SAS blir giltigt omedelbart och upphör att gälla två timmar efter att det har genererats.
SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy
{
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(2),
Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List
};
Kommentar
För containeråtkomst måste du ha både Read
och List
behörigheter, medan du med blobåtkomst bara behöver Read
behörighet.
När behörigheterna har konfigurerats skapar du SAS-token och formaterar SAS-URL:en för åtkomst till lagringscontainern. Använd den formaterade SAS-URL:en för lagringscontainern och generera en resursfil med FromStorageContainerUrl.
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
string sasToken = container.GetSharedAccessSignature(sasConstraints);
string containerSasUrl = String.Format("{0}{1}", container.Uri, sasToken);
ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(containerSasUrl);
Om du vill kan du använda egenskapen blobPrefix för att begränsa nedladdningar till endast de blobbar vars namn börjar med ett angivet prefix:
ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(containerSasUrl, blobPrefix = yourPrefix);
Hanterad identitet
Skapa en användartilldelad hanterad identitet och tilldela den Storage Blob Data Reader
rollen för din Azure Storage-container. Tilldela sedan den hanterade identiteten till din pool så att dina virtuella datorer kan komma åt identiteten. Slutligen kan du komma åt filerna i containern genom att ange den identitet som Batch ska använda.
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(container.Uri, identityReference: new ComputeNodeIdentityReference() { ResourceId = "/subscriptions/SUB/resourceGroups/RG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name" });
Offentlig åtkomst
Ett alternativ till att generera en SAS-URL eller använda en hanterad identitet är att aktivera anonym, offentlig läsåtkomst till en container och dess blobar i Azure Blob Storage. På så sätt kan du bevilja skrivskyddad åtkomst till dessa resurser utan att dela din kontonyckel och utan att kräva en SAS. Offentlig åtkomst används vanligtvis för scenarier där du vill att vissa blobar alltid ska vara tillgängliga för anonym läsåtkomst. Om det här scenariot passar din lösning kan du läsa Konfigurera anonym offentlig läsåtkomst för containrar och blobar för att lära dig mer om att hantera åtkomst till dina blobdata.
Namn på lagringscontainer (automatisk lagring)
I stället för att konfigurera och skapa en SAS-URL kan du använda namnet på din Azure Storage-container för att komma åt dina blobdata. Lagringscontainern som du använder måste finnas i azure-lagringskontot som är länkat till ditt Batch-konto, som ibland kallas för kontot för automatisk lagring. Med hjälp av containern för automatisk lagring kan du kringgå konfigurationen och skapa en SAS-URL för att få åtkomst till en lagringscontainer. I stället anger du namnet på lagringscontainern i ditt länkade lagringskonto.
Om du inte redan har ett konto för automatisk lagring kan du läsa stegen i Skapa ett Batch-konto för mer information om hur du skapar och länkar ett lagringskonto.
I följande exempel används AutoStorageContainer för att generera filen från data i kontot för automatisk lagring.
ResourceFile inputFile = ResourceFile.FromAutoStorageContainer(containerName);
Precis som med en URL för lagringscontainer kan du använda egenskapen blobPrefix för att ange vilka blobar som ska laddas ned:
ResourceFile inputFile = ResourceFile.FromAutoStorageContainer(containerName, blobPrefix = yourPrefix);
Enskild resursfil från webbslutpunkten
Om du vill skapa en enskild resursfil kan du ange en giltig HTTP-URL som innehåller dina indata. URL:en tillhandahålls till Batch-API:et och sedan används data för att skapa en resursfil. Den här metoden kan användas oavsett om data för att skapa resursfilen finns i Azure Storage eller på någon annan webbplats, till exempel en GitHub-slutpunkt.
I följande exempel används FromUrl för att hämta filen från en sträng som innehåller en giltig URL och genererar sedan en resursfil som ska användas av din uppgift. Inga autentiseringsuppgifter behövs för det här scenariot. (Autentiseringsuppgifter krävs om du använder bloblagring, såvida inte offentlig läsåtkomst är aktiverad i blobcontainern.)
ResourceFile inputFile = ResourceFile.FromUrl(yourURL, filePath);
Du kan också använda en sträng som du definierar som en URL (eller en kombination av strängar som tillsammans skapar den fullständiga URL:en för filen).
ResourceFile inputFile = ResourceFile.FromUrl(yourDomain + yourFile, filePath);
Om filen finns i Azure Storage kan du använda en hanterad identitet i stället för att generera en signatur för delad åtkomst för resursfilen.
ResourceFile inputFile = ResourceFile.FromUrl(yourURLFromAzureStorage,
identityReference: new ComputeNodeIdentityReference() { ResourceId = "/subscriptions/SUB/resourceGroups/RG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name"},
filePath: filepath
);
Kommentar
Hanterad identitetsautentisering fungerar endast med filer i Azure Storage. Den nanaged identiteten behöver rolltilldelningen Storage Blob Data Reader
för containern som filen finns i, och den måste också tilldelas till Batch-poolen.
Tips och förslag
Azure Batch-uppgifter kan använda filer på många sätt, vilket är anledningen till att Batch tillhandahåller olika alternativ för att hantera filer på uppgifter. Följande scenarier är inte avsedda att vara omfattande, utan omfattar några vanliga situationer och ger rekommendationer.
Många resursfiler
Om vanliga uppgiftsfiler delas mellan många aktiviteter i batchjobbet kanske du vill använda ett programpaket för att innehålla dessa filer. Programpaket ger optimering för nedladdningshastighet och data i programpaket cachelagras mellan aktiviteter. Med programpaket behöver du inte hantera flera resursfiler manuellt eller generera SAS-URL:er för att komma åt filerna i Azure Storage. Batch fungerar i bakgrunden med Azure Storage för att lagra och distribuera programpaket till beräkningsnoder. Om dina aktivitetsfiler inte ändras ofta kan programpaket passa bra för din lösning.
Om var och en av dina aktiviteter har många filer som är unika för den uppgiften är resursfiler sannolikt det bästa alternativet. Uppgifter som använder unika filer måste ofta uppdateras eller ersättas, vilket inte är lika enkelt att göra med programpaketinnehåll. Resursfiler ger ytterligare flexibilitet för att uppdatera, lägga till eller redigera enskilda filer.
Antal resursfiler per aktivitet
När en aktivitet anger ett stort antal resursfiler kan Batch avvisa uppgiften som för stor. Detta beror på den totala längden på filnamnen eller URL:erna (samt identitetsreferensen) för alla filer som läggs till i aktiviteten. Det är bäst att hålla dina uppgifter små genom att minimera antalet resursfiler för själva aktiviteten.
Om det inte finns något sätt att minimera antalet filer som din uppgift behöver kan du optimera uppgiften genom att skapa en enda resursfil som refererar till en lagringscontainer med resursfiler. Det gör du genom att placera dina resursfiler i en Azure Storage-container och använda någon av metoderna som beskrivs ovan för att generera resursfiler efter behov.
Nästa steg
- Lär dig mer om programpaket som ett alternativ till resursfiler.
- Lär dig mer om hur du använder containrar för resursfiler.
- Lär dig hur du samlar in och sparar utdata från dina uppgifter.
- Läs om tillgängliga Batch-API:er och verktyg för att skapa Batch-lösningar.