Eski proxy'lerle çalışma

Önemli

Azure İşlevleri proxy'ler, Azure İşlevleri çalışma zamanının 1.x ile 3.x sürümleri için eski bir özelliktir. İşlev uygulamalarınızı en son çalışma zamanı sürümüne başarıyla yükseltmeniz için proxy'ler için destek 4.x sürümünde yeniden etkinleştirilebilir. Mümkün olan en kısa sürede işlev uygulamalarınızı Azure API Management ile tümleştirmeye geçmelisiniz. API Management, İşlev tabanlı API'lerinizi tanımlamak, güvenliğini sağlamak, yönetmek ve gelire dönüştürmek için daha eksiksiz bir özellik kümesinden yararlanmanıza olanak tanır. Daha fazla bilgi için bkz . API Management tümleştirmesi.

İşlevler sürüm 4.x'te proxy desteğini yeniden etkinleştirmeyi öğrenmek için bkz . İşlevler v4.x'te proxy'leri yeniden etkinleştirme.

Mevcut proxy implemetations geçişini kolaylaştırmak için, bu makale kullanılabilir olduğunda eşdeğer API Management içeriğine bağlanır.

Bu makalede, Azure İşlevleri Proxy'leri yapılandırma ve bunlarla çalışma açıklanmaktadır. Bu özellik sayesinde işlev uygulamanızda başka bir kaynak tarafından uygulanan uç noktaları belirtebilirsiniz. Büyük bir API'yi birden çok işlev uygulamasına (mikro hizmet mimarisinde olduğu gibi) bölmek ve istemciler için tek bir API yüzeyi sunmaya devam etmek için bu proxy'leri kullanabilirsiniz.

Standart İşlevler faturalaması ara sunucu yürütmeleri için geçerlidir. Daha fazla bilgi için bkz. fiyatlandırma Azure İşlevleri.

İşlevler v4.x'te proxy'leri yeniden etkinleştirme

İşlev uygulamanızı İşlevler çalışma zamanının 4.x sürümüne geçirdikten sonra proxy'leri özel olarak yeniden etkinleştirmeniz gerekir. İşlev uygulamalarınızı en kısa sürede Azure API Management ile tümleştirmeye geçmeniz ve yalnızca proxy'lere güvenmeniz gerekmez.

Proxy'leri yeniden etkinleştirmek için uygulama ayarında AzureWebJobsFeatureFlags aşağıdaki yollardan biriyle bir bayrak ayarlamanız gerekir:

  • AzureWebJobsFeatureFlags Ayar zaten yoksa, bu ayarı değeriyle EnableProxiesişlev uygulamanıza ekleyin.

  • Bu ayar zaten varsa, mevcut değerin sonuna ekleyin ,EnableProxies .

AzureWebJobsFeatureFlags önizlemeyi ve diğer geçici özellikleri etkinleştirmek için kullanılan virgülle ayrılmış bir bayrak dizisidir. Uygulama ayarlarını oluşturma ve değiştirme hakkında daha fazla bilgi edinmek için bkz . Uygulama ayarlarıyla çalışma.

Not

Bayrağı kullanarak EnableProxies yeniden etkinleştirildiğinde bile Azure portalında proxy'lerle çalışamazsınız. Bunun yerine, işlev uygulamanızın proxies.json dosyasıyla doğrudan çalışmanız gerekir. Daha fazla bilgi için, bkz. Gelişmiş yapılandırma.

Ara sunucu oluşturma

Önemli

API Management kullanarak eşdeğer içerik için bkz . Azure API Management kullanarak HTTP uç noktalarındaki sunucusuz API'leri kullanıma sunma.

Proxy'ler, işlev uygulamanızın kökündeki proxies.json dosyasında tanımlanır. Bu bölümdeki adımlar, işlev uygulamanızda bu dosyayı oluşturmak için Azure portalını nasıl kullanacağınızı gösterir. Tüm diller ve işletim sistemi bileşimleri portal içi düzenlemeyi desteklemez. Portalda işlev uygulaması dosyalarınızı değiştiremiyorsanız, bunun yerine yerel proje klasörünüzün kökünden eşdeğer proxies.json dosyayı oluşturabilir ve dağıtabilirsiniz. Portal düzenleme desteği hakkında daha fazla bilgi edinmek için bkz . Dil desteği ayrıntıları.

  1. Azure portalını açın ve ardından işlev uygulamanıza gidin.
  2. Sol bölmede Ara Sunucular'ı ve ardından +Ekle'yi seçin.
  3. Proxy'niz için bir ad belirtin.
  4. Yol şablonunu ve HTTP yöntemlerini belirterek bu işlev uygulamasında kullanıma sunulan uç noktayı yapılandırın. Bu parametreler HTTP tetikleyicileri için kurallara göre davranır.
  5. Arka uç URL'sini başka bir uç noktaya ayarlayın. Bu uç nokta başka bir işlev uygulamasındaki bir işlev veya başka bir API olabilir. Değerin statik olması gerekmez ve özgün istemci isteğinden uygulama ayarlarına ve parametrelerine başvurabilir.
  6. Oluştur'u belirleyin.

Proxy'niz artık işlev uygulamanızda yeni bir uç nokta olarak var. İstemci perspektifinden bakıldığında, İşlevler'deki HttpTrigger ile aynıdır. Proxy URL'sini kopyalayıp sık kullandığınız HTTP istemcisiyle test ederek yeni proxy'nizi deneyebilirsiniz.

İstekleri ve yanıtları değiştirme

Önemli

API Management, ilkeleri kullanarak yapılandırma aracılığıyla API davranışını değiştirmenize olanak tanır. İlkeler, bir API isteği veya yanıtı üzerinde sırayla çalıştırılan deyimlerin bir koleksiyonudur. API Management ilkeleri hakkında daha fazla bilgi için bkz . Azure API Management'ta ilkeler.

Proxy'lerle, istekleri ve yanıtları arka uçtan değiştirebilirsiniz. Bu dönüştürmeler Değişkenleri kullanma bölümünde tanımlandığı gibi değişkenleri kullanabilir.

Arka uç isteğini değiştirme

Varsayılan olarak, arka uç isteği özgün isteğin bir kopyası olarak başlatılır. Arka uç URL'sini ayarlamaya ek olarak HTTP yönteminde, üst bilgilerde ve sorgu dizesi parametrelerinde değişiklik yapabilirsiniz. Değiştirilen değerler, özgün istemci isteğinden uygulama ayarlarına ve parametrelerine başvurabilir.

Arka uç istekleri, ara sunucu ayrıntı sayfasının istek geçersiz kılma bölümü genişletilerek portalda değiştirilebilir.

Yanıtı değiştirme

Varsayılan olarak, istemci yanıtı arka uç yanıtının bir kopyası olarak başlatılır. Yanıtın durum kodunda, neden tümceciğinde, üst bilgilerde ve gövdede değişiklik yapabilirsiniz. Değiştirilen değerler uygulama ayarlarına, özgün istemci isteğindeki parametrelere ve arka uç yanıtından parametrelere başvurabilir.

Arka uç yanıtları, ara sunucu ayrıntı sayfasının yanıt geçersiz kılma bölümü genişletilerek portalda değiştirilebilir.

Değişkenler kullanma

Ara sunucu yapılandırmasının statik olması gerekmez. Bunu, özgün istemci isteğinden, arka uç yanıtından veya uygulama ayarlarından değişkenleri kullanacak şekilde koşullayabilirsiniz.

Başvuru yerel işlevleri

Gidiş dönüş proxy isteği olmadan doğrudan aynı işlev uygulamasının içindeki bir işleve başvurmak için kullanabilirsiniz localhost .

"backendUri": "https://localhost/api/httptriggerC#1" yolda yerel HTTP ile tetiklenen bir işleve başvurur /api/httptriggerC#1

Not

İşleviniz işlev, yönetici veya sys yetkilendirme düzeylerini kullanıyorsa, özgün işlev URL'sine göre kodu ve clientId değerini sağlamanız gerekir. Bu durumda başvuru şöyle görünür: "backendUri": "https://localhost/api/httptriggerC#1?code=<keyvalue>&clientId=<keyname>" Bu anahtarları uygulama ayarlarında depolamanızı ve proxy'lerinizdeki anahtarlara başvurmanızı öneririz. Bu, gizli dizilerin kaynak kodunuzda depolanmasını önler.

Başvuru isteği parametreleri

İstek parametrelerini arka uç URL özelliğine giriş olarak veya istekleri ve yanıtları değiştirmenin bir parçası olarak kullanabilirsiniz. Bazı parametreler temel proxy yapılandırmasında belirtilen yol şablonundan bağlanabilir ve diğerleri gelen isteğin özelliklerinden gelebilir.

Yol şablonu parametreleri

Yol şablonunda kullanılan parametrelere ada göre başvurulabilirsiniz. Parametre adları küme ayraçları ({}) içine alınır.

Örneğin, bir ara sunucu gibi /pets/{petId}bir yol şablonuna sahipse arka uç URL'si {petId}içinde olduğu gibi https://<AnotherApp>.azurewebsites.net/api/pets/{petId}değerini içerebilir. Yol şablonu gibi /api/{*restOfPath}bir joker karakterde sonlandırılırsa, değer {restOfPath} gelen istekten kalan yol kesimlerinin dize gösterimidir.

Ek istek parametreleri

Yol şablonu parametrelerine ek olarak, yapılandırma değerlerinde aşağıdaki değerler kullanılabilir:

  • {request.method}: Özgün istekte kullanılan HTTP yöntemi.
  • {request.headers.<HeaderName>}: Özgün istekten okunabilen üst bilgi. HeaderName değerini okumak istediğiniz üst bilginin adıyla değiştirin<.> Üst bilgi isteğe dahil değilse, değer boş dize olur.
  • {request.querystring.<ParameterName>}: Özgün istekten okunabilen bir sorgu dizesi parametresi. ParameterName değerini okumak istediğiniz parametrenin adıyla değiştirin<.> parametre isteğe dahil değilse, değer boş dize olur.

Arka uç yanıt parametrelerine başvurma

Yanıt parametreleri, istemciye verilen yanıtın değiştirilmesinin bir parçası olarak kullanılabilir. Yapılandırma değerlerinde aşağıdaki değerler kullanılabilir:

  • {backend.response.statusCode}: Arka uç yanıtta döndürülen HTTP durum kodu.
  • {backend.response.statusReason}: Arka uç yanıtta döndürülen HTTP neden tümceciği.
  • {backend.response.headers.<HeaderName>}: Arka uç yanıtından okunabilen üst bilgi. HeaderName değerini okumak istediğiniz üst bilginin adıyla değiştirin<.> Üst bilgi yanıta dahil değilse, değer boş dize olur.

Başvuru uygulaması ayarları

Ayar adını yüzde işaretleri (%) ile çevreleyerek işlev uygulaması için tanımlanan uygulama ayarlarına da başvurabilirsiniz.

Örneğin, arka uç URL'sinin https://%ORDER_PROCESSING_HOST%/api/orders yerine "%ORDER_PROCESSING_HOST%" değerinin ORDER_PROCESSING_HOST ayarının değeri olması gerekir.

İpucu

Birden çok dağıtımınız veya test ortamınız olduğunda arka uç konakları için uygulama ayarlarını kullanın. Bu şekilde, bu ortam için her zaman sağ arka uçla konuştuğunuzdan emin olabilirsiniz.

Proxy'lerle ilgili sorunları giderme

içindeki herhangi bir ara sunucuya proxies.jsonbayrağını "debug":true ekleyerek hata ayıklama günlüğünü etkinleştireceksiniz. Günlükler içinde depolanır D:\home\LogFiles\Application\Proxies\DetailedTrace ve gelişmiş araçlar (kudu) aracılığıyla erişilebilir. Tüm HTTP yanıtları, günlük dosyasına erişmek için URL içeren bir üst bilgi de içerir Proxy-Trace-Location .

öğesine bir üst bilgi kümesi trueekleyerek istemci tarafından bir Proxy-Trace-Enabled ara sunucu hatalarını ayıklayabilirsiniz. Bu ayrıca dosya sistemine bir izleme kaydeder ve izleme URL'sini yanıtta üst bilgi olarak döndürür.

Ara sunucu izlemelerini engelleme

Güvenlik nedeniyle hizmetinizi çağıran herkesin izleme oluşturmasına izin vermek istemeyebilirsiniz. Oturum açma kimlik bilgileriniz olmadan izleme içeriğine erişemezler, ancak izlemenin oluşturulması kaynakları tüketir ve İşlev Proxy'lerini kullandığınızı ortaya çıkarır.

içindeki proxies.jsonherhangi bir ara sunucuya ekleyerek "debug":false izlemeleri tamamen devre dışı bırakın.

Gelişmiş yapılandırma

Yapılandırdığınız proxy'ler, işlev uygulaması dizininin kökünde bulunan bir proxies.json dosyasında depolanır. İşlevler'in desteklediği dağıtım yöntemlerinden herhangi birini kullandığınızda bu dosyayı el ile düzenleyebilir ve uygulamanızın bir parçası olarak dağıtabilirsiniz.

İpucu

Dağıtım yöntemlerinden birini ayarlamadıysanız portaldaki proxies.json dosyasıyla da çalışabilirsiniz. İşlev uygulamanıza gidin, Platform özellikleri'ni ve ardından App Service Düzenleyicisi'ni seçin. Bunu yaparak işlev uygulamanızın dosya yapısının tamamını görüntüleyebilir ve sonra değişiklik yapabilirsiniz.

Proxies.json, adlandırılmış proxy'lerden ve bunların tanımlarından oluşan bir proxy nesnesi tarafından tanımlanır. İsteğe bağlı olarak, düzenleyiciniz destekliyorsa kod tamamlama için bir JSON şemasına başvurabilirsiniz. Örnek bir dosya aşağıdaki gibi görünebilir:

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

Her ara sunucu, önceki örnekte proxy1 gibi kolay bir ada sahiptir. Karşılık gelen proxy tanımı nesnesi aşağıdaki özelliklerle tanımlanır:

  • matchCondition: Gerekli--bu proxy'nin yürütülmesini tetikleyen istekleri tanımlayan bir nesne. HTTP tetikleyicileriyle paylaşılan iki özellik içerir:
    • methods: Ara sunucusunun yanıt verdiği HTTP yöntemlerinin dizisi. Belirtilmezse, ara sunucu yoldaki tüm HTTP yöntemlerine yanıt verir.
    • route: Gerekli--ara sunucunuzun yanıt verdiği istek URL'lerini denetleyen yol şablonunu tanımlar. HTTP tetikleyicilerinin aksine varsayılan değer yoktur.
  • backendUri: İsteğin iletilmesi gereken arka uç kaynağının URL'si. Bu değer, özgün istemci isteğinden uygulama ayarlarına ve parametrelerine başvurabilir. Bu özellik dahil değilse, Azure İşlevleri HTTP 200 Tamam ile yanıt verir.
  • requestOverrides: Arka uç isteğine dönüştürmeleri tanımlayan bir nesne. Bkz . RequestOverrides nesnesi tanımlama.
  • responseOverrides: İstemci yanıtına dönüştürmeleri tanımlayan bir nesne. Bkz . ResponseOverrides nesnesi tanımlama.

Not

Azure İşlevleri Proxy'lerindeki route özelliği, İşlev Uygulaması ana bilgisayar yapılandırmasının routePrefix özelliğini dikkate almaz. gibi /apibir ön ek eklemek istiyorsanız, bunun route özelliğine eklenmesi gerekir.

Tek tek proxy'leri devre dışı bırakma

Dosyadaki ara sunucuya ekleyerek "disabled": true tek tek proxy'leri proxies.json devre dışı bırakabilirsiniz. Bu, matchCondition'ı karşılayan isteklerin 404 döndürmesine neden olur.

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

Uygulama Ayarları

Ara sunucu davranışı çeşitli uygulama ayarları tarafından denetlenebilir. Bunların tümü İşlevler Uygulaması Ayarlar başvurusunda özetlenmiştir

Ayrılmış Karakterler (dize biçimlendirmesi)

Proxy'ler, kaçış simgesi olarak \ kullanarak bir JSON dosyasındaki tüm dizeleri okur. Proxy'ler küme ayraçlarını da yorumlar. Aşağıdaki örneklerin tamamına bakın.

Karakter Kaçış Karakteri Örnek
{ veya } {{ veya }} {{ example }} -->{ example }
\ \\ example.com\\text.html -->example.com\text.html
" \" \"example\" -->"example"

requestOverrides nesnesi tanımlama

requestOverrides nesnesi, arka uç kaynağı çağrıldığında istekte yapılan değişiklikleri tanımlar. nesnesi aşağıdaki özelliklerle tanımlanır:

  • backend.request.method: Arka ucu çağırmak için kullanılan HTTP yöntemi.
  • backend.request.querystring.<ParameterName>: Arka uca çağrı için ayarlanabilen bir sorgu dizesi parametresi. ParameterName değerini ayarlamak istediğiniz parametrenin adıyla değiştirin<.> Boş bir dize sağlanırsa, parametresi yine de arka uç isteğine eklenir.
  • backend.request.headers.<HeaderName>: Arka uç çağrısı için ayarlanabilen üst bilgi. HeaderName değerini ayarlamak istediğiniz üst bilginin adıyla değiştirin<.> Boş bir dize sağlanırsa, parametresi yine de arka uç isteğine eklenir.

Değerler, özgün istemci isteğinden uygulama ayarlarına ve parametrelerine başvurabilir.

Örnek bir yapılandırma aşağıdaki gibi görünebilir:

{
    "$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 nesnesi tanımlama

requestOverrides nesnesi, istemciye geri geçirilen yanıtta yapılan değişiklikleri tanımlar. nesnesi aşağıdaki özelliklerle tanımlanır:

  • response.statusCode: İstemciye döndürülecek HTTP durum kodu.
  • response.statusReason: İstemciye döndürülecek HTTP neden tümceciği.
  • response.body: İstemciye döndürülecek gövdenin dize gösterimi.
  • response.headers.<HeaderName>: İstemciye yanıt için ayarlanabilen üst bilgi. HeaderName değerini ayarlamak istediğiniz üst bilginin adıyla değiştirin<.> Boş dizeyi sağlarsanız, üst bilgi yanıta dahil değildir.

Değerler uygulama ayarlarına, özgün istemci isteğindeki parametrelere ve arka uç yanıtından parametrelere başvurabilir.

Örnek bir yapılandırma aşağıdaki gibi görünebilir:

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

Not

Bu örnekte, yanıt gövdesi doğrudan ayarlanır, bu nedenle özellik backendUri gerekmez. Örnek, sahte API'ler için Azure İşlevleri Proxy'leri nasıl kullanabileceğinizi gösterir.