Práce s Proxy služby Azure Functions
Tento článek vysvětluje, jak nakonfigurovat Proxy služby Azure Functions a pracovat s nimi. Pomocí této funkce můžete zadat koncové body aplikace Function App, které jsou implementované jiným prostředkem. Tyto proxy servery můžete použít k rozdělení velkého rozhraní API do více aplikací Function App (jako v architektuře mikroslužeb), zatímco pro klienty prezentuje jednu plochu rozhraní API.
Fakturace standardních funkcí se vztahuje na provádění proxy serverů. Další informace najdete v tématu Azure Functions ceny.
Toto jsou referenční informace pro Azure Functions vývojářům. Pokud Azure Functions začínáte, začněte s následujícími zdroji informací:
- Vytvořte svoji první funkci: C#, JavaScript, Javanebo Python.
- Azure Functions referenční informace pro vývojáře.
- Referenční informace pro konkrétní jazyk: c#, skript c#, F #, Java, JavaScriptnebo Python.
- Azure Functions triggery a koncepty vazeb.
- Azure Functions kódu a testování místně.
Poznámka
Proxy servery jsou k dispozici v Azure Functions verze 1. x až 3. x.
Měli byste také zvážit použití API Management Azure pro vaši aplikaci. Nabízí stejné funkce jako proxy služby functions a další nástroje pro vytváření a správu rozhraní API, jako je integrace OpenAPI, omezení četnosti a pokročilé zásady.
Vytvoření proxy
V této části se dozvíte, jak vytvořit proxy na portálu Functions.
- Otevřete Azure Portala pak použijte aplikaci Function App.
- V levém podokně vyberte nový proxy server.
- Zadejte název proxy serveru.
- Nakonfigurujte koncový bod, který je vystavený v této aplikaci Function App, zadáním šablony směrování a metod http. Tyto parametry se chovají podle pravidel pro [aktivační události http].
- Nastavte adresu URL back-endu na jiný koncový bod. Tento koncový bod může být funkce v jiné aplikaci Function App nebo může to být jakékoli jiné rozhraní API. Hodnota nemusí být statická a může odkazovat na nastavení aplikace a [parametry z původní žádosti klienta].
- Klikněte na Vytvořit.
Váš proxy server teď ve vaší aplikaci Function App existuje jako nový koncový bod. Z perspektivy klienta je ekvivalentem HttpTrigger v Azure Functions. Nový proxy server můžete vyzkoušet tak, že zkopírujete adresu URL proxy serveru a otestujete ji s vaším oblíbeným klientem HTTP.
Upravit žádosti a odpovědi
Pomocí Proxy služby Azure Functions můžete upravovat žádosti a odpovědi z back-endu. Tyto transformace mohou používat proměnné, jak jsou definovány v [proměnných použít].
Upravit požadavek back-endu
Ve výchozím nastavení se požadavek back-endu inicializuje jako kopie původní žádosti. Kromě nastavení adresy URL back-endu můžete provádět změny v parametrech metody HTTP, hlaviček a řetězce dotazu. Změněné hodnoty můžou odkazovat na nastavení aplikace a [parametry z původní žádosti klienta].
Back-endové požadavky lze upravit na portálu rozbalením části přepsání požadavku na stránce s podrobnostmi o proxy serveru.
Úprava odpovědi
Ve výchozím nastavení je odpověď klienta inicializována jako kopie back-endové odpovědi. Můžete provádět změny stavového kódu odpovědi, fráze důvodu, záhlaví a textu. Změněné hodnoty můžou odkazovat na nastavení aplikace, [parametry z původního požadavku na klienta]a [parametry z back-endové odpovědi].
Back-endové požadavky lze upravit na portálu rozbalením části přepsání odpovědi na stránce s podrobnostmi o proxy serveru.
Použití proměnných
Konfigurace proxy serveru nemusí být statická. Tuto podmínku můžete použít pro použití proměnných z původního požadavku na klienta, z back-endové odpovědi nebo z nastavení aplikace.
Místní funkce odkazů
Můžete použít localhost pro odkazování na funkci v rámci stejné aplikace Function App přímo bez požadavku na proxy zpětného převodu.
"backendUri": "https://localhost/api/httptriggerC#1" provede odkaz na místní funkci aktivovanou protokolem HTTP v trase. /api/httptriggerC#1
Poznámka
Pokud vaše funkce používá úrovně autorizace Function, admin nebo sys , bude nutné zadat kód a ClientID, jak je uvedeno na základě původní adresy URL funkce. V takovém případě by odkaz vypadal takto: "backendUri": "https://localhost/api/httptriggerC#1?code=<keyvalue>&clientId=<keyname>" tyto klíče doporučujeme uložit do nastavení aplikace a odkazovat na ně v proxy serverech. Tím se vyhnete ukládání tajných kódů ve zdrojovém kódu.
Parametry referenční žádosti
Parametry požadavku můžete použít jako vstupy do vlastnosti back-end adresy URL nebo jako součást úprav požadavků a odpovědí. Některé parametry mohou být vázány ze šablony trasy, která je zadána v základní konfiguraci proxy serveru, a další mohou pocházet z vlastností příchozího požadavku.
Parametry šablony směrování
Parametry, které se používají v šabloně směrování, jsou k dispozici na odkaz podle názvu. Názvy parametrů jsou uzavřeny v závorkách ( {} ).
Například pokud má proxy šablonu směrování, například /pets/{petId} , adresa URL back-endu může obsahovat hodnotu {petId} , jako v https://<AnotherApp>.azurewebsites.net/api/pets/{petId} . Pokud se v rámci šablony trasy ukončí zástupný znak, například /api/{*restOfPath} , {restOfPath} je hodnota řetězcové vyjádření zbývajících segmentů cesty od příchozího požadavku.
Další parametry žádosti
Kromě parametrů šablony směrování lze v konfiguračních hodnotách použít následující hodnoty:
- {Request. Method}: metoda HTTP, která se používá pro původní požadavek.
- {Request. Headers. <HeaderName> }: záhlaví, které lze číst z původního požadavku. Nahraďte <HeaderName> názvem záhlaví, které chcete číst. Pokud hlavička není obsažena v požadavku, bude tato hodnota prázdným řetězcem.
- {Request. QueryString. <ParameterName> }: parametr řetězce dotazu, který lze načíst z původního požadavku. Nahraďte <ParameterName> názvem parametru, který chcete číst. Pokud parametr není součástí požadavku, bude hodnota prázdným řetězcem.
Reference back-endové odezvy parametrů
Parametry odpovědi lze použít jako součást změny odpovědi na klienta. V konfiguračních hodnotách lze použít následující hodnoty:
- {back-endu. Response. StatusCode}: stavový kód HTTP vrácený na back-endové odpovědi.
- {back-endu. Response. statusReason}: fráze důvod http vrácená na back-endové odpovědi.
- {back-endu. Response. Headers. <HeaderName> }: záhlaví, které lze číst z back-endové odpovědi. Nahraďte <HeaderName> názvem záhlaví, které chcete číst. Pokud hlavička není obsažena v odpovědi, bude hodnota prázdným řetězcem.
Referenční nastavení aplikace
Můžete také odkazovat na nastavení aplikace, která jsou definována pro aplikaci Function App , a to tak, že se název nastavení zobrazí jako znak procenta (%).
Například adresa URL back-endu https://%ORDER_PROCESSING_HOST%/api/orders by měla být "% ORDER_PROCESSING_HOST%" nahrazena hodnotou nastavení ORDER_PROCESSING_HOST.
Tip
Nastavení aplikace pro hostitele back-endu použijte v případě, že máte více nasazení nebo testovacích prostředí. Tímto způsobem se můžete ujistit, že vždycky mluvíte k pravému back-endu pro toto prostředí.
Řešení potíží s proxy
Přidáním příznaku "debug":true k jakémukoli proxy serveru v umožníte proxies.json protokolování ladění. Protokoly se ukládají v D:\home\LogFiles\Application\Proxies\DetailedTrace a jsou přístupné prostřednictvím pokročilých nástrojů (Kudu). Všechny odpovědi HTTP budou také obsahovat Proxy-Trace-Location hlavičku s adresou URL pro přístup k souboru protokolu.
Můžete ladit proxy server ze strany klienta přidáním Proxy-Trace-Enabled záhlaví nastaveného na true . Tím se také zaznamená trasování do systému souborů a vrátí adresu URL trasování jako hlavičku v odpovědi.
Blokovat trasování proxy
Z bezpečnostních důvodů možná nebudete chtít, aby bylo možné vygenerovat trasování všem voláním vaší služby. Nebudou mít přístup k obsahu trasování bez přihlašovacích údajů, ale generování trasování spotřebuje prostředky a zpřístupňuje používání proxy funkcí.
Zcela zakažte trasování přidáním "debug":false určitého proxy serveru v proxies.json .
Pokročilá konfigurace
Proxy servery, které nakonfigurujete, se ukládají do souboru proxy. JSON , který se nachází v kořenovém adresáři adresáře Function App. Tento soubor můžete ručně upravit a nasadit jako součást aplikace při použití libovolné metody nasazení , které funkce podporuje.
Tip
Pokud jste nestavili jednu z metod nasazení, můžete také na portálu pracovat se souborem proxy. JSON . Přejít do aplikace Function App, vybrat funkce platformy a pak vybrat Editor služby App Service. Díky tomu můžete zobrazit celou strukturu souborů aplikace Function App a pak provést změny.
Proxy soubory. JSON jsou definovány objektem proxy, který se skládá z pojmenovaných proxy a jejich definic. Případně, pokud je editor podporuje, můžete pro dokončení kódu odkazovat na schéma JSON . Příklad souboru může vypadat takto:
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"proxy1": {
"matchCondition": {
"methods": [ "GET" ],
"route": "/api/{test}"
},
"backendUri": "https://<AnotherApp>.azurewebsites.net/api/<FunctionName>"
}
}
}
Každý proxy server má popisný název, například Proxy1 v předchozím příkladu. Odpovídající objekt definice proxy je definován následujícími vlastnostmi:
- matchCondition: Required-objekt definující požadavky, které aktivují spuštění tohoto proxy serveru. Obsahuje dvě vlastnosti, které jsou sdílené pomocí [aktivačních událostí http]:
- methods: Pole metod HTTP, na které proxy server reaguje. Pokud není zadaný, proxy server odpoví na všechny metody HTTP na trase.
- route: Povinné – definuje šablonu trasy a určuje adresy URL požadavků, na které váš proxy server reaguje. Na rozdíl od triggerů HTTP neexistuje žádná výchozí hodnota.
- backendUri: Adresa URL back-endového prostředku, do kterého se má požadavek odeslat pomocí serveru proxim. Tato hodnota může odkazovat na nastavení a parametry aplikace z původního požadavku klienta. Pokud tato vlastnost není zahrnutá, Azure Functions odpoví http 200 OK.
- requestOverrides: Objekt, který definuje transformace na požadavek back-endu. Viz Definování objektu requestOverrides.
- responseOverrides: Objekt, který definuje transformace do odpovědi klienta. Viz [Definice objektu responseOverrides].
Poznámka
Vlastnost route v Proxy služby Azure Functions nebude respektovat vlastnost routePrefix konfigurace hostitele aplikace funkcí. Pokud chcete zahrnout předponu, například , musí /api být součástí vlastnosti route.
Zakázání jednotlivých proxů
Jednotlivé proxy servery můžete zakázat přidáním "disabled": true do proxy serveru v souboru proxies.json . To způsobí, že všechny žádosti splňující podmínky matchCondition vrátí 404.
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"Root": {
"disabled":true,
"matchCondition": {
"route": "/example"
},
"backendUri": "https://<AnotherApp>.azurewebsites.net/api/<FunctionName>"
}
}
}
Aplikační Nastavení
Chování proxy serveru je možné řídit několika nastaveními aplikace. Všechny jsou uvedené v referenčních Nastavení Functions App.
Rezervované znaky (formátování řetězců)
Proxy čtou všechny řetězce ze souboru JSON pomocí znaku \ jako řídicího symbolu. Proxy také interpretují složené závorky. Kompletní sadu příkladů najdete níže.
| Znak | Uvozový znak | Příklad |
|---|---|---|
| { nebo } | {{ nebo }} | {{ example }} --> { example } |
| \ | \\ | example.com\\text.html --> example.com\text.html |
| " | \" | \"example\" --> "example" |
Definování objektu requestOverrides
Objekt requestOverrides definuje změny provedené v požadavku při volání back-endového prostředku. Objekt je definován následujícími vlastnostmi:
- backend.request.method: Metoda HTTP, která se používá k volání back-endu.
- backend.request.querystring. <ParameterName>: Parametr řetězce dotazu, který lze nastavit pro volání back-endu. Nahraďte <ParameterName> názvem parametru, který chcete nastavit. Všimněte si, že pokud je zadán prázdný řetězec, parametr je stále součástí požadavku back-endu.
- backend.request.headers. <HeaderName>: Hlavička, kterou je možné nastavit pro volání back-endu. Nahraďte <HeaderName> názvem hlavičky, kterou chcete nastavit. Všimněte si, že pokud je zadán prázdný řetězec, parametr je stále součástí požadavku back-endu.
Hodnoty mohou odkazovat na nastavení a parametry aplikace z původního požadavku klienta.
Příklad konfigurace může vypadat takto:
{
"$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%"
}
}
}
}
Definování objektu responseOverrides
Objekt requestOverrides definuje změny provedené v odpovědi, která se předá zpět klientovi. Objekt je definován následujícími vlastnostmi:
- response.statusCode: Stavový kód HTTP, který se má vrátit klientovi.
- response.statusReason: Fráze důvodu HTTP, která se má vrátit klientovi.
- response.body: Řetězcová reprezentace těla, která se má vrátit klientovi.
- response.headers. <HeaderName>: Hlavička, kterou lze nastavit pro odpověď klientovi. Nahraďte <HeaderName> názvem hlavičky, kterou chcete nastavit. Pokud zadáte prázdný řetězec, hlavička se do odpovědi nezahrne.
Hodnoty mohou odkazovat na nastavení aplikace, parametry z původního požadavku klienta a parametry z back-endové odpovědi.
Příklad konfigurace může vypadat takto:
{
"$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"
}
}
}
}
Poznámka
V tomto příkladu je tělo odpovědi nastaveno přímo, takže není backendUri potřeba žádná vlastnost. Příklad ukazuje, jak můžete použít Proxy služby Azure Functions rozhraní API.