Hızlı Başlangıç: Komut satırından Azure'da C# işlevi oluşturma

Bu makalede, KOMUT SATıRı araçlarını kullanarak HTTP isteklerine yanıt veren bir C# işlevi oluşturacaksınız. Kodu yerel olarak test ettikten sonra Azure İşlevleri sunucusuz ortamına dağıtırsınız.

Bu makale her iki tür derlenmiş C# işlevinin oluşturulmasını destekler:

Yürütme modeli Description
İşlemde İşlev kodunuz İşlevler konak işlemiyle aynı işlemde çalışır. .NET Core 3.1 ve .NET 6.0'ı destekler. Daha fazla bilgi edinmek için bkz. Azure İşlevleri kullanarak C# sınıf kitaplığı işlevleri geliştirme.
Yalıtılmış işlem İşlev kodunuz ayrı bir .NET çalışan işleminde çalışır. .NET 5.0 ve .NET 6.0'ı destekler. Daha fazla bilgi edinmek için bkz . C# dilinde yalıtılmış işlem işlevleri geliştirme.

Bu makale, .NET 6.0 üzerinde çalışan HTTP ile tetiklenen bir işlev oluşturur. Bu makalenin Visual Studio Code tabanlı bir sürümü de vardır.

Bu hızlı başlangıcı tamamlamak, Azure hesabınızda birkaç ABD doları veya daha az bir maliyete neden olur.

Yerel ortamınızı yapılandırma

Başlamadan önce aşağıdakilere sahip olmanız gerekir:

Etkin aboneliğe sahip bir Azure hesabına da ihtiyacınız vardır. Ücretsiz bir hesap oluşturun.

Önkoşul denetimi

Azure CLI'yı mı kullandığınıza yoksa Azure kaynakları oluşturmak için Azure PowerShell mi kullandığınıza bağlı olarak önkoşullarınızı doğrulayın:

  • Terminalde veya komut penceresinde, Azure İşlevleri Core Tools'un 4.x sürümü olup olmadığını denetlemek için komutunu çalıştırınfunc --version.

  • Gerekli sürümlerin yüklü olup olmadığını denetlemek için komutunu çalıştırın dotnet --list-sdks .

  • Azure CLI sürümünün 2.4 veya üzeri olup olmadığını denetlemek için komutunu çalıştırın az --version .

  • Azure'da oturum açmak ve etkin aboneliği doğrulamak için komutunu çalıştırın az login .

Yerel işlev projesi oluşturma

Azure İşlevleri işlev projesi, her biri belirli bir tetikleyiciye yanıt veren bir veya daha fazla tek tek işlev için bir kapsayıcıdır. Projedeki tüm işlevler aynı yerel ve barındırma yapılandırmalarını paylaşır. Bu bölümde, tek bir işlev içeren bir işlev projesi oluşturacaksınız.

  1. Belirtilen çalışma zamanıyla func initLocalFunctionProj adlı bir klasörde işlev projesi oluşturmak için komutunu aşağıdaki gibi çalıştırın:

    func init LocalFunctionProj --dotnet
    
  2. Proje klasörüne gidin:

    cd LocalFunctionProj
    

    Bu klasör, local.settings.json ve host.json adlı yapılandırma dosyaları da dahil olmak üzere proje için çeşitli dosyalar içerir. local.settings.json Azure'dan indirilen gizli dizileri içerebileceğinden, dosya .gitignore dosyasında varsayılan olarak kaynak denetiminden dışlanır.

  3. Aşağıdaki komutu kullanarak projenize bir işlev ekleyin; burada --name bağımsız değişken işlevinizin benzersiz adıdır (HttpExample) ve --template bağımsız değişken işlevin tetikleyicisini (HTTP) belirtir.

    func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
    

    func new bir HttpExample.cs kod dosyası oluşturur.

(İsteğe bağlı) Dosya içeriğini inceleme

İsterseniz İşlevi yerel olarak çalıştır'a atlayabilir ve dosya içeriğini daha sonra inceleyebilirsiniz.

HttpExample.cs

Şablondan oluşturulan işlev kodu derlenmiş C# projesinin türüne bağlıdır.

HttpExample.cs değişkeninde req istek verilerini alan bir Run yöntem içerir; tetikleyici davranışını tanımlayan HttpTriggerAttribute ile süslenmiş bir HttpRequest'tir.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

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

            string name = req.Query["name"];

            string requestBody = await new StreamReader(req.Body).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");
        }
    }
}

Dönüş nesnesi, OkObjectResult (200) veya BadRequestObjectResult (400) olarak yanıt iletisi döndüren bir ActionResult nesnesidir.

Daha fazla bilgi edinmek için bkz. HTTP tetikleyicilerini ve bağlamalarını Azure İşlevleri.

İşlevi yerel olarak çalıştırma

  1. LocalFunctionProj klasöründen yerel Azure İşlevleri çalışma zamanı ana bilgisayarını başlatarak işlevinizi çalıştırın:

    func start
    

    Çıkışın sonuna doğru aşağıdaki satırlar görünmelidir:

     ...
    
     Now listening on: http://0.0.0.0:7071
     Application started. Press Ctrl+C to shut down.
    
     Http Functions:
    
             HttpExample: [GET,POST] http://localhost:7071/api/HttpExample
     ...
    
     

    Not

    HttpExample yukarıda gösterildiği gibi görünmüyorsa, konağı büyük olasılıkla projenin kök klasörünün dışından başlatmışsınızdır. Bu durumda, konağı durdurmak için CtrlC+ kullanın, projenin kök klasörüne gidin ve önceki komutu yeniden çalıştırın.

  2. İşlevinizin HttpExample URL'sini bu çıkıştan bir tarayıcıya kopyalayın:

    İşlev URL'sine sorgu dizesini ?name=<YOUR_NAME>ekleyin ve tam URL'yi gibi oluşturun http://localhost:7071/api/HttpExample?name=Functions. Tarayıcı, sorgu dizesi değerinizi geri döndüren bir yanıt iletisi görüntülemelidir. Projenizi başlattığınız terminal, istekte bulunurken günlük çıkışını da gösterir.

  3. İşiniz bittiğinde CtrlC'yi+ kullanın ve işlevlerin ana bilgisayarını durdurmayı seçiny.

İşleviniz için destekleyici Azure kaynakları oluşturma

İşlev kodunuzu Azure'a dağıtabilmeniz için önce üç kaynak oluşturmanız gerekir:

  • İlgili kaynaklar için mantıksal bir kapsayıcı olan kaynak grubu.
  • İşlevleriniz hakkındaki durumu ve diğer bilgileri korumak için kullanılan bir Depolama hesabı.
  • İşlev kodunuzu yürütmek için ortamı sağlayan bir işlev uygulaması. İşlev uygulaması yerel işlev projenize eşler ve kaynakların daha kolay yönetilmesi, dağıtılması ve paylaşılması için işlevleri mantıksal birim olarak gruplandırmanıza olanak tanır.

Bu öğeleri oluşturmak için aşağıdaki komutları kullanın. Hem Azure CLI hem de PowerShell desteklenir.

  1. Henüz yapmadıysanız Azure'da oturum açın:

    az login
    

    az login komutu, Azure hesabınızda oturum açar.

  2. Seçtiğiniz bölgede adlı AzureFunctionsQuickstart-rg bir kaynak grubu oluşturun:

    az group create --name AzureFunctionsQuickstart-rg --location <REGION>
    

    az group create komutu bir kaynak grubu oluşturur. Yukarıdaki komutta değerini, az account list-locations komutundan döndürülen kullanılabilir bir bölge kodunu kullanarak yakınınızdaki bir bölgeyle değiştirin<REGION>.

  3. Kaynak grubunuzda ve bölgenizde genel amaçlı bir depolama hesabı oluşturun:

    az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsQuickstart-rg --sku Standard_LRS
    

    az storage account create komutu depolama hesabını oluşturur.

    Önceki örnekte değerini size uygun ve Azure Depolama benzersiz bir adla değiştirin<STORAGE_NAME>. Adlar yalnızca üç ile 24 karakter arasında sayı ve küçük harf içermelidir. Standard_LRSİşlevler tarafından desteklenen genel amaçlı bir hesap belirtir.

  1. Azure'da işlev uygulamasını oluşturma:

    az functionapp create --resource-group AzureFunctionsQuickstart-rg --consumption-plan-location <REGION> --runtime dotnet --functions-version 3 --name <APP_NAME> --storage-account <STORAGE_NAME>
    

    az functionapp create komutu, Azure'da işlev uygulamasını oluşturur.

    Not

    Bu komut, Azure İşlevleri çalışma zamanının 3.x sürümünü kullanarak bir işlev uygulaması oluşturur. Daha func azure functionapp publish sonra çalıştırabileceğiniz komut, uygulamayı 4.x sürümüne güncelleştirir.

    Önceki örnekte değerini önceki <STORAGE_NAME> adımda kullandığınız hesabın adıyla değiştirin ve değerini size uygun genel olarak benzersiz bir adla değiştirin <APP_NAME> . <APP_NAME> aynı zamanda işlev uygulamasının varsayılan DNS etki alanıdır.

    Bu komut, Azure İşlevleri Tüketim Planı altında belirtilen dil çalışma zamanınızda çalışan bir işlev uygulaması oluşturur ve bu uygulama burada kullandığınız kullanım miktarı için ücretsizdir. Komut ayrıca aynı kaynak grubunda ilişkili bir Azure Uygulaması Analizler örneği sağlar. Bu örnekle işlev uygulamanızı izleyebilir ve günlükleri görüntüleyebilirsiniz. Daha fazla bilgi için bkz. İzleme Azure İşlevleri. Örnek, siz etkinleştirene kadar ücret ödemez.

İşlev projesini Azure'a dağıtma

İşlev uygulamanızı Azure'da başarıyla oluşturduktan sonra, artık func azure functionapp publish komutunu kullanarak yerel işlevler projenizi dağıtmaya hazırsınız demektir.

Aşağıdaki örnekte değerini uygulamanızın adıyla değiştirin <APP_NAME> .

func azure functionapp publish <APP_NAME>

Yayımla komutu aşağıdaki çıkışa benzer sonuçlar gösterir (kolaylık olması için kesilmiş):

...

Getting site publishing info...
Creating archive for current directory...
Performing remote build for functions project.

...

Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in msdocs-azurefunctions-qs:
    HttpExample - [httpTrigger]
        Invoke url: https://msdocs-azurefunctions-qs.azurewebsites.net/api/httpexample

İşlevi Azure'da çağırma

İşleviniz bir HTTP tetikleyicisi kullandığından ve GET isteklerini desteklediğinden, URL'sine bir HTTP isteği yaparak çağırabilirsiniz. Bunu tarayıcıda yapmak en kolayıdır.

Yayımla komutunun çıkışında gösterilen tam Çağırma URL'sini tarayıcı adres çubuğuna kopyalayın ve sorgu parametresini ?name=Functionsekleyin. Bu URL'ye gittiğinizde, tarayıcı işlevi yerel olarak çalıştırdığınızda olduğu gibi benzer bir çıkış görüntülemelidir.

Gerçek zamanlıya yakın akış günlüklerini görüntülemek için aşağıdaki komutu çalıştırın:

func azure functionapp logstream <APP_NAME> 

Ayrı bir terminal penceresinde veya tarayıcıda uzak işlevi yeniden çağırın. Terminalde Azure'da işlev yürütme işleminin ayrıntılı bir günlüğü gösterilir.

Kaynakları temizleme

Bir sonraki adıma devam edip bir Azure Depolama kuyruğu çıkış bağlaması eklerseniz, yaptığınız işlemlerin üzerine oluşturabileceğiniz gibi tüm kaynaklarınızı yerinde tutun.

Aksi takdirde, daha fazla maliyet oluşmasını önlemek için kaynak grubunu ve içerdiği tüm kaynakları silmek için aşağıdaki komutu kullanın.

az group delete --name AzureFunctionsQuickstart-rg

Sonraki adımlar