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

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.

  1. Otevřete Azure Portala pak použijte aplikaci Function App.
  2. V levém podokně vyberte nový proxy server.
  3. Zadejte název proxy serveru.
  4. 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].
  5. 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].
  6. 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&quot;: &quot;/example"
            },
            "backendUri&quot;: &quot;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.