Připojení Azure Functions se Azure Storage pomocí Visual Studio Code
Azure Functions umožňuje připojit služby Azure a další prostředky k funkcím bez nutnosti psát vlastní kód pro integraci. Tyto vazby, které představují vstupní i výstupní, jsou deklarovány v rámci definice funkce. Data z vazeb má funkce k dispozici jako parametry. Trigger je speciální typ vstupní vazby. I když má funkce pouze jednu Trigger, může mít více vstupních a výstupních vazeb. Další informace najdete v tématu Azure Functions triggery a koncepty vazeb.
Tento článek popisuje, jak pomocí Visual Studio Code připojit Azure Storage k funkci, kterou jste vytvořili v předchozím článku Rychlý start. Výstupní vazba, kterou do této funkce přidáte, zapisuje data z požadavku HTTP do zprávy ve frontě Azure Queue Storage.
Většina vazeb vyžaduje uložený připojovací řetězec, který služba Functions používá pro přístup k vázané službě. Abyste to usnadnili, použijete účet Storage, který jste vytvořili pomocí aplikace funkcí. Připojení k tomuto účtu je už uložené v nastavení aplikace s názvem AzureWebJobsStorage .
Konfigurace místního prostředí
Než začnete s tímto článkem, musíte splňovat následující požadavky:
Nainstalujte Azure Storage pro Visual Studio Code.
Nainstalujte Průzkumník služby Azure Storage. Průzkumník služby Storage je nástroj, který použijete k prozkoumání zpráv ve frontě vygenerovaných výstupní vazbou. Průzkumník služby Storage se podporuje v operačních systémech macOS, Windows a Linux.
- Nainstalujte .NET Core CLI nástroje.
- Proveďte kroky v první části tohoto rychlého Visual Studio Code startu.
- Proveďte kroky v první části tohoto rychlého Visual Studio Code startu.
- Proveďte kroky v první části tohoto rychlého Visual Studio Code startu.
- Proveďte kroky v první části tohoto rychlého Visual Studio Code startu.
- Proveďte kroky v první části tohoto rychlého Visual Studio Code startu.
- Proveďte kroky v první části tohoto rychlého Visual Studio Code startu.
Tento článek předpokládá, že jste už přihlášení ke svému předplatnému Azure z Visual Studio Code. Můžete se přihlásit spuštěním Azure: Sign In příkazu z palety příkazů.
Stažení nastavení aplikace funkcí
V předchozím článku Rychlý startjste vytvořili aplikaci funkcí v Azure společně s požadovaným Storage účtem. Připojovací řetězec pro tento účet je bezpečně uložený v nastavení aplikace v Azure. V tomto článku zapisujete zprávy do fronty Storage ve stejném účtu. Pokud se chcete Storage svému účtu úložiště při místním spuštění funkce, musíte si stáhnout nastavení aplikace do souboru local.settings.json.
Stisknutím klávesy F1 otevřete paletu příkazů a pak vyhledejte a spusťte příkaz
Azure Functions: Download Remote Settings.....Zvolte aplikaci funkcí, kterou jste vytvořili v předchozím článku. Pokud chcete přepsat stávající místní nastavení, vyberte Ano všem.
Důležité
Protože obsahuje tajné kódy, soubor local.settings.json se nikdy ne publikoval a je vyloučený ze správy zdrojového kódu.
Zkopírujte hodnotu
AzureWebJobsStorage, což je klíč pro hodnotu Storage připojovacího řetězce účtu. Toto připojení použijete k ověření, že výstupní vazba funguje podle očekávání.
Registrace rozšíření vazeb
Vzhledem k tomu, že používáte výstupní vazbu queue storage, musíte mít před spuštěním projektu nainstalované Storage vazby.
Projekt je nakonfigurovaný tak, aby při používání sad rozšířeníautomaticky instaloval předdefinovanou sadu balíčků rozšíření.
Využití sad rozšíření je povolené v souboru host.json v kořenovém adresáři projektu, který se zobrazí takto:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[1.*, 2.0.0)"
}
}
S výjimkou triggerů HTTP a časovače jsou vazby implementované jako balíčky rozšíření. Spuštěním následujícího příkazu dotnet add package v okně Terminálu přidejte do Storage balíček rozšíření.
dotnet add package Microsoft.Azure.WebJobs.Extensions.Storage
Teď můžete do projektu přidat výstupní vazbu úložiště.
Teď můžete do projektu přidat výstupní vazbu úložiště.
Přidání výstupní vazby
Ve Functions každý typ vazby vyžaduje , a jedinečný, který se definuje direction type v souboru name function.json. Způsob definování těchto atributů závisí na jazyce vaší aplikace funkcí.
Atributy vazby jsou definovány přímo v function.jsv souboru. V závislosti na typu vazby mohou být vyžadovány další vlastnosti. Konfigurace výstupu fronty popisuje pole požadovaná pro vazbu fronty Azure Storage. Rozšíření usnadňuje přidávání vazeb do function.jssouborů.
Vazbu vytvoříte tak, že kliknete pravým tlačítkem (CTRL + kliknete na macOS) do function.json souboru ve složce HttpTrigger a kliknete na Přidat vazbu.... Podle pokynů definujte následující vlastnosti vazby pro novou vazbu:
| Výzva | Hodnota | Popis |
|---|---|---|
| Vybrat směr vazby | out |
Vazba je výstupní vazba. |
| Vyberte vazbu se směrováním... | Azure Queue Storage |
Vazba je vazba fronty Azure Storage. |
| Název, který slouží k identifikaci této vazby v kódu | msg |
Název, který identifikuje parametr vazby, na který se odkazuje v kódu. |
| Fronta, do které bude odeslána zpráva | outqueue |
Název fronty, do které vazba zapisuje. Pokud pole Queue neexistuje, vytvoří ho při prvním použití. |
| Vyberte nastavení z local.setting.jszapnuto. | AzureWebJobsStorage |
Název nastavení aplikace, které obsahuje připojovací řetězec pro účet úložiště. Toto AzureWebJobsStorage nastavení obsahuje připojovací řetězec pro účet úložiště, který jste vytvořili pomocí aplikace Function App. |
Vazba je přidána do bindings pole v function.jsv, což by mělo vypadat takto:
{
"type": "queue",
"direction": "out",
"name": "msg",
"queueName": "outqueue",
"connection": "AzureWebJobsStorage"
}
V projektu jazyka C# jsou vazby definovány jako atributy vazby v metodě funkce. Konkrétní definice závisí na tom, jestli vaše aplikace běží v procesu (knihovna tříd C#), nebo v izolovaném procesu.
Otevřete soubor projektu HttpExample.cs a do definice metody přidejte Run následující parametr:
[Queue("outqueue"),StorageAccount("AzureWebJobsStorage")] ICollector<string> msg,
Parametr msg je typ, který představuje kolekci zpráv, které jsou zapsány do výstupní vazby po ICollector<T> dokončení funkce. V tomto případě je výstupem fronta úložiště s názvem outqueue . Připojovací řetězec pro účet Storage se nastavuje pomocí StorageAccountAttribute . Tento atribut označuje nastavení, které obsahuje Storage připojovací řetězec účtu a lze ho použít na úrovni třídy, metody nebo parametru. V takovém případě můžete vynechat , StorageAccountAttribute protože už používáte výchozí účet úložiště.
Definice metody Run by teď měla vypadat takto:
[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)
V projektu Java jsou vazby definovány jako anotace vazby v metodě Function. function.jsv souboru se pak automaticky generuje na základě těchto poznámek.
Přejděte do umístění kódu funkce v části Src/Main/Java, otevřete soubor projektu Function. Java a do definice metody přidejte následující parametr run :
@QueueOutput(name = "msg", queueName = "outqueue",
connection = "AzureWebJobsStorage") OutputBinding<String> msg,
msgParametr je OutputBinding<T> typ, který představuje kolekci řetězců, které jsou zapsány jako zprávy do výstupní vazby po dokončení funkce. V tomto případě je výstupem fronta úložiště s názvem outqueue . Připojovací řetězec pro účet úložiště je nastaven connection metodou. Místo samotného připojovacího řetězce předáte nastavení aplikace, které obsahuje připojovací řetězec účtu úložiště.
runDefinice metody by teď měla vypadat jako v následujícím příkladu:
@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) {
Přidání kódu, který používá výstupní vazbu
Po nadefinování vazby můžete použít vazbu pro přístup k ní name jako atribut v podpisu funkce. Když použijete výstupní vazbu, nemusíte k ověřování používat kód sady Azure Storage SDK, získat odkaz na frontu nebo zapisovat data. Tyto úlohy za vás dělají výstupní vazby modulu runtime a fronty služby Functions.
Přidejte kód, který používá msg výstupní vazbu objektu pro context.bindings k vytvoření zprávy fronty. Přidejte tento kód před context.res příkaz.
// Add a message to the Storage queue,
// which is the name passed to the function.
context.bindings.msg = (req.query.name || req.body.name);
V tomto okamžiku by měla funkce vypadat takto:
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"
};
}
};
Přidejte kód, který používá msg výstupní vazbu objektu pro context.bindings k vytvoření zprávy fronty. Přidejte tento kód před context.res příkaz.
context.bindings.msg = name;
V tomto okamžiku by měla funkce vypadat takto:
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;
Přidejte kód, který používá Push-OutputBinding rutinu k zápisu textu do fronty pomocí msg výstupní vazby. Před nastavením stavu OK v příkazu přidejte tento kód if .
$outputMsg = $name
Push-OutputBinding -name msg -Value $outputMsg
V tomto okamžiku by měla funkce vypadat takto:
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
})
Aktualizujte soubor HttpExample \ _ _ init _ _ .py tak, aby odpovídal následujícímu kódu, a přidejte parametr do definice funkce a msg pod příkaz msg.set(name) 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
)
Parametr msg je instance azure.functions.Out class . Jeho metoda zapíše do fronty řetězcovou zprávu, v tomto případě název předaný funkci set v řetězci dotazu adresy URL.
Přidejte kód, který používá msg výstupní objekt vazby k vytvoření zprávy fronty. Před vrácením metody přidejte tento kód.
if (!string.IsNullOrEmpty(name))
{
// Add a message to the output collection.
msg.Add(string.Format("Name passed to the function: {0}", name));
}
V tomto okamžiku by měla funkce vypadat takto:
[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");
}
Nyní můžete použít nový msg parametr pro zápis do výstupní vazby z kódu funkce. Přidejte následující řádek kódu před reakci na úspěch pro přidání hodnoty name do msg výstupní vazby.
msg.setValue(name);
Když použijete výstupní vazbu, nemusíte používat Azure Storage kód SDK pro ověřování, získání odkazu na frontu nebo zápis dat. Úlohy za běhu functions a Queue výstupní vazby jsou za vás.
Vaše run Metoda by teď měla vypadat jako v následujícím příkladu:
@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();
}
}
Aktualizace testů
Vzhledem k tomu, že Archetype také vytvoří sadu testů, je nutné aktualizovat tyto testy pro zpracování nového msg parametru v run signatuře metody.
Přejděte do umístění testovacího kódu v části Src/test/Java, otevřete soubor projektu Function. Java a nahraďte řádek kódu //Invoke následujícím kódem.
@SuppressWarnings("unchecked")
final OutputBinding<String> msg = (OutputBinding<String>)mock(OutputBinding.class);
final HttpResponseMessage ret = new Function().run(req, msg, context);
Místní spuštění funkce
Visual Studio Code se integruje s nástroji Azure Functions Core , aby bylo možné spustit tento projekt na místním vývojovém počítači před publikováním do Azure.
Pro volání funkce stiskněte klávesu F5 ke spuštění projektu Function App. Výstup z nástrojů Tools se zobrazí na panelu Terminál. Vaše aplikace se spustí na panelu terminálu . Koncový bod adresy URL vámi spuštěné funkce aktivované protokolem HTTP se zobrazí v místním prostředí.

pokud máte potíže s provozem na Windows, ujistěte se, že výchozí terminál pro Visual Studio Code není nastaven na WSL Bash.
Se základními nástroji, které běží, přejdete do oblasti Azure: Functions . v části funkce rozbalte místní > funkce Project. klikněte pravým tlačítkem (Windows) nebo stiskněte klávesu Ctrl (macOS)
HttpExamplea vyberte možnost spustit funkci nyní....
V části Zadejte text žádosti stiskněte klávesu ENTER a odešlete do své funkce zprávu s požadavkem.
Když se funkce spustí místně a vrátí odpověď, vygeneruje se oznámení v Visual Studio Code. Informace o spuštění funkce se zobrazí na panelu terminálu .
Stisknutím kombinace kláves CTRL + C zastavte základní nástroje a odpojte ladicí program.
Místní spuštění funkce
Stejně jako v předchozím článku stiskněte klávesu F5 a spusťte projekt aplikace funkcí a nástroje Core Tools.
Se spuštěnou službou Core Tools přejděte do oblasti Azure: Functions. V části Funkce rozbalte místní Project > Functions. Klikněte pravým tlačítkem (ctrl+kliknutí na Mac) na funkci a
HttpExamplezvolte Execute Function Now... (Spustit funkci nyní).
V textu požadavku Enter se zobrazí hodnota textu zprávy požadavku
{ "name": "Azure" }. Stisknutím klávesy Enter odešlete tuto zprávu požadavku do vaší funkce.Po vrácení odpovědi zastavte stisknutím kombinace kláves Ctrl +C nástroje Core Tools.
Vzhledem k tomu, že používáte připojovací řetězec úložiště, vaše funkce se při místním spuštění připojí k účtu úložiště Azure. Při prvním použití výstupní vazby vytvoří modul runtime služby Functions ve vašem účtu úložiště novou frontu s názvem outqueue. Pomocí tohoto Průzkumník služby Storage ověříte, že se fronta vytvořila spolu s novou zprávou.
Propojení Průzkumníka služby Storage s vaším účtem
Tuto část přeskočte, pokud jste již nainstalovali Průzkumník služby Azure Storage a připojili ji ke svému účtu Azure.
Spusťte Průzkumník služby Azure Storage, vyberte ikonu připojení na levé straně a vyberte Přidat účet.

V dialogovém Připojení vyberte Přidat účet Azure, zvolte prostředí Azure a vyberte Přihlásit se..

Po úspěšném přihlášení k účtu se zobrazí všechna předplatná Azure přidružená k vašemu účtu.
Prozkoumání výstupní fronty
V Visual Studio Code stisknutím klávesy F1 otevřete paletu příkazů, vyhledejte a spusťte příkaz a zvolte název Storage
Azure Storage: Open in Storage Explorerúčtu. Váš účet úložiště se otevře v Průzkumník služby Azure Storage.Rozbalte uzel Fronty a potom vyberte frontu s názvem outqueue.
Tato fronta obsahuje zprávu, kterou vytvořila výstupní vazba fronty při spuštění funkce aktivované protokolem HTTP. Pokud jste tuto funkci volali s výchozí hodnotou
name(Azure), zpráva fronty je Name passed to the function: Azure.
Spusťte funkci znovu, odešlete další požadavek a ve frontě se zobrazí nová zpráva.
Teď je čas znovu publikovat aktualizovanou aplikaci funkcí do Azure.
Opětovné nasazení a ověření aktualizované aplikace
V Visual Studio Code stisknutím klávesy F1 otevřete paletu příkazů. Na paletě příkazů vyhledejte a vyberte
Azure Functions: Deploy to function app....Zvolte aplikaci funkcí, kterou jste vytvořili v prvním článku. Vzhledem k tomu, že projekt znovu nasazujete do stejné aplikace, výběrem možnosti Nasadit zavřete upozornění na přepsání souborů.
Po dokončení nasazení můžete funkci v Azure znovu aktivovat pomocí funkce Provést funkci nyní.
Znovu zobrazte zprávu ve frontě úložiště a ověřte, že výstupní vazba znovu vygeneruje novou zprávu ve frontě.
Vyčištění prostředků
V Azure prostředky odkazují na aplikace funkcí, funkce, účty úložiště atd. Jsou seskupené do skupin prostředků a odstraněním skupiny můžete odstranit všechno, co je ve skupině.
Vytvořili jste prostředky k dokončení těchto rychlých startů. Tyto prostředky se vám mohou fakturovat, a to v závislosti na stavu účtu a cenách služeb. Pokud prostředky už nepotřebujete, můžete k jejich odstranění použít tento postup:
V Visual Studio Code stisknutím klávesy F1 otevřete paletu příkazů. V paletě příkazů vyhledejte a vyberte
Azure Functions: Open in portal.Zvolte aplikaci Function App a stiskněte klávesu ENTER. Na Azure Portal se otevře stránka Function App.
Na kartě Přehled vyberte odkaz s názvem vedle skupiny prostředků.
Na stránce Skupina prostředků zkontrolujte seznam zahrnutých prostředků a ověřte, že jsou to ty, které chcete odstranit.
Vyberte Odstranit skupinu prostředků a postupujte podle pokynů.
Odstranění může trvat několik minut. Po jeho dokončení se na několik sekund zobrazí oznámení. K zobrazení tohoto oznámení můžete také vybrat ikonu zvonku v horní části stránky.
Další kroky
Aktualizovali jste funkci aktivovanou protokolem HTTP tak, aby zapisoval data do Storage fronty. Teď se můžete dozvědět více o vývoji funkcí pomocí Visual Studio Code: