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

Bu makalede, HTTP isteklerine yanıt veren bir C# işlevi oluşturmak için komut satırı araçlarını kullanırsınız. Kodu yerel olarak test ettikten sonra, Azure Işlevlerinin sunucusuz ortamına dağıtırsınız.

Bu makale, her iki tür derlenmiş C# işlevi oluşturmayı destekler:

Yürütme modeli Description
İşlem içinde İşlev kodunuz İşlevler konak işlemiyle aynı işlemde çalışır. Hem .NET Core 3.1 hem de .NET 6.0'i 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şlemi içinde çalışır. Hem .NET 5.0 hem de .NET 6.0'i destekler. Daha fazla bilgi edinmek için bkz. C# ile yalıtılmış işlem işlevleri geliştirme.

Bu makale, .NET 6,0 üzerinde çalışan bir HTTP ile tetiklenen 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 kısa bir ücret doğurur.

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

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

Ayrıca etkin bir aboneliğe sahip bir Azure hesabınızın olması gerekir. Ücretsiz hesap oluşturun.

Önkoşul denetimi

azure clı veya azure kaynakları oluşturmak için Azure PowerShell kullanıp kullanmayacağınızı temel alan önkoşulları doğrulayın:

  • Bir Terminal veya komut penceresinde, func --version Azure Functions Core Tools sürüm 4. x olup olmadığını denetlemek için komutunu çalıştırın.

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

  • az --versionAzure CLI sürümünün 2,4 veya üzeri olduğunu denetlemek için ' i çalıştırın.

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

Yerel işlev projesi oluşturma

Azure Işlevlerinde bir işlev projesi, her birinin belirli bir tetikleyiciye yanıt verdiği bir veya daha fazla bağımsız işlev için bir kapsayıcıdır. Projedeki tüm işlevler aynı yerel ve barındırma yapılandırmalarına sahiptir. Bu bölümde, tek bir işlev içeren bir işlev projesi oluşturursunuz.

  1. func initBelirtilen çalışma zamanına sahip Localfunctionproj adlı klasörde bir işlevler projesi oluşturmak için komutu aşağıdaki gibi çalıştırın:

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

    cd LocalFunctionProj
    

    Bu klasör, yerel. Settings. JSON ve Host. JSONadlı yapılandırma dosyaları dahil olmak üzere, proje için çeşitli dosyaları içerir. Local. Settings. JSON , Azure 'dan indirilen gizli dizileri içerebildiğinden, dosya, . gitignore dosyasında varsayılan olarak kaynak denetiminden çıkarılır.

  3. Aşağıdaki komutu kullanarak, --name bağımsız değişkenin işlevinizin (HttpExample) benzersiz adı olduğu ve --template bağımsız değişkeninin işlevin TETIKLEYICISINI (http) belirttiği, projenize bir işlev ekleyin.

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

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

Seçim Dosya içeriğini inceleyin

İsterseniz, işlevi yerel olarak çalıştırmayı atlayıp dosya içeriğini daha sonra incelemenizi sağlayabilirsiniz.

HttpExample. cs

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

Httpexample. cs , Run değişkende istek verilerini alan bir yöntem içerir req , bu da tetikleme davranışını tanımlayan Httptriggerattribute ile donatılmış bir HttpRequest 'dir.

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, bir Okobjectresult (200) veya Badrequestobjectresult (400) olarak bir yanıt Iletisi döndüren bir ActionResult .

Daha fazla bilgi için bkz. Azure IŞLEVLERI http Tetikleyicileri ve bağlamaları.

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

  1. Yerel Azure Işlevleri çalışma zamanı konağını Localfunctionproj klasöründen başlatarak işlevinizi çalıştırın:

    func start
    

    Çıktını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ünmezse, büyük olasılıkla ana bilgisayarı projenin kök klasörü dışından başlatmış olursunuz. Bu durumda, + Konağı durdurmak için CTRL C 'yi kullanın, projenin kök klasörüne gidin ve önceki komutu yeniden çalıştırın.

  2. HttpExampleİşlevinizin URL 'sini bu çıktıdan tarayıcıya kopyalayın:

    İşlev URL 'SI için sorgu dizesini ekleyerek ?name=<YOUR_NAME> tam URL 'yi yapın http://localhost:7071/api/HttpExample?name=Functions . Tarayıcı, sorgu dizesi değerini yankılayan bir yanıt iletisi görüntülemelidir. Projenizi başlattığınız Terminal Ayrıca, istek yaptığınız sürece günlük çıktısını gösterir.

  3. İşiniz bittiğinde CTRL + C ' yi kullanın ve y işlevler ana bilgisayarını durdurmayı seçin.

İşlevin destek azure kaynaklarını oluşturma

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

  • İlgili kaynaklar içinmantıksal bir kapsayıcı olan kaynak grubu.
  • İşlev Depolama durumve diğer bilgileri korumak için kullanılan bir hesaptır.
  • İş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önetimi, dağıtımı ve paylaşımı için işlevleri mantıksal bir birim olarak gruplamanızı sağlar.

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

  1. Henüz bunu yapmamışsanız Azure'da oturum açma:

    az login
    

    az login komutu sizi Azure hesabınızla imzalar.

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

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

    az group create komutu bir kaynak grubu oluşturur. Yukarıdaki komutta, <REGION> az account list-locations komutundan döndürülen kullanılabilir bölge kodunu kullanarak yerine size yakın bir bölgeyi yazın.

  3. Kaynak grubu ve bölgenize 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 yerine size uygun <STORAGE_NAME> olan ve Azure'da benzersiz olan bir adla Depolama. Adlar üç ile 24 karakter arasında sayı ve yalnızca küçük harf içermelidir. Standard_LRS, İşlevler tarafından desteklenen genel amaçlı bir hesap belirtir.

  1. Azure 'da işlev uygulaması 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ı oluşturur.

    Not

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

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

    Bu komut, burada yaptığınız kullanım miktarı için ücretsiz olan Azure Işlevleri tüketim planıaltında, belirtilen dil çalışma zamanında çalışan bir işlev uygulaması oluşturur. bu komut ayrıca, aynı kaynak grubunda, işlev uygulamanızı izleyebilmeniz ve günlükleri görüntüleyebileceğiniz ilişkili bir Azure Application Insights örneğini sağlar. Daha fazla bilgi için bkz. Azure Işlevlerini izleme. Örnek, siz etkinleştirene kadar hiçbir maliyet vermez.

İşlev projesini Azure 'a dağıtma

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

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

func azure functionapp publish <APP_NAME>

Yayımla komutu aşağıdaki çıktıya benzer sonuçları gösterir (basitlik için kesildi):

...

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

Azure 'da işlevi çağırma

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

Yayımla komutunun çıktısında gösterilen tüm ÇAĞıRMA URL 'sini, sorgu parametresini ekleyerek bir tarayıcı adres çubuğuna kopyalayın ?name=Functions . Bu URL 'ye gittiğinizde, işlevi yerel olarak çalıştırdığınızda tarayıcı benzer bir çıktı görüntülemelidir.

Neredeyse gerçek zamanlı akış günlüklerinigö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. Azure 'da işlev yürütmenin ayrıntılı günlüğü terminalde gösterilir.

Kaynakları temizleme

Bir sonraki adımla devam ederseniz ve bir Azure depolama kuyruğu çıktı bağlaması eklerseniz, daha önce yapmış olduğunuz yerde oluşturacağınız sürece tüm kaynaklarınızı saklayın.

Aksi takdirde, daha fazla maliyet ödemeden kaçınmak 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