Připojení funkce Javy ke službě Azure Storage
Azure Functions umožňuje připojit služby Azure a další prostředky k funkcím, aniž byste museli psát vlastní integrační kód. Tyto vazby, které představují vstup i výstup, 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 jenom jeden trigger, může mít více vstupních a výstupních vazeb. Další informace najdete v tématu Azure Functions konceptů triggerů a vazeb.
V tomto článku se dozvíte, jak integrovat funkci, kterou jste vytvořili v předchozím článku rychlého startu , do fronty služby Azure Storage. Výstupní vazba, kterou přidáte do této funkce, zapisuje data z požadavku HTTP do zprávy ve frontě.
Většina vazeb vyžaduje uložený připojovací řetězec, který functions používá pro přístup k vázané službě. Abyste si toto připojení usnadnili, použijte účet úložiště, který jste vytvořili pomocí aplikace funkcí. Připojení k tomuto účtu je již uloženo v nastavení aplikace s názvem AzureWebJobsStorage
.
Požadavky
Než začnete s tímto článkem, proveďte kroky v části 1 rychlého startu pro Javu.
Stažení nastavení aplikace funkcí
Už jste vytvořili aplikaci funkcí v Azure spolu s požadovaným účtem úložiště. Připojovací řetězec pro tento účet je bezpečně uložený v nastavení aplikace v Azure. V tomto článku píšete zprávy do fronty služby Storage ve stejném účtu. Pokud se chcete připojit ke 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.
Spuštěním následujícího příkazu Azure Functions Core Tools v kořenovém adresáři projektu stáhněte nastavení do souboru local.settings.json a nahraďte <APP_NAME>
názvem vaší aplikace funkcí z předchozího článku:
func azure functionapp fetch-app-settings <APP_NAME>
Možná se budete muset přihlásit ke svému účtu Azure.
Důležité
Tento příkaz přepíše všechna existující nastavení hodnotami z vaší aplikace funkcí v Azure.
Protože obsahuje tajné kódy, soubor local.settings.json se nikdy nepublikuje a měl by být vyloučen ze správy zdrojového kódu.
Potřebujete hodnotu AzureWebJobsStorage
, což je připojovací řetězec účtu úložiště. Toto připojení použijete k ověření, že výstupní vazba funguje podle očekávání.
Povolení sad rozšíření
Nejjednodušší způsob, jak nainstalovat rozšíření vazeb, je povolit sady rozšíření. Když povolíte sady, automaticky se nainstaluje předdefinovaná sada balíčků rozšíření.
Pokud chcete povolit sady rozšíření, otevřete soubor host.json a aktualizujte jeho obsah tak, aby odpovídal následujícímu kódu:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.*, 4.0.0)"
}
}
Teď můžete do projektu přidat výstupní vazbu úložiště.
Přidání výstupní vazby
V projektu Java jsou vazby definovány jako poznámky vazby v metodě funkce. Na základě těchto poznámek se pak automaticky vygeneruje soubor function.json .
Přejděte do umístění kódu funkce v části src/main/java, otevřete soubor projektu Function.java a do run
definice metody přidejte následující parametr:
@QueueOutput(name = "msg", queueName = "outqueue", connection = "AzureWebJobsStorage") OutputBinding<String> msg
Parametr msg
je OutputBinding<T>
typ, který představuje kolekci řetězců. Tyto řetězce se po dokončení funkce zapisují jako zprávy do výstupní vazby. 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 metodou connection
. Místo předání samotného připojovacího řetězce předáte nastavení aplikace, které obsahuje připojovací řetězec účtu úložiště.
Definice run
metody teď musí vypadat jako v následujícím příkladu:
@FunctionName("HttpTrigger-Java")
public HttpResponseMessage run(
@HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.FUNCTION)
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
Teď můžete použít nový msg
parametr k zápisu do výstupní vazby z kódu funkce. Před úspěšnou odpověď přidejte následující řádek kódu, který přidá hodnotu name
do výstupní vazby msg
.
msg.setValue(name);
Když použijete výstupní vazbu, nemusíte k ověřování, získání odkazu na frontu nebo zápisu dat používat kód sady SDK služby Azure Storage. Tyto úlohy provádí za vás vazba modulu runtime a výstupu fronty functions.
Vaše run
metoda teď musí vypadat jako v následujícím příkladu:
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 archetyp také vytvoří sadu testů, musíte tyto testy aktualizovat tak, aby zvládly nový msg
parametr v run
podpisu metody.
Přejděte do umístění testovacího kódu v src/test/java, otevřete soubor projektu Function.java a nahraďte řádek kódu v části //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);
Teď jste připraveni vyzkoušet novou výstupní vazbu místně.
Místní spuštění funkce
Stejně jako předtím použijte následující příkaz k sestavení projektu a místnímu spuštění modulu runtime Functions:
Poznámka
Vzhledem k tomu, že jste povolili sady rozšíření v souboru host.json, rozšíření vazby úložiště bylo staženo a nainstalováno během spouštění společně s dalšími rozšířeními vazeb Microsoftu.
Stejně jako předtím aktivujte funkci z příkazového řádku pomocí cURL v novém okně terminálu:
curl -w "\n" http://localhost:7071/api/HttpTrigger-Java --data AzureFunctions
Tentokrát výstupní vazba také vytvoří frontu s názvem outqueue
ve vašem účtu úložiště a přidá zprávu se stejným řetězcem.
Dále pomocí Azure CLI zobrazíte novou frontu a ověříte, že se přidala zpráva. Frontu můžete zobrazit také pomocí Průzkumník služby Microsoft Azure Storage nebo v Azure Portal.
Nastavení připojení účtu úložiště
Otevřete soubor local.settings.json a zkopírujte hodnotu AzureWebJobsStorage
, což je připojovací řetězec účtu úložiště.
AZURE_STORAGE_CONNECTION_STRING
Pomocí tohoto příkazu Bash nastavte proměnnou prostředí na připojovací řetězec:
AZURE_STORAGE_CONNECTION_STRING="<STORAGE_CONNECTION_STRING>"
Když nastavíte připojovací řetězec v AZURE_STORAGE_CONNECTION_STRING
proměnné prostředí, budete mít přístup ke svému účtu úložiště, aniž byste museli pokaždé poskytovat ověřování.
Dotazování fronty úložiště
Pomocí příkazu az storage queue list
můžete zobrazit fronty služby Storage ve vašem účtu, jako v následujícím příkladu:
az storage queue list --output tsv
Výstup tohoto příkazu obsahuje frontu s názvem outqueue
, což je fronta, která byla vytvořena při spuštění funkce.
Dále pomocí az storage message peek
příkazu zobrazte zprávy v této frontě, jako v tomto příkladu:
echo `echo $(az storage message peek --queue-name outqueue -o tsv --query '[].{Message:content}') | base64 --decode`
Vrácený řetězec by měl být stejný jako zpráva, kterou jste odeslali k otestování funkce.
Poznámka
Předchozí příklad dekóduje vrácený řetězec z base64. Je to proto, že vazby služby Queue Storage zapisují a čtou z Azure Storage jako řetězce base64.
Opětovné nasazení projektu
Pokud chcete aktualizovat publikovanou aplikaci, spusťte znovu následující příkaz:
Znovu můžete použít cURL k testování nasazené funkce. Stejně jako předtím předejte hodnotu AzureFunctions
v textu požadavku POST do adresy URL, jako v tomto příkladu:
curl -w "\n" https://fabrikam-functions-20190929094703749.azurewebsites.net/api/HttpTrigger-Java?code=zYRohsTwBlZ68YF.... --data AzureFunctions
Můžete znovu prozkoumat zprávu fronty úložiště a ověřit, že výstupní vazba vygeneruje novou zprávu ve frontě podle očekávání.
Vyčištění prostředků
Další rychlé starty v této kolekci jsou postavené na tomto rychlém startu. Pokud plánujete pokračovat v dalších rychlých startech nebo kurzech, nevyčistíte prostředky vytvořené v tomto rychlém startu. Pokud nechcete pokračovat, pomocí následujícího příkazu odstraňte všechny prostředky vytvořené v tomto rychlém startu:
az group delete --name myResourceGroup
Vyberte y
po zobrazení výzvy.
Další kroky
Aktualizovali jste funkci aktivovanou protokolem HTTP tak, aby zapisovala data do fronty služby Storage. Další informace o vývoji Azure Functions pomocí Javy najdete v příručce pro vývojáře Azure Functions Javě a Azure Functions triggerů a vazeb. Příklady kompletních projektů funkcí v Javě najdete v ukázkách funkcí Java.
Dále byste měli povolit monitorování Application Insights pro vaši aplikaci funkcí: