Sdílet prostřednictvím


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:

mvn clean package 
mvn azure-functions:run

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:

mvn azure-functions:deploy

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í: