Rychlý start: Vytvoření a nasazení funkcí do Azure Functions pomocí Azure Developer CLI
V tomto rychlém startu pomocí nástrojů příkazového řádku Azure Developer vytvoříte funkce, které reagují na požadavky HTTP. Po místním otestování kódu ho nasadíte do nové aplikace funkcí bez serveru, kterou vytvoříte v plánu Flex Consumption ve službě Azure Functions.
Zdroj projektu používá Azure Developer CLI (azd) ke zjednodušení nasazení kódu do Azure. Toto nasazení se řídí aktuálními osvědčenými postupy pro zabezpečená a škálovatelná nasazení Azure Functions.
Ve výchozím nastavení se plán Flex Consumption řídí fakturačním modelem s průběžnými platbami , což znamená, že k dokončení tohoto rychlého startu se v účtu Azure účtují malé náklady na několik centů nebo méně USD.
Požadavky
Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Java 17 Developer Kit
- Pokud používáte jinou podporovanou verzi Javy, musíte aktualizovat soubor pom.xml projektu.
- Proměnná
JAVA_HOME
prostředí musí být nastavena na umístění instalace správné verze sady JDK.
- Apache Maven 3.8.x
- Zabezpečený testovací nástroj HTTP pro odesílání požadavků s datovými částmi JSON do koncových bodů funkce. Tento článek používá
curl
.
Inicializace projektu
Pomocí azd init
příkazu můžete vytvořit místní projekt kódu Azure Functions ze šablony.
V místním terminálu nebo příkazovém řádku spusťte tento
azd init
příkaz v prázdné složce:azd init --template functions-quickstart-dotnet-azd -e flexquickstart-dotnet
Tento příkaz načte soubory projektu z úložiště šablony a inicializuje projekt v aktuální složce. Příznak
-e
nastaví název aktuálního prostředí. Vazd
prostředí se používá k zachování jedinečného kontextu nasazení pro vaši aplikaci a můžete definovat více než jedno. Používá se také v názvu skupiny prostředků, kterou vytvoříte v Azure.Spuštěním tohoto příkazu přejděte do
http
složky aplikace:cd http
Ve složce, která obsahuje tato data JSON, vytvořte soubor s názvem local.settings.json
http
:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated" } }
Tento soubor se vyžaduje při místním spuštění.
V místním terminálu nebo příkazovém řádku spusťte tento
azd init
příkaz v prázdné složce:azd init --template azure-functions-java-flex-consumption-azd -e flexquickstart-java
Tento příkaz načte soubory projektu z úložiště šablony a inicializuje projekt v aktuální složce. Příznak
-e
nastaví název aktuálního prostředí. Vazd
prostředí se používá k zachování jedinečného kontextu nasazení pro vaši aplikaci a můžete definovat více než jedno. Používá se také v názvu skupiny prostředků, kterou vytvoříte v Azure.Spuštěním tohoto příkazu přejděte do
http
složky aplikace:cd http
Ve složce, která obsahuje tato data JSON, vytvořte soubor s názvem local.settings.json
http
:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java" } }
Tento soubor se vyžaduje při místním spuštění.
V místním terminálu nebo příkazovém řádku spusťte tento
azd init
příkaz v prázdné složce:azd init --template functions-quickstart-javascript-azd -e flexquickstart-js
Tento příkaz načte soubory projektu z úložiště šablon a inicializuje projekt v kořenové složce. Příznak
-e
nastaví název aktuálního prostředí. Vazd
prostředí se používá k zachování jedinečného kontextu nasazení pro vaši aplikaci a můžete definovat více než jedno. Používá se také v názvu skupiny prostředků, kterou vytvoříte v Azure.V kořenové složce vytvořte soubor s názvem local.settings.json , který obsahuje tato data JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }
Tento soubor se vyžaduje při místním spuštění.
V místním terminálu nebo příkazovém řádku spusťte tento
azd init
příkaz v prázdné složce:azd init --template functions-quickstart-powershell-azd -e flexquickstart-ps
Tento příkaz načte soubory projektu z úložiště šablon a inicializuje projekt v kořenové složce. Příznak
-e
nastaví název aktuálního prostředí. Vazd
prostředí se používá k zachování jedinečného kontextu nasazení pro vaši aplikaci a můžete definovat více než jedno. Používá se také v názvu skupiny prostředků, kterou vytvoříte v Azure.Spuštěním tohoto příkazu přejděte do
src
složky aplikace:cd src
Ve složce, která obsahuje tato data JSON, vytvořte soubor s názvem local.settings.json
src
:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2" } }
Tento soubor se vyžaduje při místním spuštění.
V místním terminálu nebo příkazovém řádku spusťte tento
azd init
příkaz v prázdné složce:azd init --template functions-quickstart-typescript-azd -e flexquickstart-ts
Tento příkaz načte soubory projektu z úložiště šablon a inicializuje projekt v kořenové složce. Příznak
-e
nastaví název aktuálního prostředí. Vazd
prostředí se používá k zachování jedinečného kontextu nasazení pro vaši aplikaci a můžete definovat více než jedno. Používá se také v názvu skupiny prostředků, kterou vytvoříte v Azure.V kořenové složce vytvořte soubor s názvem local.settings.json , který obsahuje tato data JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }
Tento soubor se vyžaduje při místním spuštění.
V místním terminálu nebo příkazovém řádku spusťte tento
azd init
příkaz v prázdné složce:azd init --template functions-quickstart-python-http-azd -e flexquickstart-py
Tento příkaz načte soubory projektu z úložiště šablon a inicializuje projekt v kořenové složce. Příznak
-e
nastaví název aktuálního prostředí. Vazd
prostředí se používá k zachování jedinečného kontextu nasazení pro vaši aplikaci a můžete definovat více než jedno. Používá se také v názvu skupiny prostředků, kterou vytvoříte v Azure.V kořenové složce vytvořte soubor s názvem local.settings.json , který obsahuje tato data JSON:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "python" } }
Tento soubor se vyžaduje při místním spuštění.
Vytvoření a aktivace virtuálního prostředí
Spuštěním těchto příkazů v kořenové složce vytvořte a aktivujte virtuální prostředí s názvem .venv
:
python3 -m venv .venv
source .venv/bin/activate
Pokud Python nenainstaloval balíček venv do distribuce Linuxu, spusťte následující příkaz:
sudo apt-get install python3-venv
Spuštění v místním prostředí
Spusťte tento příkaz ze složky aplikace v terminálu nebo na příkazovém řádku:
func start
mvn clean package mvn azure-functions:run
npm install func start
npm install npm start
Když se hostitel Functions spustí ve složce místního projektu, zapíše koncové body adresy URL funkcí aktivovaných protokolem HTTP do výstupu terminálu.
V prohlížeči přejděte na
httpget
koncový bod, který by měl vypadat jako tato adresa URL:V novém okně terminálu nebo příkazového řádku spusťte tento
curl
příkaz, kterým odešlete požadavek POST s datovou částí JSON do koncovéhohttppost
bodu:curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d @testdata.json
curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@src/functions/testdata.json"
Tento příkaz načte data datové části JSON ze
testdata.json
souboru projektu. Příklady obou požadavků HTTP najdete vtest.http
souboru projektu.Až budete hotovi, ukončete proces hostitele stisknutím ctrl+C v okně
func.exe
terminálu.
- Spuštěním
deactivate
ukončete virtuální prostředí.
Kontrola kódu (volitelné)
Můžete si projít kód, který definuje dva koncové body funkce triggeru HTTP:
[Function("httpget")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get")]
HttpRequest req,
string name)
{
var returnValue = string.IsNullOrEmpty(name)
? "Hello, World."
: $"Hello, {name}.";
_logger.LogInformation($"C# HTTP trigger function processed a request for {returnValue}.");
return new OkObjectResult(returnValue);
}
@FunctionName("httpget")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.FUNCTION)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
context.getLogger().info("Java HTTP trigger processed a request.");
// Parse query parameter
String name = Optional.ofNullable(request.getQueryParameters().get("name")).orElse("World");
return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
}
const { app } = require('@azure/functions');
app.http('httpget', {
methods: ['GET'],
authLevel: 'function',
handler: async (request, context) => {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
}
});
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
export async function httpGetFunction(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
};
app.http('httpget', {
methods: ['GET'],
authLevel: 'function',
handler: httpGetFunction
});
Tento function.json
soubor definuje httpget
funkci:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get"
],
"route": "httpget"
},
{
"type": "http",
"direction": "out",
"name": "Response"
}
]
}
Tento run.ps1
soubor implementuje kód funkce:
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
$name = $Request.Query.name
$body = "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response."
if ($name) {
$body = "Hello, $name. This HTTP triggered function executed successfully."
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $body
})
@app.route(route="httpget", methods=["GET"])
def http_get(req: func.HttpRequest) -> func.HttpResponse:
name = req.params.get("name", "World")
logging.info(f"Processing GET request. Name: {name}")
return func.HttpResponse(f"Hello, {name}!")
Po místním ověření funkcí je čas je publikovat do Azure.
Vytvoření zdrojů Azure
Tento projekt je nakonfigurovaný tak, aby pomocí azd provision
příkazu vytvořil aplikaci funkcí v plánu Flex Consumption spolu s dalšími požadovanými prostředky Azure.
Poznámka:
Tento projekt zahrnuje sadu souborů Bicep, které používají k vytvoření zabezpečeného nasazení do plánu Flex Consumption, který azd
dodržuje osvědčené postupy.
azd deploy
Pro azd up
aplikace v Javě se v současné době nepodporují příkazy.
V kořenové složce projektu spusťte tento příkaz a vytvořte požadované prostředky Azure:
azd provision
Kořenová složka obsahuje
azure.yaml
definiční soubor vyžadovanýazd
.Pokud ještě nejste přihlášení, zobrazí se výzva k ověření pomocí účtu Azure.
Po zobrazení výzvy zadejte tyto požadované parametry nasazení:
Parametr Popis Předplatné Azure Předplatné, ve kterém se vaše prostředky vytvářejí. Umístění Azure Oblast Azure, ve které se má vytvořit skupina prostředků, která obsahuje nové prostředky Azure. Zobrazí se pouze oblasti, které aktuálně podporují plán Flex Consumption. Příkaz
azd provision
použije vaši odpověď na tyto výzvy s konfiguračními soubory Bicep k vytvoření a konfiguraci těchto požadovaných prostředků Azure:- Plán Flex Consumption a aplikace funkcí
- Azure Storage (povinné) a Application Insights (doporučeno)
- Zásady přístupu a role pro váš účet
- Připojení mezi službami pomocí spravovaných identit (místo uložených připojovací řetězec)
- Virtuální síť pro bezpečné spuštění aplikace funkcí i dalších prostředků Azure
Po úspěšném dokončení příkazu můžete kód projektu nasadit do této nové aplikace funkcí v Azure.
Nasazení do Azure
Pomocí nástrojů Core Tools můžete zabalit kód a nasadit ho target
do Azure z výstupní složky.
Ve výstupní složce přejděte ke složce aplikace ekvivalentní
target
:cd http/target/azure-functions/contoso-functions
Tato složka by měla mít soubor host.json, který označuje, že se jedná o kořen zkompilované aplikace funkcí Java.
Spuštěním těchto příkazů nasaďte zkompilovaný projekt kódu Java do nového prostředku aplikace funkcí v Azure pomocí nástrojů Core Tools:
APP_NAME=$(azd env get-value AZURE_FUNCTION_NAME) func azure functionapp publish $APP_NAME
Příkaz
azd env get-value
získá název vaší aplikace funkcí z místního prostředí, které je vyžadováno pro nasazení pomocífunc azure functionapp publish
. Po úspěšném dokončení publikování se v Azure zobrazí odkazy na koncové body triggeru HTTP.
Nasazení do Azure
Tento projekt je nakonfigurovaný tak, aby pomocí azd up
příkazu nasadil tento projekt do nové aplikace funkcí v plánu Flex Consumption v Azure.
Tip
Tento projekt zahrnuje sadu souborů Bicep, které používají k vytvoření zabezpečeného nasazení do plánu Flex Consumption, který azd
dodržuje osvědčené postupy.
Spuštěním tohoto příkazu vytvořte
azd
požadované prostředky Azure v Azure a nasaďte projekt kódu do nové aplikace funkcí:azd up
Kořenová složka obsahuje
azure.yaml
definiční soubor vyžadovanýazd
.Pokud ještě nejste přihlášení, zobrazí se výzva k ověření pomocí účtu Azure.
Po zobrazení výzvy zadejte tyto požadované parametry nasazení:
Parametr Popis Předplatné Azure Předplatné, ve kterém se vaše prostředky vytvářejí. Umístění Azure Oblast Azure, ve které se má vytvořit skupina prostředků, která obsahuje nové prostředky Azure. Zobrazí se pouze oblasti, které aktuálně podporují plán Flex Consumption. Příkaz
azd up
použije k dokončení těchto úloh nasazení odpověď na tyto výzvy s konfiguračními soubory Bicep:Vytvořte a nakonfigurujte tyto požadované prostředky Azure (ekvivalentní
azd provision
):- Plán Flex Consumption a aplikace funkcí
- Azure Storage (povinné) a Application Insights (doporučeno)
- Zásady přístupu a role pro váš účet
- Připojení mezi službami pomocí spravovaných identit (místo uložených připojovací řetězec)
- Virtuální síť pro bezpečné spuštění aplikace funkcí i dalších prostředků Azure
Zabalte a nasaďte kód do kontejneru nasazení (ekvivalentní).
azd deploy
Aplikace se pak spustí a spustí v nasazeném balíčku.
Po úspěšném dokončení příkazu se zobrazí odkazy na prostředky, které jste vytvořili.
Vyvolání funkce v Azure
Koncové body funkcí v Azure teď můžete vyvolat tak, že na jejich adresy URL odešlete požadavky HTTP pomocí testovacího nástroje HTTP nebo z prohlížeče (pro požadavky GET). Při spuštění funkcí v Azure se vynucuje autorizace přístupového klíče a vy musíte zadat přístupový klíč funkce s vaším požadavkem.
Nástroje Core Tools můžete použít k získání koncových bodů adresy URL vašich funkcí spuštěných v Azure.
V místním terminálu nebo příkazovém řádku spusťte tyto příkazy, abyste získali hodnoty koncového bodu adresy URL:
$APP_NAME = azd env get-value AZURE_FUNCTION_NAME func azure functionapp list-functions $APP_NAME --show-keys
Příkaz
azd env get-value
získá název aplikace funkcí z místního prostředí.--show-keys
Použití možnostifunc azure functionapp list-functions
znamená, že vrácená adresa URL vyvolání: hodnota pro každý koncový bod obsahuje přístupový klíč na úrovni funkce.Stejně jako předtím pomocí testovacího nástroje HTTP ověřte tyto adresy URL ve vaší aplikaci funkcí spuštěné v Azure.
Opětovné nasazení kódu
Příkaz můžete spustit azd up
tolikrát, kolikrát potřebujete zřídit prostředky Azure a nasadit aktualizace kódu do aplikace funkcí.
Poznámka:
Nasazené soubory kódu se vždy přepíšou nejnovějším balíčkem pro nasazení.
Vaše počáteční odpovědi na azd
výzvy a všechny proměnné prostředí vygenerované azd
pomocí se ukládají místně ve vašem pojmenovaném prostředí. azd env get-values
Pomocí příkazu zkontrolujte všechny proměnné ve vašem prostředí, které se použily při vytváření prostředků Azure.
Vyčištění prostředků
Po dokončení práce s aplikací funkcí a souvisejícími prostředky můžete pomocí tohoto příkazu odstranit aplikaci funkcí a související prostředky z Azure a vyhnout se dalším nákladům:
azd down --no-prompt
Poznámka:
Tato --no-prompt
možnost dává azd
pokyn k odstranění skupiny prostředků bez potvrzení od vás.
Tento příkaz nemá vliv na místní projekt kódu.