Aracılığıyla paylaş


Visual Studio ile Azure İşlevleri geliştirme

Visual Studio, C# sınıf kitaplığı işlevlerini Azure'a geliştirme, test etme ve dağıtmanın bir yolunu sağlar. Bu deneyim Azure İşlevleri ile ilk deneyiminizse bkz. Azure İşlevlerine genel bakış.

Hemen başlamak için Visual Studio için İşlevler hızlı başlangıcını tamamlayın.

Bu makalede, C# sınıf kitaplığı işlevleri geliştirmek ve bunları Azure'da yayımlamak için Visual Studio'yu kullanma hakkında ayrıntılı bilgiler sağlanır. C# sınıf kitaplığı işlevlerini geliştirmeye yönelik iki model vardır: yalıtılmış çalışan modeli ve işlem içi model.

Bu makalenin yalıtılmış çalışan modeli sürümünü okuyorsunuz. Makalenin üst kısmında tercih ettiğiniz modeli seçebilirsiniz.

Bu makalenin işlem içi model sürümünü okuyorsunuz. Makalenin üst kısmında tercih ettiğiniz modeli seçebilirsiniz.

Aksi belirtilmediği sürece, gösterilen yordamlar ve örnekler Visual Studio 2022 içindir. Visual Studio 2022 sürümleri hakkında daha fazla bilgi için sürüm notlarına veya önizleme sürüm notlarına bakın.

Önkoşullar

  • Azure geliştirme iş yükü de dahil olmak üzere Visual Studio 2022.

  • Azure Depolama hesabı gibi ihtiyacınız olan diğer kaynaklar yayımlama işlemi sırasında aboneliğinizde oluşturulur.

  • Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.

Azure İşlevleri projesi oluşturma

Visual Studio'daki Azure İşlevleri proje şablonu, Azure'daki bir işlev uygulamasına yayımlayabileceğiniz bir C# sınıf kitaplığı projesi oluşturur. İşlevleri daha kolay yönetim, dağıtım, ölçeklendirme ve kaynakların paylaşımı için mantıksal birim olarak gruplandırmak için işlev uygulamasını kullanabilirsiniz.

  1. Visual Studio menüsünden Dosya>> seçin.

  2. Yeni proje oluştur iletişim kutusunda arama kutusuna işlevler yazın, Azure İşlevleri şablonunu seçin ve ardından İleri'yi seçin.

  3. Yeni projenizi yapılandırın iletişim kutusunda, Proje adı için projeniz için bir ad girin ve İleri'yi seçin. İşlev uygulamasının adı, bir C# ad alanı olarak geçerli olmalıdır; bu nedenle alt çizgi, kısa çizgi veya alfasayısal olmayan herhangi bir karakter kullanmayın.

  4. Ek bilgiler iletişim kutusunda, aşağıdaki tabloda listelenen eylemleri gerçekleştirin:

    Ayar Eylem Açıklama
    İşlevler çalışanı .NET 8.0 Yalıtılmış (Uzun Süreli Destek) seçeneğini belirleyin. Visual Studio yalıtılmış bir işlemde çalışan bir işlev projesi oluşturur. Yalıtılmış çalışan işlemi, uzun vadeli destek (LTS) sunmayan diğer .NET ve .NET Framework sürümlerini de destekler. Daha fazla bilgi için bkz. Azure İşlevleri çalışma zamanı sürümlerine genel bakış.
    Function Http tetikleyicisi'ni seçin. Visual Studio, HTTP isteği tarafından tetiklenen bir işlev oluşturur.
    Çalışma zamanı depolama hesabı için Azurite kullanma (AzureWebJobsStorage) Bu onay kutusunu seçin. Azure'daki bir işlev uygulaması için depolama hesabı gerektiğinden, projenizi Azure'da yayımladığınızda bir uygulama atanır veya oluşturulur. HTTP tetikleyicisi Depolama hesabı bağlantı dizesi kullanmaz. Diğer tüm tetikleyici türleri için geçerli bir Depolama hesabı bağlantı dizesi gerekir.
    Yetkilendirme düzeyi Anonim'i seçin. Bu yetkilendirme ayarını kullandığınızda, herhangi bir istemci bir anahtar sağlamadan oluşturulan işlevi tetikleyebilir. Bu yapılandırma, yeni işlevinizi test etmenizi kolaylaştırır. Daha fazla bilgi için bkz . Yetkilendirme düzeyi.

    İşlevler çalışanı için yalıtılmış .NET sürümü gibi yapılandırılmış ayarları gösteren Visual Studio Ek bilgi iletişim kutusunun ekran görüntüsü.

    Ayar Eylem Açıklama
    İşlevler çalışanı .NET 8.0 İşlemde (Uzun Süreli Destek) seçeneğini belirleyin. Visual Studio, İşlevler çalışma zamanının 4.x sürümüyle işlem halinde çalışan bir işlev projesi oluşturur. Daha fazla bilgi için bkz. Azure İşlevleri çalışma zamanı sürümlerine genel bakış.
    Function Http tetikleyicisi'ni seçin. Visual Studio, HTTP isteği tarafından tetiklenen bir işlev oluşturur.
    Çalışma zamanı depolama hesabı için Azurite kullanma (AzureWebJobsStorage) Bu onay kutusunu seçin. Azure'daki bir işlev uygulaması için depolama hesabı gerektiğinden, projenizi Azure'da yayımladığınızda bir uygulama atanır veya oluşturulur. HTTP tetikleyicisi Depolama hesabı bağlantı dizesi kullanmaz. Diğer tüm tetikleyici türleri için geçerli bir Depolama hesabı bağlantı dizesi gerekir.
    Yetkilendirme düzeyi Anonim'i seçin Bu yetkilendirme ayarını kullandığınızda, herhangi bir istemci bir anahtar sağlamadan oluşturulan işlevi tetikleyebilir. Bu yapılandırma, yeni işlevinizi test etmenizi kolaylaştırır. Daha fazla bilgi için bkz . Yetkilendirme düzeyi.

    İşlevler çalışanı için işlem içi .NET sürümü gibi yapılandırılmış ayarları gösteren Visual Studio Ek bilgi iletişim kutusunun ekran görüntüsü.

    Yetkilendirme düzeyini Anonim olarak ayarladığınızdan emin olun. varsayılan İşlev düzeyini seçerseniz işlev uç noktanıza erişim isteklerinde işlev anahtarını sunmanız gerekir.

  5. İşlev projesini ve HTTP tetikleyici işlevini oluşturmak için Oluştur'u seçin.

İşlevler projesi oluşturduktan sonra proje şablonu bir C# projesi oluşturur, ve Microsoft.Azure.Functions.Worker NuGet paketlerini yükler Microsoft.Azure.Functions.Worker.Sdk ve hedef çerçeveyi ayarlar.

İşlevler projesi oluşturduktan sonra proje şablonu bir C# projesi oluşturur, NuGet paketini yükler Microsoft.NET.Sdk.Functions ve hedef çerçeveyi ayarlar.

Yeni proje aşağıdaki dosyalara sahiptir:

  • host.json: Bu dosya, İşlevler ana bilgisayarını yapılandırmanız için bir yol sağlar. Bu ayarlar hem yerel olarak hem de Azure'da çalışırken uygulanır. Daha fazla bilgi için bkz . host.json başvurusu.

  • local.settings.json: Bu dosya, işlevleri yerel olarak çalıştırdığınızda kullandığınız ayarları korur. Uygulamanız Azure'da çalıştırıldığında bu ayarlar kullanılmaz. Daha fazla bilgi için bkz . Yerel olarak uygulama ayarlarıyla çalışma.

    Önemli

    local.settings.json dosyası gizli diziler içerebileceğinden, dosyayı proje kaynak denetiminizden dışlamanız gerekir. Bu dosyanın Özellikler iletişim kutusunda Çıkış Dizinine Kopyala ayarının daha yeniyse Kopyala olarak ayarlandığından emin olun.

Daha fazla bilgi için yalıtılmış çalışan kılavuzundaki Proje yapısı bölümüne bakın.

Daha fazla bilgi için bkz . İşlevler sınıf kitaplığı projesi.

Uygulama ayarlarıyla yerel olarak çalışma

İşlev uygulamanız Azure'da çalıştığında, işlevlerinizin gerektirdiği ayarlar uygulama ayarlarında şifrelenmiş olarak depolanır. Yerel geliştirme sırasında, bu ayarlar Values dosyasındaki koleksiyona eklenir. local.settings.json dosyası, yerel geliştirme araçları tarafından kullanılan ayarları da depolar.

Projenizin Values dosyasındaki koleksiyondaki öğeler, işlev uygulamanızın Azure'daki uygulama ayarlarındaki öğeleri yansıtmaya yöneliktir.

Visual Studio, projeyi yayımladığınızda local.settings.json ayarları otomatik olarak karşıya yüklemez. Bu ayarların Azure'daki işlev uygulamanızda da mevcut olduğundan emin olmak için projenizi yayımladıktan sonra bunları karşıya yükleyin. Daha fazla bilgi için bkz . İşlev uygulaması ayarları. Koleksiyondaki ConnectionStrings değerler yayımlanmaz.

Kodunuz, işlev uygulaması ayarları değerlerini ortam değişkenleri olarak da okuyabilir. Daha fazla bilgi için bkz . Ortam değişkenleri.

Projeyi yerel geliştirme için yapılandırma

İşlevler çalışma zamanı dahili olarak bir Depolama hesabı kullanır. Geliştirme sırasında, bu iç hesap için geçerli bir Depolama hesabı veya Azurite öykünücüsü kullanabilirsiniz.

HTTP ve web kancaları dışındaki tüm tetikleyici türleri için Values.AzureWebJobsStorage dosyasında anahtarın değerini ayarlamanız gerekir:

  • Depolama hesabı için değeri depolama hesabınızın bağlantı dizesi olarak ayarlayın.
  • Öykünücü için değeri UseDevelopmentStorage=true olarak ayarlayın.

Öykünücüyü kullanıyorsanız, dağıtımdan önce bu ayarı gerçek bir depolama hesabı bağlantı dizesi olarak değiştirin. Daha fazla bilgi için bkz . Yerel depolama öykünücüsü.

Depolama hesabı bağlantı dizesini ayarlamak için aşağıdaki adımları izleyin:

  1. Azure portalında oturum açın ve depolama hesabınıza gidin.

  2. Güvenlik + ağ Erişim anahtarları'nı> seçin. anahtar1 altında Bağlantı Dizesi değerini kopyalayın.

  3. Visual Studio projenizde local.settings.json dosyasını açın. Anahtarın AzureWebJobsStorage değerini kopyaladığınız bağlantı dizesine ayarlayın.

  4. İşlevleriniz için gereken diğer bağlantılar için diziye Values benzersiz anahtarlar eklemek için önceki adımı yineleyin.

Projenize işlev ekleme

C# sınıf kitaplığı işlevlerinde, işlevlerin kullandığı bağlamalar koda öznitelikler uygulanarak tanımlanır. İşlev tetikleyicilerinizi sağlanan şablonlardan oluşturduğunuzda tetikleyici öznitelikleri sizin için uygulanır.

  1. Çözüm Gezgini'da proje düğümünüzü sağ tıklatın ve Yeni Azure İşlevi.

  2. Yeni Öğe Ekle iletişim kutusunda Azure İşlevi'ni ve ardından Ekle'yi seçin.

  3. Bir tetikleyici seçin ve gerekli bağlama özelliklerini ayarlayın. Depolama hizmeti tetikleyicisini seçerseniz ve bağlantıyı yapılandırmak istiyorsanız, tetikleyici bağlantısını yapılandırma onay kutusunu seçin. Aşağıdaki örnekte Kuyruk Depolama tetikleyici işlevi oluşturma ayarları gösterilmektedir.

    Bir kuyruk tetikleyicisi için bağlantı dizesi adı QueueStorage ve kuyruk adı myqueue-items olarak ayarlandığı Yeni Azure İşlevi iletişim kutusunun ekran görüntüsü.

  4. Add (Ekle) seçeneğini belirleyin. Önceki adımda depolama bağlantısı yapılandırma onay kutusunu seçerseniz, Bağımlılıklara bağlan sayfası görüntülenir. Bir Azurite depolama öykünücüsü veya Azure Depolama'yı seçin ve ardından İleri'yi seçin.

    • Bir Azurite depolama öykünücüsü seçerseniz, Azurite depolama öykünücüsüne Bağlan sayfası görüntülenir. Aşağıdaki adımları uygulayın:
      1. sonrakiseçin.
      2. Değişikliklerin özeti sayfasında Son'u seçin. Visual Studio bağımlılığı yapılandırarak tetikleyici sınıfını oluşturur.
    • Azure Depolama'yı seçerseniz Azure Depolama'ya bağlan sayfası görüntülenir. Aşağıdaki adımları uygulayın:
      1. Bir depolama hesabı seçin ve ardından İleri'yi seçin. Visual Studio, Azure hesabınıza bağlanmaya ve bir uç nokta almaya çalışır.
      2. sonrakiseçin.
      3. Değişikliklerin özeti sayfasında Son'u seçin. Visual Studio bağımlılığı yapılandırarak tetikleyici sınıfını oluşturur.

    Bu tetikleyici örneği, adlı QueueStoragebir anahtarla depolama bağlantısı için bir uygulama ayarı kullanır. local.settings.json dosyasında depolanan bu anahtar, ya Azurite öykünücüsüne ya da bir depolama hesabına başvurur.

  5. Yeni eklenen sınıfı inceleyin. Örneğin, aşağıdaki C# sınıfı temel bir Kuyruk Depolama tetikleyici işlevini temsil eder:

    Bir Run() yöntemi Function ile ilişkilendirilmiş olarak kabul edilir. Bu öznitelik, yönteminin işlevin giriş noktası olduğunu gösterir.

    using System;
    using Azure.Storage.Queues.Models;
    using Microsoft.Azure.Functions.Worker;
    using Microsoft.Extensions.Logging;
    
    namespace Company.Function;
    
    public class QueueTriggerCSharp
    {
        private readonly ILogger<QueueTriggerCSharp> _logger;
    
        public QueueTriggerCSharp(ILogger<QueueTriggerCSharp> logger)
        {
            _logger = logger;
        }
    
        [Function(nameof(QueueTriggerCSharp))]
        public void Run([QueueTrigger("PathValue", Connection = "ConnectionValue")] QueueMessage message)
        {
            _logger.LogInformation("C# Queue trigger function processed: {messageText}", message.MessageText);
        }
    }
    

    Statik Run() yöntemi FunctionName ile ilişkilendirilir. Bu öznitelik, yönteminin işlevin giriş noktası olduğunu gösterir.

    using System;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Extensions.Logging;
    
    namespace Company.Function
    {
        public class QueueTriggerCSharp
        {
            [FunctionName("QueueTriggerCSharp")]
            public void Run([QueueTrigger("PathValue", Connection = "ConnectionValue")]string myQueueItem, ILogger log)
            {
                log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
            }
        }
    }
    

Giriş noktası yöntemine sağlanan her bağlama parametresine bağlamaya özgü bir öznitelik uygulanır. özniteliği bağlama bilgilerini parametre olarak alır.

Yukarıdaki kodda, ilk parametrenin QueueTrigger bir Kuyruk Depolama tetikleyicisi işlevini gösteren bir özniteliği uygulanmış. Kuyruk adı ve bağlantı dizesi ayar adı özniteliğine QueueTrigger parametre olarak geçirilir. Sınıfınızda:

  • Kuyruk adı parametresi, tetikleyiciyi oluşturmak için önceki bir adımda kullandığınız kuyruğun adıyla eşleşmelidir, örneğin myqueue-items.
  • Bağlantı dizesi ayarı adı, tetikleyiciyi oluşturmak için önceki bir adımda kullandığınız adla (gibi QueueStorage) eşleşmelidir.

Daha fazla bilgi için bkz. Azure İşlevleri için Azure Kuyruk depolama tetikleyicisi.

İşlev uygulaması projenize daha fazla işlev eklemek için önceki yordamı kullanın. Projedeki her işlevin farklı bir tetikleyicisi olabilir, ancak bir işlevin tam olarak bir tetikleyicisi olmalıdır. Daha fazla bilgi için bkz. Azure İşlevleri tetikleyicileri ve bağlamaları.

Bağlama ekleme

Tetikleyicilerde olduğu gibi, giriş ve çıkış bağlamaları işlevinize bağlama öznitelikleri olarak eklenir. bir işleve bağlama eklemek için aşağıdaki adımları izleyin:

  1. Projeyi yerel geliştirme için yapılandırdığınızdan emin olun.

  2. Her bağlama için uygun NuGet uzantı paketini ekleyin. Bağlamaya özgü NuGet paketi gereksinimleri için bağlamanın başvuru makalesine bakın. Örneğin, Azure Event Hubs tetikleyicisinin paket gereksinimleri için bkz. Azure İşlevleri için Azure Event Hubs tetikleyicisi ve bağlamaları.

  3. Belirli bir paketi yüklemek için Paket Yöneticisi Konsolu'nda aşağıdaki komutu kullanın:

    Install-Package Microsoft.Azure.Functions.Worker.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
    
    Install-Package Microsoft.Azure.WebJobs.Extensions.<BINDING_TYPE> -Version <TARGET_VERSION>
    

    Bu kodda, <BINDING_TYPE> öğesini bağlama uzantısının belirli bir adıyla ve <TARGET_VERSION> öğesini 4.0.0 gibi paketin belirli bir sürümüyle değiştirin. Geçerli sürümler, NuGet.org'deki tek tek paket sayfalarında listelenir.

  4. Bağlamanın ihtiyaç duyduğu uygulama ayarları varsa, bunları Values yerel ayar dosyasındaki koleksiyona ekleyin.

    İşlev, yerel olarak çalıştırıldığında bu değerleri kullanır. İşlev Azure'daki işlev uygulamasında çalıştırıldığında işlev uygulaması ayarlarını kullanır. Visual Studio, yerel ayarları Azure'da yayımlamayı kolaylaştırır.

  5. Yöntem imzasına uygun bağlama özniteliğini ekleyin. Aşağıdaki kodda bir kuyruk iletisi, Run işlevini tetikler. Çıkış bağlaması daha sonra farklı bir kuyrukta aynı metinle yeni bir kuyruk iletisi oluşturur.

     public class QueueTrigger
    {
        private readonly ILogger _logger;
    
        public QueueTrigger(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<QueueTrigger>();
        }
    
        [Function("CopyQueueMessage")]
        [QueueOutput("myqueue-items-destination", Connection = "QueueStorage")]
        public string Run([QueueTrigger("myqueue-items-source", Connection = "QueueStorage")] string myQueueItem)
        {
            _logger.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
            return myQueueItem;
        }
    }
    

    QueueOutput özniteliği yöntemindeki bağlamayı tanımlar. Birden çok çıkış bağlaması için, bunun yerine bu özniteliği döndürülen nesnenin dize özelliğine yerleştirirsiniz. Daha fazla bilgi için bkz . Birden çok çıkış bağlaması.

    public static class SimpleExampleWithOutput
    {
        [FunctionName("CopyQueueMessage")]
        public static void Run(
            [QueueTrigger("myqueue-items-source", Connection = "QueueStorage")] string myQueueItem, 
            [Queue("myqueue-items-destination", Connection = "QueueStorage")] out string myQueueItemCopy,
            ILogger log)
        {
            log.LogInformation($"CopyQueueMessage function processed: {myQueueItem}");
            myQueueItemCopy = myQueueItem;
        }
    }
    

    Queue parametresindeki out özniteliği çıkış bağlamasını tanımlar.

    Kuyruk Depolama Bağlantısı QueueStorage ayarından elde edilir. Daha fazla bilgi için, belirli bağlama için başvuru makalesine bakın.

İşlevler tarafından desteklenen bağlamaların tam listesi için bkz . Desteklenen bağlamalar. Bu senaryonun daha eksiksiz bir örneği için bkz. Visual Studio kullanarak işlevleri Azure Depolama'ya bağlama.

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

Yerel geliştirme bilgisayarınızda İşlevler projelerini çalıştırmak için Azure İşlevleri Temel Araçları'nı kullanabilirsiniz. İşlevler projesinde hata ayıklamak için F5'i seçtiğinizde, yerel İşlevler ana bilgisayarı (func.exe) yerel bir bağlantı noktasında (genellikle 7071) dinlemeye başlar. Çağrılabilen tüm işlev uç noktaları çıkışa yazılır ve işlevlerinizi test etmek için bu uç noktaları kullanabilirsiniz. Daha fazla bilgi için bkz. Çekirdek Araçları kullanarak Azure İşlevlerini yerel olarak geliştirme. Visual Studio'dan ilk kez bir işlev başlattığınızda bu araçları yüklemeniz istenir.

Önemli

Core Tools'un 4.0.6517 sürümünden başlayarak, işlem içi model projelerinin 4.5.0 veya sonraki bir sürümüne başvurması Microsoft.NET.Sdk.Functionsgerekir. Önceki bir sürümü kullanıyorsanız, func start komut bir hata oluşturur.

İşlevinizi Visual Studio'da hata ayıklama modunda başlatmak için aşağıdaki adımları izleyin:

  1. F5'i seçin. İstenirse Visual Studio'dan Azure İşlevleri Temel Araçları'nı indirme ve yükleme isteğini kabul edin. Araçların HTTP isteklerini işleyebilmesi için bir güvenlik duvarı özel durumunu da açmanız gerekebilir.

  2. Proje çalıştırıldığında, kodunuzu dağıtılan bir işlevi test ettiğiniz gibi test edin.

    Visual Studio'yu hata ayıklama modunda çalıştırdığınızda kesme noktaları beklendiği gibi isabet alır.

Visual Studio kullanan daha ayrıntılı bir test senaryosu için bu makalenin devamında yer alan Test işlevleri bölümüne bakın.

Azure'a Yayımlama

İşlevler projenizi Azure'da yayımladığınızda Visual Studio, proje dosyalarını dağıtmak için zip dağıtımını kullanır. Mümkün olduğunda, projenin dağıtım (.zip) paketinde çalışması için Paket dosyasından çalıştır'ı da seçmeniz gerekir. Daha fazla bilgi için bkz . Azure'da bir paket dosyasından işlevlerinizi çalıştırma.

Web Dağıtımı (msdeploy) kullanarak İşlevler'e dağıtım yapmayın.

Projenizi Azure'daki bir işlev uygulamasında yayımlamak için aşağıdaki adımları kullanın:

  1. Çözüm Gezgini'nde projeye sağ tıklayın ve yayımla'yı seçin.

  2. Yayımla sayfasında aşağıdaki seçimleri yapın:

    • Hedef'teAzure'ı ve ardından İleri'yi seçin.
    • Belirli hedefteAzure İşlev Uygulaması'nı seçin ve ardından İleri'yi seçin.
    • İşlevler örneğindeYeni oluştur'u seçin.

    Yayımla sayfasının ekran görüntüsü. İşlevler örneği bölümünde bir kaynak grubu görünür ve Yeni oluştur vurgulanır.

  3. Aşağıdaki tabloda belirtilen değerleri kullanarak yeni bir örnek oluşturun:

    Ayar Değer Açıklama
    Adı Genel olarak benzersiz bir ad Adın yeni işlev uygulamanızı benzersiz bir şekilde tanımlaması gerekir. Önerilen adı kabul edin veya yeni bir ad girin. Şu karakterler geçerlidir: a-z, 0-9ve -.
    Abonelik adı Aboneliğinizin adı İşlev uygulaması bir Azure aboneliğinde oluşturulur. Varsayılan aboneliği kabul edin veya listeden farklı bir abonelik seçin.
    Kaynak grubu Kaynak grubunuzun adı İşlev uygulaması bir kaynak grubunda oluşturulur. Yeni bir kaynak grubu oluşturmak için Yeni'yi seçin. Listeden var olan bir kaynak grubunu da seçebilirsiniz.
    Plan Türü Esnek Tüketim Projenizi Flex Consumption planında çalışan bir işlev uygulamasında yayımladığınızda, yalnızca işlev uygulamanızın yürütülmesi için ödemeniz gerekebilir. Diğer barındırma planları daha yüksek maliyetlere neden olabilir.
    ÖNEMLİ:
    Esnek Tüketim planı oluştururken, iletişim kutusuyla ilgili bir sorunu gidermek için önce Uygulama hizmeti planı seçmeniz ve ardından Flex Tüketim'i yeniden seçmeniz gerekir.
    İşletim Sistemi Linux Flex Consumption planı şu anda Linux gerektirir.
    Konum App Service'in konumu Esnek Tüketim planı tarafından desteklenen bir Azure bölgesinde bir konum seçin. Desteklenmeyen bir bölge seçildiğinde Oluştur düğmesi gri görünür.
    Örnek bellek boyutu 2048 Uygulamanın çalıştırıldığı sanal makine örneklerinin bellek boyutu Esnek Tüketim planına özgüdür.
    Azure Depolama Genel amaçlı depolama hesabı İşlevler çalışma zamanı bir Depolama hesabı gerektirir. Genel amaçlı bir depolama hesabı yapılandırmak için Yeni'yi seçin. Depolama hesabı gereksinimlerini karşılayan mevcut bir hesabı da kullanabilirsiniz.
    Application Insights Application Insights örneği İşlev uygulamanız için Application Insights tümleştirmesini açmanız gerekir. Yeni bir örnekte veya mevcut log analytics çalışma alanında yeni bir örnek oluşturmak için Yeni'yi seçin. Var olan bir örneği de kullanabilirsiniz.

    'Function App Yeni Oluştur' iletişim kutusunun ekran görüntüsü. Ad, abonelik, kaynak grubu, plan ve diğer ayarlar için alanlar doldurulmuş durumda.

  4. Azure'da bir işlev uygulaması ve ilgili kaynakları oluşturmak için Oluştur'u seçin. Kaynak oluşturma durumu pencerenin sol alt köşesinde gösterilir.

  5. Bitirseçin. Yayımlama profili oluşturma ilerleme durumu penceresi görüntülenir. Profil oluşturulduğunda Kapat'ı seçin.

  6. Yayımla profili sayfasında Yayımla'yı seçerek proje dosyalarınızı içeren paketi Azure'daki yeni işlev uygulamanıza dağıtın.

    Dağıtım tamamlandığında, Azure'daki işlev uygulamasının kök URL'si yayımlama profili sayfasında gösterilir.

  7. Yayımlama profili sayfasında Barındırma bölümüne gidin. Üç noktayı (...) seçin ve ardından Azure portalında aç seçeneğini seçin. Yeni işlev uygulaması Azure kaynağı Azure portalında açılır.

    Yayımlama profili sayfasının ekran görüntüsü. Barındırma bölümünde, üç nokta kısayol menüsü açık ve Azure Portal'da Açık vurgulanmış.

İşlev uygulaması ayarları

Projenizi yayımladığınızda Visual Studio uygulama ayarlarını otomatik olarak karşıya yüklemez. local.settings.json dosyasına ayarlar eklerseniz, bunları Azure'daki işlev uygulamasına da eklemeniz gerekir.

Gerekli ayarları Azure'daki işlev uygulamanıza yüklemenin en kolay yolu bunları Visual Studio'da yönetmektir. Yayımlama profili sayfasında Barındırma bölümüne gidin. İlk önce üç nokta simgesini (...) ve ardından Azure App Service ayarlarını yönet seçeneğini seçin.

Yayımlama profili sayfasının Barındırma bölümü ekran görüntüsü. Üç nokta simgesiyle kısayol menüsü açık ve 'Azure App Service ayarlarını yönet' seçeneği vurgulanmış durumda.

Seçimi yaptığınızda, işlev uygulaması için Uygulama ayarları iletişim kutusu açılır. Uygulama ayarları eklemek veya mevcut ayarları değiştirmek için bu iletişim kutusunu kullanabilirsiniz.

Çeşitli ayarlar için yerel ve uzak değerleri ve değer ekleme ve düzenleme denetimlerini gösteren Uygulama ayarları iletişim kutusunun ekran görüntüsü.

Her ayar için Yerel değeri local.settings.json dosyasındaki değerdir ve Uzak değeri de Azure'daki işlev uygulamasındaki değerdir.

  • Uygulama ayarı oluşturmak için Ayar ekle'yi seçin.
  • Yerel alanından Uzak alanına bir ayar değeri kopyalamak için Yerel'den değer ekle'yi seçin.

Bekleyen değişiklikler, Tamam'ı seçtiğinizde yerel ayarlar dosyasına ve işlev uygulamasına yazılır.

Not

Varsayılan olarak ,local.settings.json dosyası kaynak denetiminde denetlenmiyor. Sonuç olarak, kaynak denetiminden bir yerel İşlevler projesini klonlarsanız, projenin birlocal.settings.json dosyası yoktur. Uygulama ayarları iletişim kutusunun beklendiği gibi çalışması için proje kökünde local.settings.json dosyasını el ile oluşturmanız gerekir.

Uygulama ayarlarını şu diğer yollardan biriyle de yönetebilirsiniz:

Uzaktan hata ayıklama

İşlev uygulamanızda uzaktan hata ayıklamak için projenizin hata ayıklama yapılandırmasını yayımlamanız gerekir. Ayrıca Azure'daki işlev uygulamanızda uzaktan hata ayıklamayı da açmanız gerekir.

Bu bölümde, işlev uygulamanızda bir hata ayıklama yapılandırmasının yayımlandığı varsayılır.

Uzaktan hata ayıklamayla ilgili dikkat edilmesi gerekenler

  • Bir üretim hizmetinde uzaktan hata ayıklama önerilmez.
  • Uzaktan hata ayıklamayı kullanmak için işlev uygulamanızı bir Premium veya App Service planında barındırmanız gerekir.
  • Uzaktan hata ayıklama şu anda yalnızca C# uygulamanızı Windows'da çalıştırırken desteklenir.
  • Visual Studio'da Yalnızca Kodum özelliğini açtıysanız kapatın. Yönergeler için bkz . Yalnızca Benim Kodum'un etkinleştirilmesi veya devre dışı bırakılması.
  • Uzaktan hata ayıklama kullanırken kesme noktalarında uzun duraklardan kaçının. Bir işlem birkaç dakikadan uzun süre durdurulduğunda, Azure bunu yanıt vermeyen bir işlem olarak ele alır ve kapatır.
  • Hata ayıklarken, sunucu Visual Studio'ya veri gönderir ve bu da bant genişliği ücretlerini etkileyebilir. Bant genişliği oranları hakkında bilgi için bkz . Fiyatlandırma hesaplayıcısı.
  • İşlev uygulamanızda uzaktan hata ayıklama 48 saat sonra otomatik olarak kapatılır. Bu noktadan sonra, uzaktan hata ayıklamayı yeniden açmanız gerekir.

Hata ayıklayıcıyı ekleme

Yalıtılmış bir çalışan işlemi uygulamasında hata ayıklarken, şu anda uzak hata ayıklayıcıyı ayrı bir .NET işlemine eklemeniz gerekir. Diğer birkaç yapılandırma adımı da gereklidir.

İşlevler konağından ayrı bir işlemde çalışan bir işlev uygulamasına uzak hata ayıklayıcı eklemek için aşağıdaki adımları izleyin:

  1. Yayımlama profili sayfasında Barındırma bölümüne gidin. Önce üç nokta'yı (...) seçin, ardından Hata ayıklayıcıyı bağla seçin.

    Visual Studio, işlev uygulamanıza bağlanır ve önceden açık değilse uzaktan hata ayıklamayı açar.

    Not

    Uzak hata ayıklayıcı konak işlemine bağlanamadığından bir hata iletisi görüntülenebilir. Her durumda, yerel hata ayıklayıcı kesme noktalarınıza erişemez veya değişkenleri incelemeniz veya kodda adım adım ilerleyebilmeniz için bir yol sağlayamaz.

  2. Visual Studio Hata Ayıklama menüsünde İşleme Ekle'yi seçin.

  3. İşleme Ekle iletişim kutusunda aşağıdaki adımları izleyin:

    1. Bağlantı türü'nin yanında Microsoft Azure App Services'i seçin.
    2. Bağlantı hedefi yanında Bul seçin.
  4. Azure İşleme Ekle iletişim kutusunda işlev uygulamanızı arayıp seçin ve ardından Tamam'ı seçin.

  5. İstenirse, yerel güvenlik duvarınız üzerinden Visual Studio erişimine izin verin.

  6. İşleme Ekle iletişim kutusuna geri dönüp Tüm kullanıcılar için işlemleri göster'i seçin. dotnet.exe'ı ve ardından Ekle'yi seçin.

    İşleme Ekle iletişim kutusunun ekran görüntüsü. Bağlantı türü Microsoft Azure App Services'tır. İşlem tablosunda dotnet.exe seçilir.

İşlem tamamlandığında, yalıtılmış bir çalışan işleminde çalışan C# sınıf kitaplığı kodunuza bağlanırsınız. Bu noktada işlev uygulamanızın hatalarını normal şekilde ayıklayabilirsiniz.

İşlevler konağıyla işlem halinde çalışan bir işlev uygulamasına uzak hata ayıklayıcı eklemek için aşağıdaki adımları izleyin.

Yayımlama profili sayfasında Barındırma bölümüne gidin. Önce üç nokta'yı (...) seçin, ardından Hata ayıklayıcıyı bağla seçin.

Visual Studio, işlev uygulamanıza bağlanır ve önceden açık değilse uzaktan hata ayıklamayı açar. Ayrıca hata ayıklayıcıyı bulur ve uygulamanın konak işlemine ekler. Bu noktada işlev uygulamanızın hatalarını normal şekilde ayıklayabilirsiniz.

Hata ayıklamayı bitirdiğinizde , uzaktan hata ayıklamayı kapatmanız gerekir.

Uzaktan hata ayıklamayı kapatma

Kodunuzun uzaktan hata ayıklamasını tamamladıktan sonra Azure portalında uzaktan hata ayıklamayı kapatmanız gerekir. Unutmanız durumunda uzaktan hata ayıklama 48 saat sonra otomatik olarak kapatılır.

  1. Yayımlama profili sayfasında Barındırma bölümüne gidin. Üç noktayı (...) seçin ve ardından Azure portalında aç seçeneğini seçin. Azure portalı, projenizin dağıtılacağı işlev uygulamasında açılır.

  2. İşlev uygulamasında Ayarlar>Yapılandırması'nı seçin ve genel ayarlar sekmesine gidin. Uzaktan hata ayıklama'nın yanında Kapalı'yı seçin. Kaydet'i ve ardından Devam'ı seçin.

İşlev uygulaması yeniden başlatıldıktan sonra artık uzak işlemlerinize uzaktan bağlanamayasınız. Visual Studio dışında uzaktan hata ayıklamayı açmak için Azure portalında aynı sekmeyi kullanabilirsiniz.

Monitör işlevleri

İşlevlerinizi izlemenin önerilen yolu, işlev uygulamanızı Application Insights ile tümleştirmektir. Visual Studio yayımlama sırasında işlev uygulamanızı oluştururken bu tümleştirmeyi açmanız gerekir.

Yayımlama sırasında bir nedenden dolayı tümleştirme ayarlanmadıysa, Azure'daki işlev uygulamanız için Application Insights tümleştirmesini etkinleştirmeniz gerekir.

Application Insights'i izleme için kullanma hakkında daha fazla bilgi için detaylı bilgiye Azure İşlevleri'nde yürütmeleri izleme sayfasından ulaşabilirsiniz.

Test işlevleri

Bu bölümde, .NET için açık kaynak birim test aracı olan xUnit kullanarak test yapabileceğiniz bir C# işlem içi model projesinin nasıl oluşturulacağı açıklanmaktadır.

Adım 1: Kurulum

Testlerinizi desteklemek için gereken uygulama projesi ve işlevleri de dahil olmak üzere ortamı yapılandırmak için şu adımları izleyin:

  1. Visual Studio'da İşlevler adlı bir Azure İşlevleri projesi oluşturun.

  2. Şablondan bir HTTP işlevi oluşturun:

    1. Çözüm Gezgini'ndeİşlevler projesine sağ tıklayın ve ardındanYeni Azure İşlevi Ekle'yi> seçin.
    2. Yeni Öğe Ekle iletişim kutusunda Azure İşlevi'ni ve ardından Ekle'yi seçin.
    3. Http tetikleyicisi'ni ve ardından Ekle'yi seçin.
    4. Yeni MyHttpTrigger sınıfını yeniden adlandırın.
  3. Şablondan bir zamanlayıcı işlevi oluşturun:

    1. Çözüm Gezgini'ndeİşlevler projesine sağ tıklayın ve ardındanYeni Azure İşlevi Ekle'yi> seçin.
    2. Yeni Öğe Ekle iletişim kutusunda Azure İşlevi'ni ve ardından Ekle'yi seçin.
    3. Zamanlayıcı tetikleyicisi'ne ve ardından Ekle'ye tıklayın.
    4. Yeni MyTimerTrigger sınıfını yeniden adlandırın.
  4. Çözümde bir xUnit Test uygulaması oluşturun:

    1. Çözüm Gezgini'ndeİşlevler projenizi içeren çözüme sağ tıklayın ve ardındanYeni Proje Ekle'yi> seçin.
    2. xUnit Test Projesi şablonunu ve ardından İleri'yi seçin.
    3. Projeye Functions.Tests adını verin.
  5. Functions.Tests projesinden varsayılan test dosyalarını kaldırın.

  6. Test uygulamasından Microsoft.AspNetCore.Mvc'ye başvuru eklemek için NuGet kullanın. Paket Yöneticisi Konsolu'nu kullanabilir veya aşağıdaki adımları uygulayabilirsiniz:

    1. Çözüm Gezgini'ndeFunctions.Tests projesine sağ tıklayın ve ardından NuGet Paketlerini Yönet'i seçin.
    2. Microsoft.AspNetCore.Mvc'yi arayın ve yükleyin.
  7. Functions.Tests uygulamasında Functions uygulamasına bir referans ekleyin:

    1. Çözüm Gezgini'ndeFunctions.Tests projesine sağ tıklayıpProje Başvurusu> seçin.
    2. İşlevler projesini ve ardından Tamam'ı seçin.

2. Adım: Test sınıfları oluşturma

Bu bölümde, otomatikleştirilmiş testleri çalıştırmak için kullandığınız sınıfları oluşturursunuz.

Her bir işlev, ileti günlüğünü işlemek için ILogger uygulamasını kabul eder. Bazı testlerde hiçbir ileti günlüğe kaydedilmez veya günlüğe kaydetmenin nasıl uygulandığı önemli değildir. Diğer testlerin, testin geçip geçmeyeceğini belirlemek için günlüğe kaydedilen iletileri değerlendirmesi gerekir.

  1. Functions.Tests projenizde adlı NullScope bir sınıf oluşturun ve aşağıdaki kodu ekleyin. Bu sınıf bir sahte kapsam sağlar. Sonraki bir adımda, bu kapsamı kullanan bir uygulaması ILogger oluşturacaksınız.

    using System;
    
    namespace Functions.Tests
    {
        public class NullScope : IDisposable
        {
            public static NullScope Instance { get; } = new NullScope();
    
            private NullScope() { }
    
            public void Dispose() { }
        }
    }
    
  2. Functions.Tests projenizde adlı ListLogger bir sınıf oluşturun ve aşağıdaki kodu ekleyin. Bu sınıf, test sırasında değerlendirilecek iletilerin iç listesini tutar. Gerekli ILogger arabirimini uygulamak için sınıf, NullScope sınıfının sahte kapsamını kullanır. Test senaryoları, sahte kapsamı ListLogger sınıfına geçirir.

    using Microsoft.Extensions.Logging;
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace Functions.Tests
    {
        public class ListLogger : ILogger
        {
            public IList<string> Logs;
    
            public IDisposable BeginScope<TState>(TState state) => NullScope.Instance;
    
            public bool IsEnabled(LogLevel logLevel) => false;
    
            public ListLogger()
            {
                this.Logs = new List<string>();
            }
    
            public void Log<TState>(LogLevel logLevel,
                                    EventId eventId,
                                    TState state,
                                    Exception exception,
                                    Func<TState, Exception, string> formatter)
            {
                string message = formatter(state, exception);
                this.Logs.Add(message);
            }
        }
    }
    

    ListLogger sınıfı, ILogger arabirimince gereğince aşağıdaki üyeleri uygular:

    • BeginScope: Kapsamlar, günlüklerinize bağlam ekler. Bu durumda, testin çalışmasını sağlamak için NullScope sınıfındaki statik örneğe işaret eder.
    • IsEnabled: bir varsayılan değer olarak false sağlanır.
    • Log: Bu yöntem, iletiyi biçimlendirmek için sağlanan formatter işlevi kullanır. Yöntemi daha sonra elde edilen metni koleksiyona Logs ekler.

    Koleksiyon Logs bir örneğidir List<string> ve oluşturucuda başlatılır.

  3. Functions.Tests projesinde LoggerTypes.cs adlı bir kod dosyası oluşturun ve aşağıdaki kodu ekleyin:

    namespace Functions.Tests
    {
        public enum LoggerTypes
        {
            Null,
            List
        }
    }
    

    Bu numaralandırma, testlerin kullandığı günlükçü türünü belirtir.

  4. Functions.Tests projesinde adlı TestFactory bir sınıf oluşturun ve aşağıdaki kodu ekleyin:

    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Http.Internal;
    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Logging.Abstractions;
    using Microsoft.Extensions.Primitives;
    using System.Collections.Generic;
    
    namespace Functions.Tests
    {
        public class TestFactory
        {
            public static IEnumerable<object[]> Data()
            {
                return new List<object[]>
                {
                    new object[] { "name", "Bernardo" },
                    new object[] { "name", "Ananya" },
                    new object[] { "name", "Vlad" }
    
                };
            }
    
            private static Dictionary<string, StringValues> CreateDictionary(string key, string value)
            {
                var qs = new Dictionary<string, StringValues>
                {
                    { key, value }
                };
                return qs;
            }
    
            public static HttpRequest CreateHttpRequest(string queryStringKey, string queryStringValue)
            {
                var context = new DefaultHttpContext();
                var request = context.Request;
                request.Query = new QueryCollection(CreateDictionary(queryStringKey, queryStringValue));
                return request;
            }
    
            public static ILogger CreateLogger(LoggerTypes type = LoggerTypes.Null)
            {
                ILogger logger;
    
                if (type == LoggerTypes.List)
                {
                    logger = new ListLogger();
                }
                else
                {
                    logger = NullLoggerFactory.Instance.CreateLogger("Null Logger");
                }
    
                return logger;
            }
        }
    }
    

    TestFactory sınıfı aşağıdaki üyeleri uygular:

    • Data: Bu özellik, örnek verilerin IEnumerable koleksiyonunu döndürür. Anahtar-değer çiftleri, sorgu dizesine geçirilen değerleri temsil eder.
    • CreateDictionary: Bu yöntem bağımsız değişken olarak bir anahtar-değer çifti kabul eder. Yeni bir Dictionary örneği döndürür, bu da QueryCollection'in bir örneğini oluşturmak ve sorgu dizesi değerlerini temsil etmek için kullanılır.
    • CreateHttpRequest: Bu yöntem, verilen sorgu dizesi parametreleriyle başlatılan bir HTTP isteği oluşturur.
    • CreateLogger: Bu yöntem, test için kullanılan bir ILogger implementasyonu döndürür. Uygulama ILogger , belirtilen günlükçü türüne bağlıdır. Bir liste türü belirtilirse, ListLogger örneği, testlerde değerlendirilebilir durumda olan günlüğe kaydedilen iletileri izler.
  5. Functions.Tests projesinde adlı FunctionsTests bir sınıf oluşturun ve aşağıdaki kodu ekleyin:

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;
    using Xunit;
    
    namespace Functions.Tests
    {
        public class FunctionsTests
        {
            private readonly ILogger logger = TestFactory.CreateLogger();
    
            [Fact]
            public async void Http_trigger_should_return_known_string()
            {
                var request = TestFactory.CreateHttpRequest("name", "Bernardo");
                var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger);
                Assert.Equal("Hello, Bernardo. This HTTP triggered function executed successfully.", response.Value);
            }
    
            [Theory]
            [MemberData(nameof(TestFactory.Data), MemberType = typeof(TestFactory))]
            public async void Http_trigger_should_return_known_string_from_member_data(string queryStringKey, string queryStringValue)
            {
                var request = TestFactory.CreateHttpRequest(queryStringKey, queryStringValue);
                var response = (OkObjectResult)await MyHttpTrigger.Run(request, logger);
                Assert.Equal($"Hello, {queryStringValue}. This HTTP triggered function executed successfully.", response.Value);
            }
    
            [Fact]
            public void Timer_should_log_message()
            {
                var logger = (ListLogger)TestFactory.CreateLogger(LoggerTypes.List);
                new MyTimerTrigger().Run(null, logger);
                var msg = logger.Logs[0];
                Assert.Contains("C# Timer trigger function executed at", msg);
            }
        }
    }
    

    Bu sınıf aşağıdaki üyeleri uygular:

    • Http_trigger_should_return_known_string: Bu test, http işlevine istek oluşturmak için sorgu dizesi değerini name=Bernardo kullanır. Bu test, beklenen yanıtın döndürüldüğünü denetler.
    • Http_trigger_should_return_string_from_member_data: Bu test, HTTP işlevine örnek veriler sağlamak için xUnit özniteliklerini kullanır.
    • Timer_should_log_message: Bu test, ListLogger bir örnek oluşturur ve bunu bir zamanlayıcı işlevine aktarır. İşlev çalıştıktan sonra, beklenen iletinin mevcut olup olmadığını kontrol etmek için günlük denetlenir.
  6. Testlerinizdeki uygulama ayarlarına erişmek için işlevinize sahte ortam değişkeni değerleri içeren bir uygulama IConfiguration.

3. Adım: Testleri çalıştırma

Testleri Visual Studio'da çalıştırmak içinTest Gezginini> seçin. Test Gezgini'ndeTüm Testleri Görünümde Çalıştır'ı> seçin.

Visual Studio'nun ekran görüntüsü. Test Gezgini beş testin geçtiğini gösterir. Çözüm Gezgini'nde functions ve functions.test projeleri görünür.

4. Adım: Testlerde hata ayıklama

Testlerde hata ayıklamak için testte bir kesme noktası ayarlayın. Test Gezgini'ndeÇalıştır> ve ardından Son Çalıştırmayı Hata Ayıkla seçin.