Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här snabbstarten använder du kommandoradsverktyg för Azure Developer för att skapa ett skalbart webb-API med funktionsslutpunkter som svarar på HTTP-begäranden. När du har testat koden lokalt distribuerar du den till en ny serverlös funktionsapp som du skapar som körs i en Flex Consumption-plan i Azure Functions.
Projektkällan använder Azure Developer CLI (azd) för att förenkla distributionen av din kod till Azure. Den här distributionen följer aktuella metodtips för säkra och skalbara Azure Functions-distributioner.
Som standard följer Flex Consumption-planen en faktureringsmodell för att betala för vad du använder , vilket innebär att den här snabbstarten medför en liten kostnad på några USD cent eller mindre i ditt Azure-konto.
Prerequisites
Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
-
Java 17 Developer Kit
- Om du använder en annan version av Java som stöds måste du uppdatera projektets pom.xml fil.
- Miljövariabeln
JAVA_HOMEmåste anges till installationsplatsen för rätt version av Java Development Kit (JDK).
- Apache Maven 3.8.x
- Ett säkert HTTP-testverktyg för att skicka begäranden med JSON-nyttolaster till funktionsslutpunkterna. Den här artikeln använder
curl.
Initiera projektet
Du kan använda azd init kommandot för att skapa ett lokalt Azure Functions-kodprojekt från en mall.
Kör det här
azd initkommandot i en tom mapp i den lokala terminalen eller kommandotolken:azd init --template functions-quickstart-dotnet-azd -e httpendpoint-dotnetDet här kommandot hämtar projektfilerna från malllagringsplatsen och initierar projektet i den aktuella mappen. Flaggan
-eanger ett namn för den aktuella miljön. Iazdanvänds miljön för att upprätthålla en unik distributionskontext för din app och du kan definiera mer än en. Den används också i namnet på den resursgrupp som du skapar i Azure.Kör det här kommandot för att navigera till appmappen
http:cd httpSkapa en fil med namnet local.settings.json i
httpmappen som innehåller dessa JSON-data:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated" } }Den här filen krävs när den körs lokalt.
Kör det här
azd initkommandot i en tom mapp i den lokala terminalen eller kommandotolken:azd init --template azure-functions-java-flex-consumption-azd -e httpendpoint-javaDet här kommandot hämtar projektfilerna från malllagringsplatsen och initierar projektet i den aktuella mappen. Flaggan
-eanger ett namn för den aktuella miljön. Iazdanvänds miljön för att upprätthålla en unik distributionskontext för din app och du kan definiera mer än en. Den används också i namnet på den resursgrupp som du skapar i Azure.Kör det här kommandot för att navigera till appmappen
http:cd httpSkapa en fil med namnet local.settings.json i
httpmappen som innehåller dessa JSON-data:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java" } }Den här filen krävs när den körs lokalt.
Kör det här
azd initkommandot i en tom mapp i den lokala terminalen eller kommandotolken:azd init --template functions-quickstart-javascript-azd -e httpendpoint-jsDet här kommandot hämtar projektfilerna från malllagringsplatsen och initierar projektet i rotmappen. Flaggan
-eanger ett namn för den aktuella miljön. Iazdanvänds miljön för att upprätthålla en unik distributionskontext för din app och du kan definiera mer än en. Den används också i namnet på den resursgrupp som du skapar i Azure.Skapa en fil med namnet local.settings.json i rotmappen som innehåller dessa JSON-data:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }Den här filen krävs när den körs lokalt.
Kör det här
azd initkommandot i en tom mapp i den lokala terminalen eller kommandotolken:azd init --template functions-quickstart-powershell-azd -e httpendpoint-psDet här kommandot hämtar projektfilerna från malllagringsplatsen och initierar projektet i rotmappen. Flaggan
-eanger ett namn för den aktuella miljön. Iazdanvänds miljön för att upprätthålla en unik distributionskontext för din app och du kan definiera mer än en. Den används också i namnet på den resursgrupp som du skapar i Azure.Kör det här kommandot för att navigera till appmappen
src:cd srcSkapa en fil med namnet local.settings.json i
srcmappen som innehåller dessa JSON-data:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2" } }Den här filen krävs när den körs lokalt.
Kör det här
azd initkommandot i en tom mapp i den lokala terminalen eller kommandotolken:azd init --template functions-quickstart-typescript-azd -e httpendpoint-tsDet här kommandot hämtar projektfilerna från malllagringsplatsen och initierar projektet i rotmappen. Flaggan
-eanger ett namn för den aktuella miljön. Iazdanvänds miljön för att upprätthålla en unik distributionskontext för din app och du kan definiera mer än en. Den används också i namnet på den resursgrupp som du skapar i Azure.Skapa en fil med namnet local.settings.json i rotmappen som innehåller dessa JSON-data:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node" } }Den här filen krävs när den körs lokalt.
Kör det här
azd initkommandot i en tom mapp i den lokala terminalen eller kommandotolken:azd init --template functions-quickstart-python-http-azd -e httpendpoint-pyDet här kommandot hämtar projektfilerna från malllagringsplatsen och initierar projektet i rotmappen. Flaggan
-eanger ett namn för den aktuella miljön. Iazdanvänds miljön för att upprätthålla en unik distributionskontext för din app och du kan definiera mer än en. Den används också i namnet på den resursgrupp som du skapar i Azure.Skapa en fil med namnet local.settings.json i rotmappen som innehåller dessa JSON-data:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "python" } }Den här filen krävs när den körs lokalt.
Skapa och aktivera en virtuell miljö
I rotmappen kör du dessa kommandon för att skapa och aktivera en virtuell miljö med namnet .venv:
python3 -m venv .venv
source .venv/bin/activate
Om Python inte installerade venv-paketet på Linux-distributionen kör du följande kommando:
sudo apt-get install python3-venv
Kör i din lokala miljö
Kör det här kommandot från appmappen i en terminal eller kommandotolk:
func startmvn clean package mvn azure-functions:runnpm install func startnpm install npm startNär Functions-värden startar i den lokala projektmappen skriver den URL-slutpunkterna för dina HTTP-utlösta funktioner till terminalutdata.
I webbläsaren navigerar du till
httpgetslutpunkten, som bör se ut så här:Från ett nytt terminal- eller kommandotolkfönster kör du det här
curlkommandot för att skicka en POST-begäran med en JSON-nyttolast tillhttppostslutpunkten:curl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d @testdata.jsoncurl -i http://localhost:7071/api/httppost -H "Content-Type: text/json" -d "@src/functions/testdata.json"Det här kommandot läser JSON-nyttolastdata från
testdata.jsonprojektfilen. Du hittar exempel på båda HTTP-begäranden itest.httpprojektfilen.När du är klar trycker du på Ctrl+C i terminalfönstret för att stoppa
func.exevärdprocessen.
- Kör
deactivateför att stänga av den virtuella miljön.
Granska koden (valfritt)
Du kan granska koden som definierar de två HTTP-utlösarfunktionsslutpunkterna:
[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
});
Den här function.json filen definierar httpget funktionen:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get"
],
"route": "httpget"
},
{
"type": "http",
"direction": "out",
"name": "Response"
}
]
}
Den här run.ps1 filen implementerar funktionskoden:
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}!")
Du kan granska hela mallprojektet här.
Du kan granska hela mallprojektet här.
Du kan granska hela mallprojektet här.
Du kan granska hela mallprojektet här.
Du kan granska hela mallprojektet här.
Du kan granska hela mallprojektet här.
När du har verifierat dina funktioner lokalt är det dags att publicera dem till Azure.
Skapa Azure-resurser
Det här projektet är konfigurerat för att använda azd provision kommandot för att skapa en funktionsapp i en Flex Consumption-plan, tillsammans med andra nödvändiga Azure-resurser.
Note
Det här projektet innehåller en uppsättning Bicep-filer som azd använder för att skapa en säker distribution till en Flex-förbrukningsplan som följer bästa praxis.
azd up Kommandona och azd deploy stöds för närvarande inte för Java-appar.
I rotmappen för projektet kör du det här kommandot för att skapa nödvändiga Azure-resurser:
azd provisionRotmappen innehåller den
azure.yamldefinitionsfil som krävs avazd.Om du inte redan är inloggad uppmanas du att autentisera med ditt Azure-konto.
Ange följande nödvändiga distributionsparametrar när du uppmanas att göra det:
Parameter Description Azure-prenumeration Prenumeration där dina resurser skapas. Azure-plats Azure-region där du kan skapa resursgruppen som innehåller de nya Azure-resurserna. Endast regioner som för närvarande stöder Flex Consumption-planen visas. Kommandot
azd provisionanvänder ditt svar på dessa frågor med Bicep-konfigurationsfilerna för att skapa och konfigurera dessa nödvändiga Azure-resurser:- Flex Consumption-plan och funktionsapp
- Azure Storage (krävs) och Application Insights (rekommenderas)
- Åtkomstprinciper och roller för ditt konto
- Tjänst-till-tjänst-anslutningar med hanterade identiteter (i stället för lagrade anslutningssträng)
- Virtuellt nätverk för säker körning av både funktionsappen och andra Azure-resurser
När kommandot har slutförts kan du distribuera projektkoden till den nya funktionsappen i Azure.
Distribuera till Azure
Du kan använda Core Tools för att paketera din kod och distribuera den till Azure från utdatamappen target .
Navigera till motsvarande appmapp i utdatamappen
target:cd http/target/azure-functions/contoso-functionsDen här mappen ska ha en host.json fil, vilket anger att den är roten i din kompilerade Java-funktionsapp.
Kör dessa kommandon för att distribuera ditt kompilerade Java-kodprojekt till den nya funktionsappresursen i Azure med core tools:
Kommandot
azd env get-valuehämtar funktionsappens namn från den lokala miljön, vilket krävs för distribution med hjälp avfunc azure functionapp publish. När publiceringen är klar visas länkar till HTTP-utlösarslutpunkterna i Azure.
Distribuera till Azure
Det här projektet är konfigurerat för att använda azd up kommandot för att distribuera projektet till en ny funktionsapp i en Flex Consumption-plan i Azure.
Tip
Det här projektet innehåller en uppsättning Bicep-filer som azd använder för att skapa en säker distribution till en Flex-förbrukningsplan som följer bästa praxis.
Kör det här kommandot för att
azdskapa nödvändiga Azure-resurser i Azure och distribuera kodprojektet till den nya funktionsappen:azd upRotmappen innehåller den
azure.yamldefinitionsfil som krävs avazd.Om du inte redan är inloggad uppmanas du att autentisera med ditt Azure-konto.
Ange följande nödvändiga distributionsparametrar när du uppmanas att göra det:
Parameter Description Azure-prenumeration Prenumeration där dina resurser skapas. Azure-plats Azure-region där du kan skapa resursgruppen som innehåller de nya Azure-resurserna. Endast regioner som för närvarande stöder Flex Consumption-planen visas. Kommandot
azd upanvänder ditt svar på dessa frågor med Bicep-konfigurationsfilerna för att slutföra dessa distributionsuppgifter:Skapa och konfigurera de här nödvändiga Azure-resurserna (motsvarande
azd provision):- Flex Consumption-plan och funktionsapp
- Azure Storage (krävs) och Application Insights (rekommenderas)
- Åtkomstprinciper och roller för ditt konto
- Tjänst-till-tjänst-anslutningar med hanterade identiteter (i stället för lagrade anslutningssträng)
- Virtuellt nätverk för säker körning av både funktionsappen och andra Azure-resurser
Paketera och distribuera koden till distributionscontainern (motsvarande
azd deploy). Appen startas sedan och körs i det distribuerade paketet.
När kommandot har slutförts visas länkar till de resurser som du har skapat.
Anropa funktionen i Azure
Nu kan du anropa funktionsslutpunkterna i Azure genom att göra HTTP-begäranden till deras URL:er med hjälp av HTTP-testverktyget eller från webbläsaren (för GET-begäranden). När dina funktioner körs i Azure framtvingas åtkomstnyckelauktorisering och du måste ange en funktionsåtkomstnyckel med din begäran.
Du kan använda Core Tools för att hämta URL-slutpunkterna för dina funktioner som körs i Azure.
I den lokala terminalen eller kommandotolken kör du följande kommandon för att hämta URL-slutpunktsvärdena:
$APP_NAME = azd env get-value AZURE_FUNCTION_NAME func azure functionapp list-functions $APP_NAME --show-keysKommandot
azd env get-valuehämtar funktionsappens namn från den lokala miljön. Om du använder alternativet--show-keysmedfunc azure functionapp list-functionsinnebär det att det returnerade värdet Invoke URL: för varje slutpunkt innehåller en åtkomstnyckel på funktionsnivå.Precis som tidigare använder du HTTP-testverktyget för att verifiera dessa URL:er i funktionsappen som körs i Azure.
Distribuera om koden
Du kan köra azd up kommandot så många gånger du behöver både etablera dina Azure-resurser och distribuera koduppdateringar till funktionsappen.
Note
Distribuerade kodfiler skrivs alltid över av det senaste distributionspaketet.
Dina första svar på azd frågor och eventuella miljövariabler som genereras av azd lagras lokalt i din namngivna miljö.
azd env get-values Använd kommandot för att granska alla variabler i din miljö som användes när du skapade Azure-resurser.
Rensa resurser
När du är klar med funktionsappen och relaterade resurser kan du använda det här kommandot för att ta bort funktionsappen och dess relaterade resurser från Azure och undvika ytterligare kostnader:
azd down --no-prompt
Note
Alternativet --no-prompt instruerar azd dig att ta bort resursgruppen utan någon bekräftelse från dig.
Det här kommandot påverkar inte ditt lokala kodprojekt.