Azure İşlevleri HTTP tetikleyicisi

HTTP tetikleyicisi, HTTP isteğiyle bir işlev çağırmaya olanak sağlar. Sunucusuz API'ler oluşturmak ve web kancalarına yanıt vermek için bir HTTP tetikleyicisi kullanabilirsiniz.

HTTP ile tetiklenen bir işlevin varsayılan dönüş değeri şudur:

  • HTTP 204 No Content İşlevler 2.x ve üzerinde boş bir gövde ile
  • HTTP 200 OK İşlevler 1.x'te boş bir gövde ile

HTTP yanıtını değiştirmek için bir çıkış bağlaması yapılandırabilirsiniz.

HTTP bağlamaları hakkında daha fazla bilgi için genel bakış ve çıkış bağlaması başvurusuna bakın.

İpucu

HTTP veya Web kancası bağlamalarını kullanmayı planlıyorsanız, yanlış örneklemesinin neden olduğu bir bağlantı noktası tükenmesi olmaması için plan yapın HttpClient . Daha fazla bilgi için bkz. Azure işlevlerinde bağlantıları yönetme.

Örnek

Aşağıdaki örnekte, sorgu dizesinde veya HTTP isteğinin gövdesinde bir parametreyi bu parametreyi aramaya yönelik bir C# name işlevi yer alır. Dönüş değerinin çıkış bağlaması için kullanılmıştır ancak dönüş değeri özniteliği gerekli değildir.

[FunctionName("HttpTriggerCSharp")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
    HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];
    
    string requestBody = String.Empty;
    using (StreamReader streamReader =  new  StreamReader(req.Body))
    {
        requestBody = await streamReader.ReadToEndAsync();
    }
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;
    
    return name != null
        ? (ActionResult)new OkObjectResult($"Hello, {name}")
        : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}

Öznitelikler ve ek açıklamalar

C# sınıf kitaplıklarında ve HttpTrigger Java'da işlevi yapılandırmak için özniteliği kullanılabilir.

Öznitelik oluşturucu parametrelerinde, web kancası türünde ve yol şablonunda yetkilendirme düzeyini ve izin verilebilir HTTP yöntemlerini belirtebilirsiniz. Bu ayarlar hakkında daha fazla bilgi için bkz. yapılandırma.

Bu örnek, HttpTrigger özniteliğinin nasıl kullanılacıyla ilgili bilgi sağlar.

[FunctionName("HttpTriggerCSharp")]
public static Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequest req)
{
    ...
}

Tam bir örnek için tetikleyici örneğine bakın.

Yapılandırma

Aşağıdaki tabloda, dosyada ve özniteliğinde ayarfunction.js bağlama yapılandırma özellikleri açık HttpTrigger bulunmaktadır.

function.jsüzerinde Öznitelik özelliği Description
Türü yok Gerekli - olarak ayar httpTrigger gerekir.
yön yok Gerekli - olarak ayar in gerekir.
Adı yok Gerekli - İstek veya istek gövdesi için işlev kodunda kullanılan değişken adı.
authLevel AuthLevel İşlevi çağırmak için istekte hangi anahtarların (varsa) mevcut olması gerektirmektedir. Yetkilendirme düzeyi aşağıdaki değerlerden biri olabilir:
  • anonymous—API anahtarı gerekmez.
  • function—İşleve özgü bir API anahtarı gereklidir. Bu, hiçbiri sağlanıyorsa varsayılan değerdir.
  • admin—Ana anahtar gereklidir.
Daha fazla bilgi için yetkilendirme anahtarları hakkında bölümüne bakın.
Yöntemler Yöntemler İşlevin yanıt vermek için kullanılan HTTP yöntemlerinin dizisi. Belirtilmemişse, işlev tüm HTTP yöntemlerine yanıt verir. Bkz. http uç noktasını özelleştirme.
yol Yolu İşlevinizin hangi istek URL 'Lerine yanıt vereceğini denetleyen yol şablonunu tanımlar. Hiçbiri sağlanmadıysa varsayılan değer <functionname> . Daha fazla bilgi için bkz. http uç noktasını özelleştirme.
Web kancası türü Web kancası türü Yalnızca sürüm 1. x çalışma zamanı için desteklenir.

HTTP tetikleyicisini, belirtilen sağlayıcı için bir Web kancası alıcısı olarak davranacak şekilde yapılandırır. methodsBu özelliği ayarlarsanız özelliği ayarlamazsanız. Web kancası türü aşağıdaki değerlerden biri olabilir:
  • genericJson—Belirli bir sağlayıcı için mantığı olmayan genel amaçlı bir Web kancası uç noktası. Bu ayar, istekleri yalnızca HTTP POST kullanan ve application/json içerik türüyle kısıtlar.
  • github—işlev, GitHub web kancalarınayanıt verir. authlevel özelliğini GitHub web kancaları ile kullanmayın. daha fazla bilgi için bu makalenin ilerleyen kısımlarında GitHub web kancaları bölümüne bakın.
  • slack—İşlev, bolluk web kancalarınayanıt veriyor. AUTHLEVEL özelliğini bolluk web kancaları ile kullanmayın. Daha fazla bilgi için bu makalenin ilerleyen kısımlarında yer alarak bolluk web kancaları bölümüne bakın.

Te

Tetikleyici giriş türü HttpRequest ya da özel bir tür olarak bildirilmiştir. Seçeneğini belirlerseniz HttpRequest , istek nesnesine tam erişim edinirsiniz. Özel bir tür için, çalışma zamanı nesne özelliklerini ayarlamak için JSON istek gövdesini ayrıştırmaya çalışır.

HTTP uç noktasını özelleştirme

Varsayılan olarak, bir HTTP tetikleyicisi için bir işlev oluşturduğunuzda, işlev, formun bir yolu ile adreslenebilir:

http://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>

Bu yolu route , http tetikleyicisinin giriş bağlamasındaki isteğe bağlı özelliği kullanarak özelleştirebilirsiniz. Örnek olarak, aşağıdaki function.js DOSYADAKI bir route http tetikleyicisi için bir özelliği tanımlar:

{
    "bindings": [
    {
        "type": "httpTrigger",
        "name": "req",
        "direction": "in",
        "methods": [ "get" ],
        "route": "products/{category:alpha}/{id:int?}"
    },
    {
        "type": "http",
        "name": "res",
        "direction": "out"
    }
    ]
}

Bu yapılandırmayı kullanarak, işlev artık özgün yol yerine aşağıdaki rota ile adreslenebilir.

http://<APP_NAME>.azurewebsites.net/api/products/electronics/357

Bu yapılandırma, işlev kodunun adreste, kategoride ve kimliğinde iki parametreyi desteklemesini sağlar. Yönlendirme parametrelerinin bir URL 'de nasıl simgeleştirilmiş olduğu hakkında daha fazla bilgi için bkz. ASP.NET Core yönlendirme.

Parametrelerinizi kullanarak herhangi bir Web API yolu kısıtlaması kullanabilirsiniz. Aşağıdaki C# işlev kodu her iki parametrenin de kullanımını sağlar.

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;

public static IActionResult Run(HttpRequest req, string category, int? id, ILogger log)
{
    var message = String.Format($"Category: {category}, ID: {id}");
    return (ActionResult)new OkObjectResult(message);
}

Varsayılan olarak, tüm işlev yollarına API ön eki eklenir. Ayrıca, extensions.http.routePrefix dosyadaki host.js özelliğini kullanarak ön eki özelleştirebilir veya kaldırabilirsiniz. Aşağıdaki örnek, dosyasındaki host.js önek için boş bir dize kullanarak API yol önekini kaldırır.

{
    "extensions": {
        "http": {
            "routePrefix": ""
        }
    }
}

Rota parametrelerini kullanma

Bir işlevin stilini tanımlayan rota parametreleri route her bağlamada kullanılabilir. Örneğin, olarak tanımlanmış bir rota varsa, "route": "products/{id}" bir tablo depolama bağlaması, {id} bağlama yapılandırmasındaki parametresinin değerini kullanabilir.

Aşağıdaki yapılandırma, {id} parametresinin bağlamaya nasıl geçtiğini gösterir rowKey .

{
    "type": "table",
    "direction": "in",
    "name": "product",
    "partitionKey": "products",
    "tableName": "products",
    "rowKey": "{id}"
}

Yol parametreleri kullandığınızda, invoke_URL_template işleviniz için bir otomatik olarak oluşturulur. İstemcileriniz, URL 'sini kullanarak işlevinizi çağırırken URL 'de geçmesi gereken parametreleri anlamak için URL şablonunu kullanabilir. Azure Portal http ile tetiklenen işlevlerinizin birine gidin ve Işlev URL 'sini al' ı seçin.

invoke_URL_template List Işlevleri veya Get Işleviiçin Azure Resource Manager API 'lerini kullanarak programlı olarak öğesine erişebilirsiniz.

İstemci kimlikleriyle çalışma

İşlev uygulamanız App Service kimlik doğrulaması/yetkilendirmekullanıyorsa, koddan kimliği doğrulanmış istemcilerle ilgili bilgileri görüntüleyebilirsiniz. Bu bilgiler, platform tarafından eklenen istek üstbilgileriolarak kullanılabilir.

Ayrıca, bu bilgileri bağlama verilerinden okuyabilirsiniz. Bu özellik yalnızca 2. x ve üzeri Işlevleri çalışma zamanı için kullanılabilir. Bu, şu anda yalnızca .NET dilleri için de kullanılabilir.

Kimliği doğrulanmış istemcilerle ilgili bilgiler bir ClaimsPrincipalolarak sunulmaktadır. ClaimsPrincipal, aşağıdaki örnekte gösterildiği gibi istek bağlamının bir parçası olarak kullanılabilir:

using System.Net;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;

public static IActionResult Run(HttpRequest req, ILogger log)
{
    ClaimsPrincipal identities = req.HttpContext.User;
    // ...
    return new OkObjectResult();
}

Alternatif olarak, ClaimsPrincipal yalnızca işlev imzasında ek bir parametre olarak eklenebilir:

using System.Net;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;
using Newtonsoft.Json.Linq;

public static void Run(JObject input, ClaimsPrincipal principal, ILogger log)
{
    // ...
    return;
}

İşlev erişim tuşları

İşlevler, geliştirme sırasında HTTP işlev uç noktalarınıza erişmeyi daha zor hale getirmek için anahtarları kullanmanıza olanak sağlar. HTTP ile tetiklenen bir işlev üzerinde HTTP erişim düzeyi olarak ayarlanmadığı takdirde anonymous istekler istekte BIR API erişim anahtarı içermelidir.

Anahtarlar varsayılan bir güvenlik mekanizması sağlarken, üretimde bir HTTP uç noktasının güvenliğini sağlamak için ek seçenekler düşünmek isteyebilirsiniz. Örneğin, ortak uygulamalarda paylaşılan gizli dizi dağıtımı genellikle iyi bir uygulamadır. İşleviniz ortak bir istemciden çağrılırsa, başka bir güvenlik mekanizması uygulamayı düşünmek isteyebilirsiniz. Daha fazla bilgi edinmek için bkz. üretimde BIR HTTP uç noktası güvenli hale getirme.

İşlev anahtarı değerlerinizi yenilediğinizde, güncelleştirilmiş anahtar değerlerini işlevinizi çağıran tüm istemcilere el ile yeniden dağıtmanız gerekir.

Yetkilendirme kapsamları (işlev düzeyi)

İşlev düzeyi anahtarlar için iki erişim kapsamı vardır:

  • İşlev: Bu anahtarlar yalnızca tanımlandıkları belirli işlevler için geçerlidir. API anahtarı olarak kullanıldığında, bunlar yalnızca bu işleve erişime izin verir.

  • Konak: işlev uygulaması içindeki tüm işlevlere erişmek için konak kapsamına sahip anahtarlar kullanılabilir. API anahtarı olarak kullanıldığında, bu, işlev uygulaması içindeki herhangi bir işleve erişime izin verir.

Her anahtar başvuru için adlandırılır ve işlev ve ana bilgisayar düzeyinde bir varsayılan anahtar ("varsayılan" olarak adlandırılır) vardır. İşlev anahtarları ana bilgisayar anahtarlarına göre önceliklidir. Aynı ada sahip iki anahtar tanımlandığında, işlev anahtarı her zaman kullanılır.

Ana anahtar (yönetici düzeyi)

Her işlev uygulamasının adlı bir yönetim düzeyi ana bilgisayar anahtarı da vardır _master . Ana anahtar, uygulamadaki tüm işlevlere ana bilgisayar düzeyinde erişim sağlamaya ek olarak, çalışma zamanı REST API 'Lerine da yönetici erişimi sağlar. Bu anahtar iptal edilemez. Bir erişim düzeyi belirlediğinizde admin , istekler ana anahtarı kullanmalıdır; erişim hatası ile ilgili başka herhangi bir anahtar oluşur.

Dikkat

Ana anahtar tarafından verilen işlev uygulamanızda yükseltilmiş izinler nedeniyle, bu anahtarı üçüncü taraflarla paylaşmamalıdır veya yerel istemci uygulamalarında dağıtmanız gerekir. Yönetici erişim düzeyini seçerken dikkatli olun.

Anahtarları edinme

Anahtarlar, Azure 'daki işlev uygulamanızın bir parçası olarak depolanır ve bekleyen olarak şifrelenir. Anahtarlarınızı görüntülemek, yenilerini oluşturmak veya yeni değerlere anahtar almak için, Azure Portal http ile tetiklenen işlevlerinizin birine gidin ve işlev anahtarları' nı seçin.

Ayrıca, ana bilgisayar anahtarlarını da yönetebilirsiniz. Azure Portal işlev uygulamasına gidin ve uygulama anahtarları' nı seçin.

Azure Resource Manager API 'Lerini kullanarak işlev ve konak anahtarlarını programlama yoluyla elde edebilirsiniz. Işlev anahtarlarını listelemek ve konak anahtarlarını listelemekiçin API 'ler vardır ve dağıtım yuvaları kullanılırken eşdeğer API 'Ler, Işlev anahtarları yuvası ve liste ana bilgisayar anahtarları yuvasıolarak listelenmektedir.

Ayrıca, programlı bir şekilde Oluştur veya Güncelleştir Işlev gizlianahtarını kullanarak, işlev gizlidizisi oluşturma veya güncelleştirme, ana bilgisayar gizli dizisi oluşturma veya güncelleştirme , ana bilgisayar gizli dizisi API 'leri oluşturma veya güncelleştirme gibi yeni işlev ve konak anahtarları da oluşturabilirsiniz.

İşlev ve ana bilgisayar anahtarları programlı olarak silme Işlevi gizlidizisi kullanılarak silinebilir, işlev gizli yuvasınısilebilir, konak gizliliğinisilebilir ve ana bilgisayar gizli yuva API 'lerini silebilir.

İşlev anahtarları almak için eski anahtar yönetim API 'lerinide kullanabilirsiniz, ancak bunun yerine Azure Resource Manager API 'leri kullanılması önerilir.

API anahtarı yetkilendirmesi

HTTP tetikleyici şablonlarının çoğu istekte bir API anahtarı gerektirir. Bu nedenle, HTTP isteğiniz normalde aşağıdaki URL gibi görünür:

https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?code=<API_KEY>

Anahtar, yukarıdaki gibi adlı bir sorgu dizesi değişkenine dahil edilebilir code . Bir HTTP başlığına da dahil edilebilir x-functions-key . Anahtarın değeri, işlev için tanımlanan herhangi bir işlev anahtarı veya herhangi bir konak anahtarı olabilir.

Anahtar gerektirmeyen anonim isteklere izin verebilirsiniz. Ana anahtarın kullanılmasını da gerekli kılabilirsiniz. JSON bağlama içindeki özelliğini kullanarak varsayılan yetkilendirme düzeyini değiştirirsiniz authLevel . Daha fazla bilgi için bkz. tetikleyici-yapılandırma.

Not

İşlevler yerel olarak çalıştırılırken, kimlik doğrulama, belirtilen Yetkilendirme düzeyi ayarından bağımsız olarak devre dışıdır. Azure 'da yayımladıktan sonra, authLevel tetikleyicinizdeki ayar zorlanır. Bir kapsayıcıda yerel olarakçalıştırılırken Anahtarlar hala gereklidir.

Üretimde bir HTTP uç noktasının güvenliğini sağlama

İşlev uç noktalarınızı üretimde tam olarak güvenli hale getirmek için aşağıdaki işlev uygulama düzeyi güvenlik seçeneklerinden birini uygulamayı göz önünde bulundurmanız gerekir. Bu işlev uygulama düzeyi güvenlik yöntemlerinden birini kullanırken, HTTP ile tetiklenen işlev yetkilendirme düzeyini olarak ayarlamanız gerekir anonymous .

Kimlik doğrulama/yetkilendirmeyi App Service etkinleştirme

App Service platformu, istemcilerin kimliğini doğrulamak için Azure Active Directory (AAD) ve çeşitli üçüncü taraf kimlik sağlayıcılarını kullanmanıza olanak sağlar. İşlevleriniz için özel yetkilendirme kuralları uygulamak üzere bu stratejiyi kullanabilir ve işlev kodunuzda kullanıcı bilgileriyle çalışabilirsiniz. Daha fazla bilgi için bkz. Azure App Service 'Da kimlik doğrulama ve yetkilendirme ve istemci kimlikleriyle çalışma.

İsteklerin kimliğini doğrulamak için Azure API Management (APıM) kullanma

APıM, gelen istekler için çeşitli API güvenliği seçenekleri sağlar. Daha fazla bilgi için bkz. API Management kimlik doğrulama ilkeleri. APıM ile, işlev uygulamanızı yalnızca APıM örneğinizin IP adresinden gelen istekleri kabul edecek şekilde yapılandırabilirsiniz. Daha fazla bilgi için bkz. IP adresi kısıtlamaları.

İşlev uygulamanızı yalıtımına dağıtın

Azure App Service Ortamı (Ao), işlevlerinizin çalıştırılacağı adanmış bir barındırma ortamı sağlar. Ao, tüm gelen isteklerin kimliğini doğrulamak için kullanabileceğiniz tek bir ön uç ağ geçidi yapılandırmanıza olanak tanır. Daha fazla bilgi için bkz. App Service ortamı Için Web uygulaması güvenlik duvarı (WAF) yapılandırma.

Web Kancaları

Not

Web kancası modu yalnızca Işlevler çalışma zamanının sürüm 1. x 'i için kullanılabilir. Bu değişiklik, sürüm 2. x ve üzeri HTTP tetikleyicilerinin performansını geliştirmek için yapılmıştır.

Sürüm 1. x içinde, Web kancası şablonları Web kancası yükleri için ek doğrulama sağlar. Sürüm 2. x ve üzeri sürümlerde, temel HTTP tetikleyicisi hala çalışıyor ve Web kancaları için önerilen yaklaşım.

web kancaları GitHub

GitHub web kancalarına yanıt vermek için, önce işlevinizi bir HTTP tetikleyicisiyle oluşturun ve web kancatürü özelliğini olarak ayarlayın github . sonra URL ve apı anahtarını GitHub deponuzun web kancası ekle sayfasına kopyalayın.

İşleviniz için bir Web kancası eklemeyi gösteren ekran görüntüsü.

Bolluk web kancaları

Bolluk Web kancası sizin belirtebilmenizi sağlamak yerine sizin için bir belirteç üretir. bu nedenle, bir işleve özgü anahtarı bolluk 'ten belirtece göre yapılandırmanız gerekir. Bkz. Yetkilendirme anahtarları.

Web kancaları ve anahtarları

Web kancası yetkilendirmesi, HTTP tetikleyicisinin bir parçası olan Web kancası alıcısı bileşeni tarafından işlenir ve mekanizma Web kancası türüne göre farklılık gösterir. Her mekanizma bir anahtara bağlıdır. Varsayılan olarak, "varsayılan" adlı işlev anahtarı kullanılır. Farklı bir anahtar kullanmak için, Web kancası sağlayıcısını aşağıdaki yollarla anahtar adını istekle birlikte gönderecek şekilde yapılandırın:

  • Sorgu dizesi: sağlayıcı, anahtar adını sorgu dizesi parametresinde (gibi) geçirir clientid https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?clientid=<KEY_NAME> .
  • İstek üst bilgisi: sağlayıcı, üst bilgide anahtar adını geçirir x-functions-clientid .

İçerik türleri

İkili ve form verilerinin C olmayan bir işleve geçirilmesi, uygun Content-Type üst bilgisini kullanmanızı gerektirir. Desteklenen içerik türleri octet-stream ikili veriler ve çok parçalı türleriçin içerir.

Bilinen sorunlar

C olmayan işlevlerde, içerik türü ile gönderilen istekler, image/jpeg string işleve geçirilen bir değerle sonuçlanır. Bunlar gibi durumlarda, string ham ikili verilere erişmek için değeri el ile bir bayt dizisine dönüştürebilirsiniz.

Sınırlar

HTTP istek uzunluğu 100 MB (104.857.600 bayt) ile sınırlıdır ve URL uzunluğu 4 KB (4.096 bayt) ile sınırlıdır. Bu sınırlar, httpRuntime çalışma zamanının Web.config dosyasınınöğesi tarafından belirtilir.

http tetikleyicisini kullanan bir işlev 230 saniye içinde tamamlanmazsa, Azure Load Balancer zaman aşımına uğrar ve bir HTTP 502 hatası döndürür. İşlev çalışmaya devam edecektir, ancak HTTP yanıtı dönemeyecektir. Uzun süre çalışan işlevlerde, zaman uyumsuz desenleri izlemenizi ve isteğin durumuna ping ekleyebileceğiniz bir konum döndürmenizi öneririz. Bir işlevin ne kadar süreyle çalıştırılabilmesini hakkında bilgi için bkz. ölçek ve barındırma-tüketim planı.

Sonraki adımlar