Arbeta med äldre proxyservrar
Viktigt!
Azure Functions-proxyservrar är en äldre funktion för version 1.x till 3.x av Azure Functions-körningen. Stöd för proxyservrar kan återaktiveras i version 4.x så att du kan uppgradera funktionsapparna till den senaste körningsversionen. Så snart som möjligt bör du byta till att integrera dina funktionsappar med Azure API Management. Med API Management kan du dra nytta av en mer komplett uppsättning funktioner för att definiera, skydda, hantera och tjäna pengar på dina Functions-baserade API:er. Mer information finns i API Management-integrering.
Information om hur du återaktiverar stöd för proxyservrar i Functions version 4.x finns i Återaktivera proxyservrar i Functions v4.x.
För att göra det enklare att migrera från befintliga proxyexempel länkar den här artikeln till motsvarande API Management-innehåll när det är tillgängligt.
Den här artikeln beskriver hur du konfigurerar och arbetar med Azure Functions-proxyservrar. Med den här funktionen kan du ange slutpunkter i funktionsappen som implementeras av en annan resurs. Du kan använda dessa proxyservrar för att dela upp ett stort API i flera funktionsappar (som i en mikrotjänstarkitektur) samtidigt som du presenterar en enda API-yta för klienter.
Standard Functions-fakturering gäller för proxykörningar. Mer information finns i prissättning för Azure Functions.
Återaktivera proxyservrar i Functions v4.x
När du har migrerat funktionsappen till version 4.x av Functions-körningen måste du specifikt återanvända proxyservrar. Du bör fortfarande byta till att integrera dina funktionsappar med Azure API Management så snart som möjligt och inte bara förlita dig på proxyservrar.
Om du aktiverar proxyservrar måste du ange en flagga i programinställningen AzureWebJobsFeatureFlags
på något av följande sätt:
Om inställningen
AzureWebJobsFeatureFlags
inte redan finns lägger du till den här inställningen i funktionsappen med värdetEnableProxies
.Om den här inställningen redan finns lägger du till
,EnableProxies
i slutet av det befintliga värdet.
AzureWebJobsFeatureFlags
är en kommaavgränsad matris med flaggor som används för att aktivera förhandsversioner och andra tillfälliga funktioner. Mer information om hur du skapar och ändrar programinställningar finns i Arbeta med programinställningar.
Kommentar
Även om du återaktiverar med EnableProxies
flaggan kan du inte arbeta med proxyservrar i Azure-portalen. I stället måste du arbeta direkt med proxies.json-filen för funktionsappen. Mer information finns i Avancerad konfiguration.
Skapa en proxy
Viktigt!
Motsvarande innehåll med API Management finns i Exponera serverlösa API:er från HTTP-slutpunkter med Hjälp av Azure API Management.
Proxyservrar definieras i proxies.json-filen i funktionsappens rot. Stegen i det här avsnittet visar hur du använder Azure-portalen för att skapa den här filen i funktionsappen. Alla språk och kombinationer av operativsystem stöder inte redigering i portalen. Om du inte kan ändra funktionsappfilerna i portalen kan du i stället skapa och distribuera motsvarande proxies.json
fil från roten i den lokala projektmappen. Mer information om stöd för portalredigering finns i Information om språkstöd.
- Öppna Azure-portalen och gå sedan till funktionsappen.
- I den vänstra rutan väljer du Proxyservrar och sedan +Lägg till.
- Ange ett namn för proxyn.
- Konfigurera slutpunkten som exponeras i den här funktionsappen genom att ange routningsmallen och HTTP-metoderna. Dessa parametrar fungerar enligt reglerna för HTTP-utlösare.
- Ange serverdels-URL:en till en annan slutpunkt. Den här slutpunkten kan vara en funktion i en annan funktionsapp, eller så kan det vara något annat API. Värdet behöver inte vara statiskt och kan referera till programinställningar och parametrar från den ursprungliga klientbegäran.
- Välj Skapa.
Proxyn finns nu som en ny slutpunkt i funktionsappen. Ur ett klientperspektiv är det samma som en HttpTrigger i Functions. Du kan prova din nya proxy genom att kopiera proxy-URL:en och testa den med din favorit-HTTP-klient.
Ändra begäranden och svar
Viktigt!
Med API Management kan du ändra API-beteendet via konfiguration med hjälp av principer. Principer är en samling instruktioner som körs sekventiellt på begäran av eller efter ett svar från ett API. Mer information om API Management-principer finns i Principer i Azure API Management.
Med proxyservrar kan du ändra begäranden till och svar från serverdelen. Dessa transformeringar kan använda variabler enligt definitionen i Använd variabler.
Ändra serverdelsbegäran
Som standard initieras serverdelsbegäran som en kopia av den ursprungliga begäran. Förutom att ange serverdels-URL:en kan du göra ändringar i HTTP-metoden, rubrikerna och frågesträngsparametrarna. De ändrade värdena kan referera till programinställningar och parametrar från den ursprungliga klientbegäran.
Serverdelsbegäranden kan ändras i portalen genom att expandera avsnittet åsidosättning av begäran på proxyinformationssidan.
Ändra svaret
Som standard initieras klientsvaret som en kopia av serverdelssvaret. Du kan göra ändringar i svarets statuskod, orsaksfras, rubriker och brödtext. De ändrade värdena kan referera till programinställningar, parametrar från den ursprungliga klientbegäran och parametrar från serverdelssvaret.
Serverdelssvar kan ändras i portalen genom att expandera avsnittet åsidosättning av svar på proxyinformationssidan.
Använda variabler
Konfigurationen för en proxy behöver inte vara statisk. Du kan villkora att den använder variabler från den ursprungliga klientbegäran, serverdelssvaret eller programinställningarna.
Referera till lokala funktioner
Du kan använda localhost
för att referera till en funktion i samma funktionsapp direkt, utan en proxybegäran tur och retur.
"backendUri": "https://localhost/api/httptriggerC#1"
refererar till en lokal HTTP-utlöst funktion på vägen /api/httptriggerC#1
Kommentar
Om funktionen använder funktions-, administratörs- eller sys-auktoriseringsnivåer måste du ange koden och clientId enligt den ursprungliga funktions-URL:en. I det här fallet skulle referensen se ut så här: "backendUri": "https://localhost/api/httptriggerC#1?code=<keyvalue>&clientId=<keyname>"
Vi rekommenderar att du lagrar dessa nycklar i programinställningarna och refererar till dem i dina proxyservrar. På så sätt undviker du att lagra hemligheter i källkoden.
Parametrar för referensbegäran
Du kan använda begärandeparametrar som indata till egenskapen för serverdelens URL eller som en del av att ändra begäranden och svar. Vissa parametrar kan bindas från vägmallen som anges i basproxykonfigurationen, och andra kan komma från egenskaperna för den inkommande begäran.
Vägmallsparametrar
Parametrar som används i routningsmallen kan refereras till med namn. Parameternamnen omges av klammerparenteser ({}).
Om en proxy till exempel har en routningsmall, till exempel /pets/{petId}
, kan serverdels-URL:en innehålla värdet {petId}
för , som i https://<AnotherApp>.azurewebsites.net/api/pets/{petId}
. Om vägmallen avslutas med ett jokertecken, till exempel /api/{*restOfPath}
, är värdet {restOfPath}
en strängrepresentation av de återstående sökvägssegmenten från den inkommande begäran.
Ytterligare parametrar för begäran
Förutom routningsmallsparametrarna kan följande värden användas i konfigurationsvärden:
- {request.method}: HTTP-metoden som används på den ursprungliga begäran.
- {request.headers.<HeaderName>}: En rubrik som kan läsas från den ursprungliga begäran. Ersätt <HeaderName> med namnet på rubriken som du vill läsa. Om rubriken inte ingår i begäran blir värdet den tomma strängen.
- {request.querystring.<ParameterName>}: En frågesträngsparameter som kan läsas från den ursprungliga begäran. Ersätt <ParameterName> med namnet på parametern som du vill läsa. Om parametern inte ingår i begäran blir värdet den tomma strängen.
Referensparametrar för serverdelssvar
Svarsparametrar kan användas som en del av att ändra svaret till klienten. Följande värden kan användas i konfigurationsvärden:
- {backend.response.statusCode}: HTTP-statuskoden som returneras i serverdelssvaret.
- {backend.response.statusReason}: HTTP-orsaksfrasen som returneras i serverdelssvaret.
- {backend.response.headers.<HeaderName>}: En rubrik som kan läsas från serverdelssvaret. Ersätt <HeaderName> med namnet på rubriken som du vill läsa. Om rubriken inte ingår i svaret blir värdet den tomma strängen.
Referensprograminställningar
Du kan också referera till programinställningar som definierats för funktionsappen genom att omge inställningsnamnet med procenttecken (%).
En serverdels-URL https://%ORDER_PROCESSING_HOST%/api/orders till skulle till exempel ha "%ORDER_PROCESSING_HOST%" ersatt med värdet för inställningen ORDER_PROCESSING_HOST.
Dricks
Använd programinställningar för serverdelsvärdar när du har flera distributioner eller testmiljöer. På så sätt kan du se till att du alltid pratar med rätt serverdel för den miljön.
Felsöka proxyservrar
Genom att lägga till flaggan "debug":true
i valfri proxy i proxies.json
aktiverar du felsökningsloggning. Loggar lagras i D:\home\LogFiles\Application\Proxies\DetailedTrace
och är tillgängliga via de avancerade verktygen (kudu). Alla HTTP-svar innehåller också en Proxy-Trace-Location
rubrik med en URL för att komma åt loggfilen.
Du kan felsöka en proxy från klientsidan genom att lägga till en Proxy-Trace-Enabled
rubrik inställd på true
. Detta loggar också en spårning till filsystemet och returnerar spårnings-URL:en som en rubrik i svaret.
Blockera proxyspårningar
Av säkerhetsskäl kanske du inte vill tillåta att någon som anropar din tjänst genererar en spårning. De kommer inte att kunna komma åt spårningsinnehållet utan dina inloggningsuppgifter, men genereringen av spårningen förbrukar resurser och exponerar att du använder funktionsproxyservrar.
Inaktivera spårningar helt och hållet genom att lägga "debug":false
till i en viss proxy i din proxies.json
.
Avancerad konfiguration
Proxyservrarna som du konfigurerar lagras i en proxies.json fil, som finns i roten i en funktionsappkatalog. Du kan redigera den här filen manuellt och distribuera den som en del av din app när du använder någon av de distributionsmetoder som Functions stöder.
Dricks
Om du inte har konfigurerat någon av distributionsmetoderna kan du också arbeta med filen proxies.json i portalen. Gå till funktionsappen, välj Plattformsfunktioner och välj sedan App Service-redigeraren. På så sätt kan du visa hela filstrukturen i funktionsappen och sedan göra ändringar.
Proxies.json definieras av ett proxyobjekt som består av namngivna proxyservrar och deras definitioner. Om redigeringsprogrammet stöder det kan du också referera till ett JSON-schema för kodkomplettering. En exempelfil kan se ut så här:
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"proxy1": {
"matchCondition": {
"methods": [ "GET" ],
"route": "/api/{test}"
},
"backendUri": "https://<AnotherApp>.azurewebsites.net/api/<FunctionName>"
}
}
}
Varje proxy har ett eget namn, till exempel proxy1 i föregående exempel. Motsvarande proxydefinitionsobjekt definieras av följande egenskaper:
- matchCondition: Krävs – ett objekt som definierar de begäranden som utlöser körningen av den här proxyn. Den innehåller två egenskaper som delas med HTTP-utlösare:
- metoder: En matris med DE HTTP-metoder som proxyn svarar på. Om den inte anges svarar proxyn på alla HTTP-metoder på vägen.
- route: Krävs – definierar routningsmallen och styr vilka url:er för begäran som proxyn svarar på. Till skillnad från i HTTP-utlösare finns det inget standardvärde.
- backendUri: URL:en för backend-resursen som begäran ska skickas till. Det här värdet kan referera till programinställningar och parametrar från den ursprungliga klientbegäran. Om den här egenskapen inte ingår svarar Azure Functions med HTTP 200 OK.
- requestOverrides: Ett objekt som definierar transformeringar till serverdelsbegäran. Se Definiera ett requestOverrides-objekt.
- responseOverrides: Ett objekt som definierar transformeringar till klientsvaret. Se Definiera ett responseOverrides-objekt.
Kommentar
Routningsegenskapen i Azure Functions-proxyservrar respekterar inte egenskapen routePrefix för funktionsappens värdkonfiguration. Om du vill inkludera ett prefix som /api
, måste det ingå i routningsegenskapen.
Inaktivera enskilda proxyservrar
Du kan inaktivera enskilda proxyservrar genom att lägga "disabled": true
till i proxyn i proxies.json
filen. Detta gör att alla begäranden som uppfyller matchCondition returnerar 404.
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"Root": {
"disabled":true,
"matchCondition": {
"route": "/example"
},
"backendUri": "https://<AnotherApp>.azurewebsites.net/api/<FunctionName>"
}
}
}
Programinställningar
Proxybeteendet kan styras av flera appinställningar. Alla beskrivs i referensen för Functions App Inställningar
Reserverade tecken (strängformatering)
Proxyservrar läser alla strängar från en JSON-fil med \ som escape-symbol. Proxyservrar tolkar också klammerparenteser. Se en fullständig uppsättning exempel nedan.
Tecken | Undantaget tecken | Exempel |
---|---|---|
{ eller } | {{ eller }} | {{ example }} -->{ example } |
\ | \\ | example.com\\text.html -->example.com\text.html |
" | \" | \"example\" -->"example" |
Definiera ett requestOverrides-objekt
Objektet requestOverrides definierar ändringar som görs i begäran när serverdelsresursen anropas. Objektet definieras av följande egenskaper:
- backend.request.method: DEN HTTP-metod som används för att anropa serverdelen.
- backend.request.querystring.<ParameterName>: En frågesträngsparameter som kan ställas in för anropet till serverdelen. Ersätt <ParameterName> med namnet på den parameter som du vill ange. Om en tom sträng anges ingår parametern fortfarande i serverdelsbegäran.
- backend.request.headers.<HeaderName>: En rubrik som kan ställas in för anropet till serverdelen. Ersätt <HeaderName> med namnet på rubriken som du vill ange. Om en tom sträng anges ingår parametern fortfarande i serverdelsbegäran.
Värden kan referera till programinställningar och parametrar från den ursprungliga klientbegäran.
En exempelkonfiguration kan se ut så här:
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"proxy1": {
"matchCondition": {
"methods": [ "GET" ],
"route": "/api/{test}"
},
"backendUri": "https://<AnotherApp>.azurewebsites.net/api/<FunctionName>",
"requestOverrides": {
"backend.request.headers.Accept": "application/xml",
"backend.request.headers.x-functions-key": "%ANOTHERAPP_API_KEY%"
}
}
}
}
Definiera ett responseOverrides-objekt
Objektet requestOverrides definierar ändringar som görs i svaret som skickas tillbaka till klienten. Objektet definieras av följande egenskaper:
- response.statusCode: HTTP-statuskoden som ska returneras till klienten.
- response.statusReason: HTTP-orsaksfrasen som ska returneras till klienten.
- response.body: Strängrepresentationen av brödtexten som ska returneras till klienten.
- response.headers.<HeaderName>: En rubrik som kan anges för svaret på klienten. Ersätt <HeaderName> med namnet på rubriken som du vill ange. Om du anger den tomma strängen ingår inte rubriken i svaret.
Värden kan referera till programinställningar, parametrar från den ursprungliga klientbegäran och parametrar från serverdelssvaret.
En exempelkonfiguration kan se ut så här:
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"proxy1": {
"matchCondition": {
"methods": [ "GET" ],
"route": "/api/{test}"
},
"responseOverrides": {
"response.body": "Hello, {test}",
"response.headers.Content-Type": "text/plain"
}
}
}
}
Kommentar
I det här exemplet anges svarstexten direkt, så ingen backendUri
egenskap behövs. Exemplet visar hur du kan använda Azure Functions-proxyservrar för att håna API:er.