Régi proxyk kezelése

Fontos

Az Azure Functions-proxyk az Azure Functions-futtatókörnyezet 1.x és 3.x verzióinak örökölt funkciói. A proxyk támogatása újra engedélyezhető a 4.x verzióban, hogy sikeresen frissítse a függvényalkalmazásokat a legújabb futtatókörnyezeti verzióra. A lehető leghamarabb váltson a függvényalkalmazások Azure API Managementtel való integrálására. Az API Management lehetővé teszi, hogy kihasználja a függvényalapú API-k meghatározásához, biztonságossá tételéhez, kezeléséhez és értékesítéséhez használható funkciók egy teljesebb készletét. További információ: API Management-integráció.

Ha tudni szeretné, hogyan engedélyezheti újra a proxyk támogatását a Functions 4.x verziójában, olvassa el a Proxyk újbóli engedélyezését a Functions v4.x verziójában.

A meglévő proxyhibákból való migrálás megkönnyítése érdekében ez a cikk egyenértékű API Management-tartalomra hivatkozik, ha elérhető.

Ez a cikk az Azure Functions-proxyk konfigurálását és működését ismerteti. Ezzel a funkcióval megadhatja a függvényalkalmazás egy másik erőforrás által implementált végpontjait. Ezekkel a proxykkal egy nagy API több függvényalkalmazásra bontható (mint a mikroszolgáltatás-architektúrában), miközben továbbra is egyetlen API-felületet jelenít meg az ügyfelek számára.

A standard függvények számlázása proxyvégrehajtásokra vonatkozik. További információkért tekintse meg az Azure Functions díjszabását.

Proxyk ismételt engedélyezése a Functions v4.x verziójában

Miután migrálta a függvényalkalmazást a Functions-futtatókörnyezet 4.x verziójára, kifejezetten újratelepíthető proxykat kell használnia. A függvényalkalmazások azure API Managementtel való integrálására a lehető leghamarabb váltson, és ne csak a proxykra támaszkodjon.

A proxyk újbóli engedélyezéséhez be kell állítania egy jelölőt az AzureWebJobsFeatureFlags alkalmazásbeállításban az alábbi módok egyikével:

  • Ha a AzureWebJobsFeatureFlags beállítás még nem létezik, adja hozzá ezt a beállítást a függvényalkalmazáshoz a következő értékkel EnableProxies: .

  • Ha ez a beállítás már létezik, adja hozzá ,EnableProxies a meglévő érték végéhez.

AzureWebJobsFeatureFlags egy vesszővel tagolt tömb, amely az előzetes verzió és más ideiglenes funkciók engedélyezésére szolgál. Az alkalmazásbeállítások létrehozásáról és módosításáról további információt az alkalmazásbeállítások használata című témakörben talál.

Feljegyzés

Még ha újra engedélyezve is van a EnableProxies jelző, akkor sem dolgozhat proxykkal az Azure Portalon. Ehelyett közvetlenül a függvényalkalmazás proxies.json fájljával kell dolgoznia. További információ: Speciális konfiguráció.

Proxy létrehozása

Fontos

Az API Management használatával egyenértékű tartalomért lásd : Kiszolgáló nélküli API-k elérhetővé tétele HTTP-végpontokról az Azure API Management használatával.

A proxyk a függvényalkalmazás gyökerében található proxies.json fájlban vannak definiálva. Az ebben a szakaszban ismertetett lépések bemutatják, hogyan hozhatja létre ezt a fájlt a függvényalkalmazásban az Azure Portal használatával. Nem minden nyelv és operációsrendszer-kombináció támogatja a portálon belüli szerkesztést. Ha nem tudja módosítani a függvényalkalmazás fájljait a portálon, létrehozhatja és üzembe helyezheti a megfelelő proxies.json fájlt a helyi projektmappa gyökeréből. A portálszerkesztési támogatással kapcsolatos további információkért tekintse meg a nyelvi támogatás részleteit.

  1. Nyissa meg az Azure Portalt, majd nyissa meg a függvényalkalmazást.
  2. A bal oldali panelen válassza a Proxyk , majd a +Hozzáadás lehetőséget.
  3. Adja meg a proxy nevét.
  4. Konfigurálja a függvényalkalmazásban közzétett végpontot az útvonalsablon és a HTTP-metódusok megadásával. Ezek a paraméterek a HTTP-eseményindítók szabályainak megfelelően működnek.
  5. Állítsa be a háttérRENDSZER URL-címét egy másik végpontra. Ez a végpont lehet egy függvény egy másik függvényalkalmazásban, vagy bármely más API. Az értéknek nem kell statikusnak lennie, és hivatkozhat az eredeti ügyfélkérés alkalmazásbeállításaira és paramétereire.
  6. Válassza a Létrehozás lehetőséget.

A proxy mostantól új végpontként létezik a függvényalkalmazásban. Ügyfél szempontjából ez ugyanaz, mint a HttpTrigger a Functionsben. Kipróbálhatja az új proxyt a proxy URL-címének másolásával és a kedvenc HTTP-ügyféllel való tesztelésével.

Kérelmek és válaszok módosítása

Fontos

Az API Management lehetővé teszi az API viselkedésének módosítását a házirendek használatával végzett konfigurációval. A szabályzatok olyan utasítások gyűjteményei, amelyeket a rendszer egymást követően futtat egy API kérésére vagy válaszára reagálva. Az API Management-szabályzatokkal kapcsolatos további információkért lásd az Azure API Management szabályzatai című témakört.

Proxykkal módosíthatja a háttérrendszerre irányuló kéréseket és válaszokat. Ezek az átalakítások a Use változókban meghatározott változókat használhatják.

A háttérkérelem módosítása

Alapértelmezés szerint a háttérkérelem inicializálva lesz az eredeti kérés másolataként. A háttér URL-címének beállítása mellett módosíthatja a HTTP-metódust, a fejléceket és a lekérdezési sztring paramétereit. A módosított értékek hivatkozhatnak az eredeti ügyfélkérés alkalmazásbeállításaira és paramétereire.

A háttérkérelmek módosíthatók a portálon a proxy részletei lap kérelem felülbírálási szakaszának kibontásával.

A válasz módosítása

Alapértelmezés szerint az ügyfél válasza inicializálva lesz a háttérválasz másolataként. Módosíthatja a válasz állapotkódját, okkifejezését, fejléceit és törzsét. A módosított értékek hivatkozhatnak az alkalmazásbeállításokra, az eredeti ügyfélkérés paramétereire és a háttérválasz paramétereire.

A háttérbeli válaszok a proxy részletei oldal válasz felülbírálási szakaszának kibontásával módosíthatók a portálon.

Változók használata

A proxy konfigurációjának nem kell statikusnak lennie. Feltételként használhatja az eredeti ügyfélkérés, a háttérválasz vagy az alkalmazásbeállítások változóit.

Helyi függvények hivatkozása

Az ugyanazon függvényalkalmazásban lévő függvényre közvetlenül hivatkozhat localhost ciklikus lekéréses proxykérés nélkül.

"backendUri": "https://localhost/api/httptriggerC#1" hivatkozni fog egy helyi HTTP által aktivált függvényre az útvonalon /api/httptriggerC#1

Feljegyzés

Ha a függvény függvény-, rendszergazdai vagy sys engedélyezési szinteket használ, meg kell adnia a kódot és az ügyfélazonosítót az eredeti függvény URL-címének megfelelően. Ebben az esetben a hivatkozás a következőképpen nézne ki: "backendUri": "https://localhost/api/httptriggerC#1?code=<keyvalue>&clientId=<keyname>" Javasoljuk, hogy ezeket a kulcsokat az alkalmazásbeállításokban tárolja, és hivatkozzon a proxykban lévő kulcsokra. Így elkerülhető, hogy titkos kulcsokat tároljon a forráskódban.

Referenciakérési paraméterek

A kérelemparamétereket használhatja a háttér URL-tulajdonság bemeneteként, vagy a kérések és válaszok módosítása részeként. Egyes paraméterek az alapproxy-konfigurációban megadott útvonalsablonból kötöttek, mások pedig a bejövő kérés tulajdonságaiból származhatnak.

Útvonalsablon paraméterei

Az útvonalsablonban használt paraméterek név alapján hivatkozhatók. A paraméternevek kapcsos zárójelekben ({}) vannak megadva.

Ha például egy proxy rendelkezik útvonalsablonnal( például /pets/{petId}), a háttér URL-címe tartalmazhatja {petId}a ( ) https://<AnotherApp>.azurewebsites.net/api/pets/{petId}értéket. Ha az útvonalsablon helyettesítő karakterrel végződik, például /api/{*restOfPath}, az érték {restOfPath} a bejövő kérelem fennmaradó elérésiút-szegmenseinek sztring-ábrázolása.

További kérelemparaméterek

Az útvonalsablon paraméterei mellett a következő értékek használhatók konfigurációs értékekben:

  • {request.method}: Az eredeti kérelemben használt HTTP-metódus.
  • {request.headers.<HeaderName>}: Az eredeti kérelemből olvasható fejléc. Cserélje le <a HeaderName elemet> az olvasni kívánt fejléc nevére. Ha a fejléc nem szerepel a kérelemben, az érték az üres sztring lesz.
  • {request.querystring.<ParameterName>}: Az eredeti kérelemből olvasható lekérdezési sztringparaméter. Cserélje le <a ParameterName elemet> az olvasni kívánt paraméter nevére. Ha a paraméter nem szerepel a kérelemben, az érték az üres sztring lesz.

Referencia háttér-válaszparaméterek

A válaszparaméterek az ügyfélre adott válasz módosításának részeként használhatók. A konfigurációs értékekben a következő értékek használhatók:

  • {backend.response.statusCode}: A háttérválaszban visszaadott HTTP-állapotkód.
  • {backend.response.statusReason}: A háttérválaszban visszaadott HTTP-ok kifejezés.
  • {backend.response.headers.<HeaderName>}: A háttérválaszból olvasható fejléc. Cserélje le <a HeaderName elemet> az olvasni kívánt fejléc nevére. Ha a fejléc nem szerepel a válaszban, az érték az üres sztring lesz.

Referenciaalkalmazás-beállítások

A függvényalkalmazáshoz definiált alkalmazásbeállításokra is hivatkozhat, ha a beállítás nevét százalékjelekkel (%).

A háttérRENDSZER URL-címe https://%ORDER_PROCESSING_HOST%/api/orders például a(z) "%ORDER_PROCESSING_HOST%" helyett a ORDER_PROCESSING_HOST beállítás értékét adja meg.

Tipp.

Használjon alkalmazásbeállításokat háttér gazdagépekhez, ha több üzembe helyezési vagy tesztelési környezettel rendelkezik. Így gondoskodhat arról, hogy mindig a megfelelő háttérrendszerrel beszéljen az adott környezethez.

Proxyk hibaelhárítása

Ha hozzáadja a jelölőt "debug":true bármely proxyhoz, proxies.jsonengedélyezi a hibakeresési naplózást. A naplókat a speciális eszközök (kudu) tárolják D:\home\LogFiles\Application\Proxies\DetailedTrace és érhetik el. Minden HTTP-válasz tartalmaz egy Proxy-Trace-Location url-címmel rendelkező fejlécet is a naplófájl eléréséhez.

Az ügyféloldali proxy hibakereséséhez adjon hozzá egy Proxy-Trace-Enabled fejléckészletet a következőhöz true: Ez egy nyomkövetést is naplóz a fájlrendszerbe, és a nyomkövetési URL-címet fejlécként adja vissza a válaszban.

Proxykövetések letiltása

Biztonsági okokból előfordulhat, hogy nem szeretné engedélyezni, hogy a szolgáltatást hívó felhasználók nyomkövetést generáljanak. A nyomkövetési tartalom nem lesz elérhető a bejelentkezési hitelesítő adatok nélkül, de a nyomkövetés generálása erőforrásokat használ fel, és elérhetővé teszi a függvény-proxykat.

A nyomkövetések teljes letiltása a megadott proxyhoz proxies.jsonvaló hozzáadással"debug":false.

Speciális konfiguráció

A konfigurált proxyk egy proxies.json fájlban vannak tárolva, amely egy függvényalkalmazás könyvtárának gyökerében található. Ezt a fájlt manuálisan szerkesztheti, és az alkalmazás részeként telepítheti, ha a Functions által támogatott üzembe helyezési módszerek bármelyikét használja.

Tipp.

Ha nem állította be az üzembe helyezési módszerek egyikét, a portálon is használhatja a proxies.json fájlt. Nyissa meg a függvényalkalmazást, válassza a Platformfunkciók lehetőséget, majd az App Service-szerkesztőt. Ezzel megtekintheti a függvényalkalmazás teljes fájlstruktúráját, majd módosíthatja a fájlokat.

Proxies.json egy proxyobjektum határozza meg, amely nevesített proxykból és azok definícióiból áll. Ha a szerkesztő támogatja, jSON-sémára is hivatkozhat a kódkiegészítéshez. Egy példafájl az alábbihoz hasonlóan nézhet ki:

{
    "$schema": "http://json.schemastore.org/proxies",
    "proxies": {
        "proxy1": {
            "matchCondition": {
                "methods": [ "GET" ],
                "route": "/api/{test}"
            },
            "backendUri": "https://<AnotherApp>.azurewebsites.net/api/<FunctionName>"
        }
    }
}

Minden proxynak van egy rövid neve, például a proxy1 az előző példában. A megfelelő proxydefiníciós objektumot a következő tulajdonságok határozzák meg:

  • matchCondition: Kötelező – egy objektum, amely meghatározza a proxy végrehajtását kiváltó kéréseket. Két, HTTP-eseményindítókkal megosztott tulajdonságot tartalmaz:
    • metódusok: A proxy által megválaszolt HTTP-metódusok tömbje. Ha nincs megadva, a proxy válaszol az útvonal összes HTTP-metódusára.
    • útvonal: Kötelező – meghatározza az útvonalsablont, amely szabályozza, hogy a proxy melyik kérelem URL-címére válaszol. A HTTP-eseményindítóktól eltérően nincs alapértelmezett érték.
  • backendUri: Annak a háttérerőforrásnak az URL-címe, amelyhez a kérést ki kell szűrni. Ez az érték hivatkozhat az eredeti ügyfélkérés alkalmazásbeállításaira és paramétereire. Ha ez a tulajdonság nem szerepel a szolgáltatásban, az Azure Functions HTTP 200 OK-val válaszol.
  • requestOverrides: A háttérkérelem átalakítását meghatározó objektum. Lásd: RequestOverrides objektum definiálása.
  • responseOverrides: Az ügyfélválasz átalakítását meghatározó objektum. Lásd: ResponseOverrides objektum definiálása.

Feljegyzés

Az Azure Functions-proxyk útvonaltulajdonsága nem felel meg a függvényalkalmazás gazdagépkonfigurációjának routePrefix tulajdonságának. Ha például /apiegy előtagot szeretne felvenni, annak szerepelnie kell az útvonaltulajdonságban .

Egyéni proxyk letiltása

Az egyes proxykat letilthatja úgy, hogy hozzáadja "disabled": true a proxyt a proxies.json fájlhoz. Ez azt eredményezi, hogy a matchCondition-nek megfelelő kérések 404-et adnak vissza.

{
    "$schema": "http://json.schemastore.org/proxies",
    "proxies": {
        "Root": {
            "disabled":true,
            "matchCondition": {
                "route": "/example"
            },
            "backendUri": "https://<AnotherApp>.azurewebsites.net/api/<FunctionName>"
        }
    }
}

Alkalmazásbeállítások

A proxy viselkedését több alkalmazásbeállítás is vezérelheti. Ezeket a Functions-alkalmazás Gépház referencia ismerteti.

Fenntartott karakterek (sztringformázás)

A proxyk az összes sztringet kiolvasják egy JSON-fájlból, és a \-t használják menekülési szimbólumként. A proxyk a kapcsos zárójeleket is értelmezik. Tekintse meg az alábbi példák teljes készletét.

Karakter Szökött karakter Példa
{ vagy } {{ vagy }} {{ example }} -->{ example }
\ \\ example.com\\text.html -->example.com\text.html
" \" \"example\" -->"example"

RequestOverrides objektum definiálása

A requestOverrides objektum a háttérerőforrás meghívásakor a kérelem módosításait határozza meg. Az objektumot a következő tulajdonságok határozzák meg:

  • backend.request.method: A háttérrendszer meghívására használt HTTP-metódus.
  • backend.request.querystring.<ParameterName>: A háttérbeli híváshoz beállítható lekérdezési sztringparaméter. Cserélje le <a ParameterName elemet> a beállítani kívánt paraméter nevére. Ha üres sztringet ad meg, a paraméter továbbra is szerepel a háttérkérelemben.
  • backend.request.headers.<HeaderName>: A háttérrendszerbe irányuló híváshoz beállítható fejléc. Cserélje le <a HeaderName elemet> a beállítani kívánt fejléc nevére. Ha üres sztringet ad meg, a paraméter továbbra is szerepel a háttérkérelemben.

Az értékek hivatkozhatnak az eredeti ügyfélkérés alkalmazásbeállításaira és paramétereire.

Egy példakonfiguráció az alábbihoz hasonlóan nézhet ki:

{
    "$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%"
            }
        }
    }
}

ResponseOverrides objektum definiálása

A requestOverrides objektum az ügyfélnek visszaadott válasz módosításait határozza meg. Az objektumot a következő tulajdonságok határozzák meg:

  • response.statusCode: Az ügyfélnek visszaadandó HTTP-állapotkód.
  • response.statusReason: Az ügyfélnek visszaadandó HTTP-ok kifejezés.
  • response.body: Az ügyfélnek visszaadandó törzs sztring-ábrázolása.
  • response.headers.<HeaderName>: Az ügyfélre adott válaszhoz beállítható fejléc. Cserélje le <a HeaderName elemet> a beállítani kívánt fejléc nevére. Ha megadja az üres sztringet, a fejléc nem szerepel a válaszban.

Az értékek hivatkozhatnak az alkalmazásbeállításokra, az eredeti ügyfélkérés paramétereire és a háttérválasz paramétereire.

Egy példakonfiguráció az alábbihoz hasonlóan nézhet ki:

{
    "$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"
            }
        }
    }
}

Feljegyzés

Ebben a példában a válasz törzse közvetlenül van beállítva, így nincs backendUri szükség tulajdonságra. A példa bemutatja, hogyan használhatja az Azure Functions-proxykat az API-k szimulálására.