Anslut Azure Functions att Azure Storage med Visual Studio Code
Med Azure Functions kan du ansluta Azure-tjänster och andra resurser till funktioner utan att behöva skriva din egen integrerings kod. Dessa bindningar, som representerar både indata och utdata, deklareras i funktions definitionen. Data från bindningar skickas som parametrar till funktionen. En utlösare är en särskild typ av ingående bindning. Även om en funktion bara har en utlösare, kan den ha flera indata och utdata-bindningar. Mer information finns i Azure Functions utlösare och bindningar begrepp.
Den här artikeln visar hur du använder Visual Studio Code för att Azure Storage till funktionen som du skapade i föregående snabbstartsartikel. Den utdatabindning som du lägger till i den här funktionen skriver data från HTTP-begäran till ett meddelande i en Azure Queue Storage-kö.
De flesta bindningar kräver en lagrad anslutningssträng som Functions använder för att få åtkomst till den bundna tjänsten. För att göra det enklare använder du Storage som du skapade med funktionsappen. Anslutningen till det här kontot lagras redan i en appinställning med namnet AzureWebJobsStorage .
Konfigurera din lokala miljö
Innan du börjar den här artikeln måste du uppfylla följande krav:
Installera Azure Storage för Visual Studio Code.
Installera Azure Storage Explorer. Storage Explorer är ett verktyg som du använder för att undersöka kömeddelanden som genereras av utdatabindningen. Storage Explorer stöds på macOS-, Windows- och Linux-baserade operativsystem.
- Installera .NET Core CLI verktyg.
- Slutför stegen i del 1 av Visual Studio Code-snabbstarten.
- Slutför stegen i del 1 av Visual Studio Code-snabbstarten.
- Slutför stegen i del 1 av Visual Studio Code-snabbstarten.
- Slutför stegen i del 1 av Visual Studio Code-snabbstarten.
- Slutför stegen i del 1 av Visual Studio Code-snabbstarten.
- Slutför stegen i del 1 av Visual Studio Code-snabbstarten.
Den här artikeln förutsätter att du redan är inloggad på din Azure-prenumeration från Visual Studio Code. Du kan logga in genom att köra Azure: Sign In från kommandopaletten.
Ladda ned funktionsappens inställningar
I den föregående snabbstartsartikelnskapade du en funktionsapp i Azure tillsammans med Storage konto. Anslutningssträngen för det här kontot lagras säkert i appinställningarna i Azure. I den här artikeln skriver du meddelanden till en Storage i samma konto. Om du vill Storage till ditt konto när du kör funktionen lokalt måste du ladda ned appinställningarna till filen local.settings.json.
Tryck på F1 för att öppna kommandopaletten och sök sedan efter och kör kommandot
Azure Functions: Download Remote Settings.....Välj den funktionsapp som du skapade i föregående artikel. Välj Ja om du vill skriva över de befintliga lokala inställningarna.
Viktigt
Eftersom den innehåller hemligheter publiceras aldrig filen local.settings.json och den undantas från källkontrollen.
Kopiera värdet
AzureWebJobsStorage, som är nyckeln för Storage för kontots anslutningssträng. Du använder den här anslutningen för att kontrollera att utdatabindningen fungerar som förväntat.
Registrera bindningstillägg
Eftersom du använder en Queue Storage-utdatabindning måste du ha Storage-bindningstillägget installerat innan du kör projektet.
Projektet har konfigurerats för att använda tilläggspaketet, som automatiskt installerar en fördefinierad uppsättning tilläggspaket.
Användning av tilläggspaketet är aktiverat i filen host.json i projektroten, som visas på följande sätt:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[1.*, 2.0.0)"
}
}
Med undantag för HTTP- och timerutlösare implementeras bindningar som tilläggspaket. Kör följande dotnet add package-kommando i terminalfönstret för att lägga Storage-tilläggspaketet i projektet.
dotnet add package Microsoft.Azure.WebJobs.Extensions.Storage
Nu kan du lägga till lagringsutdatabindningen i projektet.
Nu kan du lägga till lagringsutdatabindningen i projektet.
Lägg till en utdatabindning
I Functions kräver varje typ av bindning direction en , och en unik för att type name definieras i filen function.json. Hur du definierar dessa attribut beror på funktionsappens språk.
Binding-attribut definieras direkt i function.jsi filen. Beroende på bindnings typen kan ytterligare egenskaper krävas. I kös Ekö konfigurationen beskrivs de fält som krävs för en Azure Storage Queue-bindning. Tillägget gör det enkelt att lägga till bindningar till function.jsi filen.
Om du vill skapa en bindning högerklickar du på (Ctrl + klicka på macOS) function.json filen i mappen HttpTrigger och väljer Lägg till bindning.... Följ anvisningarna för att definiera följande bindnings egenskaper för den nya bindningen:
| Prompt | Värde | Beskrivning |
|---|---|---|
| Välj bindnings riktning | out |
Bindningen är en utgående bindning. |
| Välj bindning med riktning... | Azure Queue Storage |
Bindningen är en Azure Storage Queue-bindning. |
| Namnet som används för att identifiera den här bindningen i din kod | msg |
Namn som identifierar den bindnings parameter som refereras till i din kod. |
| Kön som meddelandet ska skickas till | outqueue |
Namnet på kön som bindningen skriver till. När queueName inte finns skapar bindningen den när den används första gången. |
| Välj inställning från "local.setting.jspå" | AzureWebJobsStorage |
Namnet på en program inställning som innehåller anslutnings strängen för lagrings kontot. AzureWebJobsStorageInställningen innehåller anslutnings strängen för det lagrings konto som du skapade med Function-appen. |
En bindning läggs till bindings i matrisen i function.jspå, vilket bör se ut så här:
{
"type": "queue",
"direction": "out",
"name": "msg",
"queueName": "outqueue",
"connection": "AzureWebJobsStorage"
}
I ett C#-projekt definieras bindningarna som bindningsattribut för funktionsmetoden. Specifika definitioner beror på om din app körs i processen (C#-klassbiblioteket) eller i en isolerad process.
Öppna projektfilen HttpExample.cs och lägg till följande parameter i Run metoddefinitionen:
[Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg,
Parametern msg är en typ som representerar en samling meddelanden som skrivs till en ICollector<T> utdatabindning när funktionen har slutförts. I det här fallet är utdata en lagringskö med namnet outqueue . Anslutningssträngen för Storage-kontot anges av StorageAccountAttribute . Det här attributet anger inställningen som innehåller Storage-kontoanslutningssträngen och kan tillämpas på klass-, metod- eller parameternivå. I det här fallet kan du utelämna eftersom StorageAccountAttribute du redan använder standardlagringskontot.
Definitionen av run-metoden bör nu se ut så här:
[FunctionName("HttpExample")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
[Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg,
ILogger log)
I ett Java-projekt definieras bindningarna som bindnings anteckningar i funktions metoden. function.js filen skapas sedan automatiskt baserat på dessa anteckningar.
Bläddra till platsen för funktions koden under src/main/Java, öppna filen Function. java -projekt och Lägg till följande parameter i run metod definitionen:
@QueueOutput(name = "msg", queueName = "outqueue",
connection = "AzureWebJobsStorage") OutputBinding<String> msg,
msgParametern är en OutputBinding<T> typ som representerar en samling strängar som skrivs som meddelanden till en utgående bindning när funktionen slutförs. I det här fallet är utdata en lagrings kö med namnet outqueue . Anslutnings strängen för lagrings kontot anges av- connection metoden. I stället för själva anslutnings strängen skickar du den program inställning som innehåller anslutnings strängen för lagrings kontot.
runMetod definitionen bör nu se ut som i följande exempel:
@FunctionName("HttpExample")
public HttpResponseMessage run(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@QueueOutput(name = "msg", queueName = "outqueue",
connection = "AzureWebJobsStorage") OutputBinding<String> msg,
final ExecutionContext context) {
Lägg till kod som använder utdatabindning
När bindningen har definierats kan du använda för name bindningen för att komma åt den som ett attribut i funktionssignaturen. Genom att använda en utdatabindning behöver du inte använda SDK Azure Storage koden för autentisering, hämta en köreferens eller skriva data. Functions-körnings- och köutdatabindningen utför dessa uppgifter åt dig.
Lägg till kod som använder msg objektet utgående bindning på context.bindings för att skapa ett köat meddelande. Lägg till den här koden före context.res instruktionen.
// Add a message to the Storage queue,
// which is the name passed to the function.
context.bindings.msg = (req.query.name || req.body.name);
I det här läget bör din funktion se ut så här:
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
if (req.query.name || (req.body && req.body.name)) {
// Add a message to the Storage queue,
// which is the name passed to the function.
context.bindings.msg = (req.query.name || req.body.name);
context.res = {
// status: 200, /* Defaults to 200 */
body: "Hello " + (req.query.name || req.body.name)
};
}
else {
context.res = {
status: 400,
body: "Please pass a name on the query string or in the request body"
};
}
};
Lägg till kod som använder msg objektet utgående bindning på context.bindings för att skapa ett köat meddelande. Lägg till den här koden före context.res instruktionen.
context.bindings.msg = name;
I det här läget bör din funktion se ut så här:
import { AzureFunction, Context, HttpRequest } from "@azure/functions"
const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
context.log('HTTP trigger function processed a request.');
const name = (req.query.name || (req.body && req.body.name));
if (name) {
// Add a message to the storage queue,
// which is the name passed to the function.
context.bindings.msg = name;
// Send a "hello" response.
context.res = {
// status: 200, /* Defaults to 200 */
body: "Hello " + (req.query.name || req.body.name)
};
}
else {
context.res = {
status: 400,
body: "Please pass a name on the query string or in the request body"
};
}
};
export default httpTrigger;
Lägg till kod som använder Push-OutputBinding cmdleten för att skriva text till kön med hjälp av msg utgående bindning. Lägg till den här koden innan du anger statusen OK i if instruktionen.
$outputMsg = $name
Push-OutputBinding -name msg -Value $outputMsg
I det här läget bör din funktion se ut så här:
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
$name = $Request.Body.Name
}
if ($name) {
# Write the $name value to the queue,
# which is the name passed to the function.
$outputMsg = $name
Push-OutputBinding -name msg -Value $outputMsg
$status = [HttpStatusCode]::OK
$body = "Hello $name"
}
else {
$status = [HttpStatusCode]::BadRequest
$body = "Please pass a name on the query string or in the request body."
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = $status
Body = $body
})
Uppdatera HttpExample \ _ _ init _ _ .py så att den matchar följande kod och lägg till msg parametern i funktionsdefinitionen msg.set(name) och under -instruktionen. if name:
import logging
import azure.functions as func
def main(req: func.HttpRequest, msg: func.Out[func.QueueMessage]) -> str:
name = req.params.get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')
if name:
msg.set(name)
return func.HttpResponse(f"Hello {name}!")
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)
Parametern msg är en instans av azure.functions.Out class . Dess set -metod skriver ett strängmeddelande till kön, i det här fallet det namn som skickas till funktionen i URL-frågesträngen.
Lägg till kod som använder msg utdatabindningsobjektet för att skapa ett kömeddelande. Lägg till den här koden innan metoden returnerar.
if (!string.IsNullOrEmpty(name))
{
// Add a message to the output collection.
msg.Add(string.Format("Name passed to the function: {0}", name));
}
Nu bör funktionen se ut så här:
[FunctionName("HttpExample")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
[Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
if (!string.IsNullOrEmpty(name))
{
// Add a message to the output collection.
msg.Add(string.Format("Name passed to the function: {0}", name));
}
return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}
Nu kan du använda den nya msg parametern för att skriva till utgående bindning från din funktions kod. Lägg till följande kodrad innan du lyckas med att lägga till värdet för name i msg utmatnings bindningen.
msg.setValue(name);
När du använder en utgående bindning behöver du inte använda Azure Storage SDK-koden för autentisering, hämta en referens till kön eller skriva data. Bindningarna Functions Runtime och Queue output utför dessa uppgifter åt dig.
runMetoden bör nu se ut som i följande exempel:
@FunctionName("HttpExample")
public HttpResponseMessage run(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@QueueOutput(name = "msg", queueName = "outqueue",
connection = "AzureWebJobsStorage") OutputBinding<String> msg,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
// Parse query parameter
String query = request.getQueryParameters().get("name");
String name = request.getBody().orElse(query);
if (name == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Please pass a name on the query string or in the request body").build();
} else {
// Write the name to the message queue.
msg.setValue(name);
return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
}
Uppdatera testerna
Eftersom archetype också skapar en uppsättning tester måste du uppdatera de här testerna för att hantera den nya msg parametern i run Metodsignaturen.
Bläddra till platsen för test koden under src/test/java, öppna filen Function. java -projekt och ersätt kodraden under //Invoke med följande kod.
@SuppressWarnings("unchecked")
final OutputBinding<String> msg = (OutputBinding<String>)mock(OutputBinding.class);
final HttpResponseMessage ret = new Function().run(req, msg, context);
Köra funktionen lokalt
Visual Studio Koden integreras med Azure Functions Core-verktyg så att du kan köra det här projektet på din lokala utvecklingsdator innan du publicerar till Azure.
Du anropar funktionen genom att trycka på F5 för att starta funktionsappsprojektet. Utdata från Core Tools visas på panelen Terminal. Din app startar i terminalpanelen. Du kan se URL-slutpunkten för den HTTP-utlösta funktionen som körs lokalt.

Om du har problem med att Windows på en dator kontrollerar du att standardterminalen för Visual Studio Code inte är inställd på WSL Bash.
När Core Tools är igång går du till området Azure: Funktioner. Under Funktioner expanderar du Lokal Project > Functions. Högerklicka (välj Windows) eller Ctrl - klicka (macOS) på
HttpExamplefunktionen och välj Kör funktion nu....
I Enter request body (Ange begärandetext) trycker du på Retur för att skicka ett meddelande om begäran till funktionen.
När funktionen körs lokalt och returnerar ett svar utlöses ett meddelande i Visual Studio Code. Information om funktionskörningen visas i terminalpanelen.
Tryck på Ctrl + C för att stoppa Core Tools och koppla från felsökningsprogrammet.
Köra funktionen lokalt
Precis som i föregående artikel trycker du på F5 för att starta funktionsappsprojektet och Core Tools.
När Core Tools är igång går du till området Azure: Funktioner. Under Funktioner expanderar du Lokal Project > Functions. Högerklicka (Ctrl-klicka på Mac) på funktionen
HttpExampleoch välj Kör funktion nu....
I Ange begärandetext visas brödtextvärdet för begärandemeddelandet.
{ "name": "Azure" }Tryck på Retur för att skicka det här begärandemeddelandet till din funktion.När ett svar returneras trycker du på Ctrl + C för att stoppa Core Tools.
Eftersom du använder lagringsanslutningssträngen ansluter funktionen till Azure Storage-kontot när den körs lokalt. En ny kö med namnet outqueue skapas i ditt lagringskonto av Functions-körningen när utdatabindningen används för första gången. Du använder den Storage Explorer för att kontrollera att kön har skapats tillsammans med det nya meddelandet.
Anslut Storage Explorer till ditt konto
Hoppa över det här avsnittet om du redan har Azure Storage Explorer och anslutit den till ditt Azure-konto.
Kör Azure Storage Explorer, välj anslutningsikonen till vänster och välj Lägg till ett konto.

I dialogrutan Anslut väljer du Lägg till ett Azure-konto, väljer din Azure-miljö och sedan Logga in....

När du har loggat in på ditt konto visas alla Azure-prenumerationer som är kopplade till ditt konto.
Granska utdatakö
I Visual Studio Code trycker du på F1 för att öppna kommandopaletten. Sök sedan efter och kör kommandot och välj namnet
Azure Storage: Open in Storage ExplorerStorage ditt konto. Ditt lagringskonto öppnas Azure Storage Explorer.Expandera noden Köer och välj sedan kön med namnet outqueue.
Kön innehåller meddelandet som köutdatabindningen skapade när du körde den HTTP-utlösta funktionen. Om du startade en funktion med standardvärdet
nameför Azure så är kömeddelandet Name passed to the function: Azure (Namn som skickats till funktionen: Azure).
Kör funktionen igen, skicka en ny begäran så visas ett nytt meddelande i kön.
Nu är det dags att publicera om den uppdaterade funktionsappen till Azure.
Distribuera om och verifiera den uppdaterade appen
I Visual Studio Code trycker du på F1 för att öppna kommandopaletten. I kommandopaletten söker du efter och väljer
Azure Functions: Deploy to function app....Välj den funktionsapp som du skapade i den första artikeln. Eftersom du omdistribuerar projektet till samma app väljer du Distribuera för att stänga varningen om att skriva över filer.
När distributionen är klar kan du använda funktionen Kör nu... igen för att utlösa funktionen i Azure.
Visa meddelandet i lagringskön igen för att kontrollera att utdatabindningen genererar ett nytt meddelande i kön igen.
Rensa resurser
I Azure refererar resurser till funktionsappar, funktioner, lagringskonton och så vidare. De grupperas i resursgrupper och du kan ta bort allt i en grupp genom att ta bort gruppen.
Du skapade resurser för att slutföra de här snabbstarterna. Det är möjligt att du debiteras för de här resurserna beroende på din kontostatus och dina servicepriser. Om du inte behöver resurserna längre så visar vi hur du tar bort dem här:
I Visual Studio Code, trycker du på F1 för att öppna kommando paletten. I paletten kommando söker du efter och väljer
Azure Functions: Open in portal.Välj Function-appen och tryck på RETUR. Sidan Function-appen öppnas i Azure Portal.
På fliken Översikt väljer du den namngivna länken bredvid resurs grupp.
Granska listan över resurser som ingår och verifiera att det är dem som du vill ta bort på sidan Resursgrupp.
Välj Ta bort resursgrupp och följ instruktionerna.
Borttagningen kan ta några minuter. När du är färdig visas ett meddelande i några sekunder. Du kan även välja klockikonen längst upp på sidan för att se meddelandet.
Nästa steg
Du har uppdaterat den HTTP-utlösta funktionen för att skriva data till en Storage kö. Nu kan du lära dig mer om att utveckla funktioner med Visual Studio Code: