Öğretici: Azure İşlevleri'i Azure İşlevleri

Bu laboratuvarda, Azure İşlevleri kullanarak veri Mac için Visual Studio. Ayrıca azure depolama tablolarını da tümleştirebilirsiniz. Bu tablo, geliştiricilerin sahip olduğu bağlama ve tetikleyici türlerinden Azure İşlevleri sunar.

Hedefler

  • Yerel uygulama oluşturma ve hata Azure İşlevleri
  • Web ve Azure depolama kaynaklarıyla tümleştirin
  • Birden çok iş akışı içeren bir iş akışını Azure İşlevleri

Gereksinimler

  • Mac için Visual Studio 7.5 veya daha yüksek bir değer.
  • Bir Azure aboneliği (ücretsiz olarak https://azure.com/free kullanılabilir).

Alıştırma 1: Azure İşlevleri oluşturma

  1. Mac için Visual Studio.

  2. Yeni Çözüm >'ı seçin.

  3. Cloud > Genel kategorisinden Azure İşlevleri seçin. C# kullanarak bir .NET sınıf kitaplığı oluşturacak ve bu kitaplığı Azure İşlevleri. İleri’ye tıklayın.

    azure işlevleri şablon seçimi

  4. Ad Project "AzureFunctionsLab" olarak ayarlayın ve Oluştur'a tıklayın.

    azure işlev projenizi adlandırma ve oluşturma

  5. Çözüm Penceresi'nin düğümlerini genişletin. Varsayılan proje şablonu, NuGet çeşitli Azure Web İşleri ve Newtonsoft.Json paketine başvurular içerir.

    Ayrıca üç dosya vardır: - konak için genel yapılandırma seçeneklerini açıklayan host.json - hizmet ayarlarını yapılandırmak için local.settings.json. - Proje şablonu ayrıca varsayılan bir HttpTrigger oluşturur. Bu laboratuvar için Projeden HttpTrigger.cs dosyasını silmeniz gerekir.

    local.settings.json'ı açın. Varsayılan olarak iki boş bağlantı dizesi ayarına sahip olur.

    local.settings.json dosyasını görüntüleyen çözüm penceresi

Alıştırma 2: Azure depolama hesabı oluşturma

  1. azure hesabınızla oturum https://portal.azure.com açın.

  2. Ekranın sol kısmında yer alan Sık Kullanılanlar bölümünün altında Depolama hesaplar'ı seçin:

    depolama hesapları öğesini Azure portal sık kullanılanlar bölümü

  3. Yeni bir depolama hesabı oluşturmak için Ekle'yi seçin:

    Yeni depolama hesabı ekleme düğmesi

  4. Ad için genel olarak benzersiz bir ad girin ve Bunu Kaynak grubu için yeniden kullanabilirsiniz. Diğer tüm öğeleri varsayılan olarak tutabilirsiniz.

    yeni depolama hesabı ayrıntıları

  5. Oluştur’a tıklayın. Depolama hesabını oluşturmak birkaç dakika sürebilir. Başarıyla oluşturulduktan sonra bir bildirim alırsınız.

    dağıtım başarılı bildirimi

  6. Bildirimden Kaynağa git düğmesini seçin.

  7. Erişim anahtarları sekmesini seçin.

    erişim anahtarı ayarı

  8. İlk Bağlantı Dizesini kopyalayın. Bu dize, azure depolamayı daha sonra uygulamanıza Azure İşlevleri için kullanılır.

    anahtar 1 için bilgiler

  9. Bağlantı Mac için Visual Studio geri dönüp tam bağlantı dizesini local.settings.json içinde AzureWebJobsStorage ayarı olarak yapıştırın. Artık, kaynaklarına erişmesi gereken işlevler için özniteliklerde ayarın adına başvurabilirsiniz.

    bağlantı anahtarı girilirken yerel ayarlar dosyası

Örnek 3: Azure İşlevi oluşturma ve hata ayıklama

  1. Artık kod eklemeye başlayabilirsiniz. Bir .NET sınıf kitaplığıyla çalışırken, Azure İşlevleri statik yöntemler olarak eklenir. Çözüm Penceresinde AzureFunctions proje düğümüne sağ tıklayın ve İşlev Ekle'yi >'yi seçin:

    İşlev ekle seçeneği

  2. Yeni Uygulama Azure İşlevleri Genel web kancası şablonunu seçin. Ad'ı Ekle olarak ayarlayın ve tamam'a tıklar ve işlevinizi oluşturun:

    Yeni Azure işlevleri iletişim kutusu

  3. Yeni dosyanın en üstüne aşağıdaki using yönergelerini ekleyin:

    using Microsoft.Azure.WebJobs.Extensions.Http;
    using System.Web;
    using Microsoft.WindowsAzure.Storage.Table;
    
  4. Mevcut yöntemi Run kaldırın ve aşağıdaki yöntemini sınıfına Azure İşlevi olarak ekleyin:

    [FunctionName("Add")]
    public static int Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)]
    HttpRequestMessage req,
    TraceWriter log)
    {
        int x = 1;
        int y = 2;
    
        return x + y;
    }
    
  5. Şimdi yöntem tanımının adım adım adım üzerinden bakalım.

    göreceğiniz ilk şey, bu yöntemi Azure İşlevi olarak işaret alan FunctionName özniteliğidir. özniteliği, işlevin genel adını gösterir. Öznitelik adının gerçek yöntem adıyla eşleşmesi gerek değildir.

    FunctionName özniteliği vurgulanmış yeni çalıştırma yöntemi

  6. Ardından yöntemi, gerekli olan genel statik yöntem olarak işaretlenir. Ayrıca dönüş değerinin bir int olduğunu da fark vardır. Yöntem öznitelikleri kullanılarak aksi belirtilmedikçe, bir Azure İşlevinin herhangi bir geçersiz olmayan dönüş değeri istemciye metin olarak döndürülür. Varsayılan olarak XML olarak döndürülür, ancak daha sonra laboratuvarda yapacakları JSON olarak değiştirilebilir.

    Yöntem başlatma vurgulanmış yeni çalıştırma yöntemi

  7. İlk parametre, bu yöntemin bir HTTP isteği tarafından çağrıldığında olduğunu gösteren HttpTrigger özniteliğiyle işaretlenir. özniteliği, yöntemin yetkilendirme düzeyini ve desteklediği fiilleri de belirtir (bu durumda yalnızca "GET"). ayrıca isteğe bağlı olarak yöntemin yolunu geçersiz kan ve yoldan değişkenleri otomatik olarak ayıklamak için bir yol sunan bir Yol tanımlayabilirsiniz. Route burada null olduğu için bu yöntemin yolu varsayılan olarak /api/Add olur.

    Parametresi vurgulanmış yeni çalıştırma yöntemi

  8. yöntemine son parametre, tanılama ve hatalar için iletileri günlüğe göndermek için kullanılan bir TraceWriter'dır.

    TraceWriter vurgulanmış yeni çalıştırma yöntemi

  9. Yönteminin dönüş satırına, satırın kenar boşluğuna tıklayarak bir kesme noktası ayarlayın:

    Dönüş satırda ayarlanmış kesme noktası

  10. F5 tuşuna basarak veya Hata Ayıklamayı Başlat'ı seçerek projeyi bir hata ayıklama oturumunda > çalıştırın. Alternatif olarak Çalıştır düğmesine de tıklayabilirsiniz. Bu seçeneklerin hepsi aynı görevi gerçekleştirecek. Bu laboratuvarın geri kalanı F5'e başvurur, ancak en rahat bularak yöntemini kullanabilirsiniz.

    Proje Derleme ve Çalıştırma

  11. Proje çalıştırılırsa Terminal uygulaması otomatik olarak açılır.

  12. Proje, yöntem özniteliklerine ve bu Azure İşlevleri daha sonra ele alınan bir dosya kuralına dayalı olarak bir dosya algılama sürecinden geçmektedir. Bu durumda, tek bir Azure İşlevi algılar ve 1 iş işlevini "üretir".

    Terminalde Azure İşlevi çıkışı

  13. Başlangıç iletilerinin alt kısmında, Azure İşlevleri http tetikleyici API'lerinin URL'lerini yazdırır. Yalnızca bir tane olması gerekir. Bu URL'yi kopyalayın ve yeni bir tarayıcı sekmesine yapıştırın.

    Azure İşlevi API'si URL'si

  14. Kesme noktası hemen tetiklenir. Web isteği işlevine yönlendirildi ve artık hata ayıklandı. Değerini görmek için fareyle x değişkeninin üzerine tıklayın.

    Kesme noktası tetiklenir

  15. Daha önce eklemek için kullanılan yöntemi kullanarak kesme noktası kaldırın (kenar boşluğuna tıklayın veya satırı seçin ve F9 tuşuna basın).

  16. Çalışmaya devam etmek için F5 tuşuna basın.

  17. Tarayıcıda yönteminin XML sonucu işlenir. Beklendiği gibi, sabit kodlu toplama işlemi makul bir toplam üretir. Safari'de yalnızca "3" seçeneğini görüyorsanız Safari > Tercihler > Gelişmiş'e gidin ve " Menü çubuğundaKi Geliştirme menüsünü göster" onay kutusunu işaretleyin ve sayfayı yeniden yükleyin.

  18. Hata Mac için Visual Studio' içinde Durdur düğmesine tıklayarak hata ayıklama oturumunu sona erer. Yeni değişikliklerin top olduğundan emin olmak için hata ayıklama oturumunu yeniden başlatmayı (durdurmayı ve sonra çalıştırmayı) unutmayın.

    Hata ayıklamayı durdur seçeneği

  19. Run yönteminde x ve y tanımlarını aşağıdaki kodla değiştirin. Bu kod, url'nin sorgu dizesinde yer alan değerleri ayıklar, böylece ekleme işlemi sağlanan parametrelere göre dinamik olarak gerçek olabilir.

    var query = HttpUtility.ParseQueryString(req.RequestUri.Query);
    
    int x = int.Parse(query["x"]);
    
    int y = int.Parse(query["y"]);
    
    return x + y;
    
  20. Uygulamayı çalıştırın.

  21. Tarayıcı penceresine geri dönüp dizeyi /?x=2&y=3 URL'ye ekleyin. Url'nin tamamı artık http://localhost:7071/api/Add?x=2&y=3 olmalıdır. Yeni URL'ye gidin.

  22. Bu kez sonuç yeni parametreleri yansıtacak. Projeyi farklı değerlerle çalıştırmakta serbestsiniz. Herhangi bir hata denetimi olmadığını, dolayısıyla geçersiz veya eksik parametrelerin hataya neden olduğunu unutmayın.

  23. Hata ayıklama oturumunu durdurun.

Alıştırma 4: function.json ile çalışma

  1. Önceki bir alıştırmada, kitaplıkta tanımlanan Mac için Visual Studio Azure İşlevi için bir iş işlevinin "üreti" olduğu belirtildi. Bunun nedeni Azure İşlevleri çalışma zamanında yöntem özniteliklerini kullanmamış olması, bunun yerine derleme zamanı dosya sistemi kuralı kullanarak çalışma zamanının kullanılabilir olduğu yeri ve Azure İşlevleri yapılandırmadır. Çözüm Penceresinde proje düğümünü sağ tıklatın ve Bulıcı'da Ortaya Çıkar'ı seçin.

    Bulıcı menü seçeneğinde ortaya çıkar

  2. bin/Debug/netstandard2.0'a ulaşana kadar dosya sisteminde aşağı gidin. Ekle adlı bir klasör olması gerekir. Bu klasör, C# kodundaki işlev adı özniteliğine karşılık gelen şekilde oluşturulmuş. Tek bir function.json dosyasını ortaya çıkarmak için Klasör ekle'yi genişletin. Bu dosya, azure işlevini barındırmak ve yönetmek için çalışma zamanı tarafından kullanılır. Derleme zamanı desteği olmayan diğer dil modellerinde (C# betiği veya JavaScript gibi) bu klasörlerin el ile oluşturularak korunması gerekir. C# geliştiricileri için, derleme sırasında öznitelik meta verilerinden otomatik olarak oluşturulurlar. function.json'a sağ tıklayın ve bunu seçerek Visual Studio.

    dosya dizininde function.json

  3. Bu öğreticinin önceki adımlarını göz atarak, C# öznitelikleri hakkında temel bir anlayışa sahipsiniz. Bunu dikkate alarak bu JSON'un tanıdık olması gerekir. Ancak, önceki alıştırmalarda ele atılmlı birkaç öğe vardır. Örneğin, her bağlamanın kendi yön kümesine sahip olması gerekir. Sizin de çıkararak "in" parametresinin giriş olduğu anlamına gelirken "out", parametrenin bir dönüş değeri ($return aracılığıyla) veya yönteme yönelik bir out parametresi olduğunu gösterir. Ayrıca derleme içinde scriptFile (bu son konuma göre) ve entryPoint yöntemini (genel ve statik) belirtmeniz gerekir. Sonraki birkaç adımda bu modeli kullanarak özel bir işlev yolu ekliysiniz, bu nedenle bu dosyanın içeriğini panoya kopyalayın.

    mac için Visual Studio'da function.json dosyası açık

  4. Çözüm Penceresinde AzureFunctionsLab proje düğümüne sağ tıklayın ve Yeni Klasöre Ekle'> seçin. Yeni klasöre Adder adını girin. Varsayılan kural olarak, bu klasörün adı API'nin yolunu (api/Adder gibi) tanımlar.

    Yeni klasör seçeneği

  5. Adder klasörüne sağ tıklayın ve Add add > New File (Yeni Dosya) öğesini seçin.

    Yeni dosya seçeneği

  6. Web kategorisini ve Boş JSON Dosyası şablonunu seçin. Ad'ı işlev olarak ayarlayın ve Yeni'ye tıklayın.

    Boş json dosyası seçeneği

  7. Yeni oluşturulan dosyanın varsayılan içeriğini değiştirmek için diğer function.json içeriğini (3. adımdan) dosyasına yapıştırın.

  8. Aşağıdaki satırları json dosyasının üst kısmından kaldırın:

    "configurationSource":"attributes",
    "generatedBy":"Microsoft.NET.Sdk.Functions-1.0.13",
    
  9. İlk bağlamanın sonuna ("name": "req" satırına) aşağıdaki özellikleri ekleyin. Önceki satıra virgül dahil etme. Bu özellik, artık int parametrelerini yoldan ayıklar ve bunları x ve y adlı yöntem parametrelerine yer değiştirecek şekilde varsayılan kökünü geçersiz kılar.

    "direction": "in",
    "route": "Adder/{x:int?}/{y:int?}"
    
  10. İlkin altına başka bir bağlama ekleyin. Bu bağlama işlevin dönüş değerini işler. Önceki satıra virgül dahil etme:

    {
    "name": "$return",
    "type": "http",
    "direction": "out"
    }
    
  11. Ayrıca dosyanın en altındaki entryPoint özelliğini de aşağıda gösterildiği gibi "Add2" adlı bir yöntem kullanmak üzere güncelleştirin. Bu, api/Adder... yolunun herhangi bir adla (buraya Ekle2) uygun bir yönteme eşleyene bir yol olduğunu göstermektir.

    "entryPoint": "<project-name>.<function-class-name>.Add2"
    
  12. Son function.json dosyanız aşağıdaki json'a benzin:

    {
    "bindings": [
        {
        "type": "httpTrigger",
        "methods": [
            "get"
        ],
        "authLevel": "function",
        "direction": "in",
        "name": "req",
        "route": "Adder/{x:int?}/{y:int?}"
        },
        {
        "name": "$return",
        "type": "http",
        "direction": "out"
        }
    ],
    "disabled": false,
    "scriptFile": "../bin/AzureFunctionsProject.dll",
    "entryPoint": "AzureFunctionsProject.Add.Add2"
    }
    
  13. Tüm bu çalışmaları yapmak için gereken son adım, bu Mac için Visual Studio her değişiklikte bu dosyayı çıkış dizininde aynı göreli yola kopyalamasını talimatını etmektir. Dosya seçiliyken sağ çubuktan özellikler sekmesini seçin ve Çıkış dizinine kopyala için Daha yeniyse kopyala'ya tıklayın:

    JSON dosyası için özellikler seçenekleri

  14. Add.cs içinde beklenen işlevi yerine getirmek için yöntemini Run (özniteliği dahil) aşağıdaki yöntemle değiştirin. çok benzerdir, ancak hiçbir öznitelik kullanmaz ve Run x ve y için açık parametreleri vardır.

    public static int Add2(
        HttpRequestMessage req,
        int x,
        int y,
        TraceWriter log)
    {
        return x + y;
    }
    
  15. Projeyi derlemek ve çalıştırmak için F5 tuşuna basın.

  16. Derleme tamamlandıktan ve platform hazırlandıktan sonra yeni eklenen yönteme eşlenen istekler için ikinci bir yol olduğunu gösterir:

    Http işlevlerinin URL'si

  17. Tarayıcı penceresini iade edin ve 'a http://localhost:7071/api/Adder/3/5 gidin.

  18. Bu kez yöntem bir kez daha çalışır, yoldan parametreleri çekerek bir toplam sağlar.

  19. Hata Mac için Visual Studio ve hata ayıklama oturumunu sona erer.

Alıştırma 5: Azure depolama tabloları ile çalışma

Genellikle, derlemek için şu ana kadar gerçekleştirilen hizmetten çok daha karmaşık olabilir ve yürütülecek önemli miktarda zaman ve/veya altyapıya ihtiyaç vardır. Bu durumda, kaynaklar kullanılabilir olduğunda iş için kuyruğa alınan istekleri kabul etme ve bu istekler için destek Azure İşlevleri bulabilirsiniz. Diğer durumlarda, verileri merkezi olarak depolamak istemeyebilirsiniz. Azure Depolama tabloları bunu hızlı bir şekilde yapmalarını sağlar.

  1. Aşağıdaki sınıfı Add.cs'ye ekleyin. Ad alanının içine, ancak var olan sınıfın dışına gitmeli.

    public class TableRow : TableEntity
    {
        public int X { get; set; }
        public int Y { get; set; }
        public int Sum { get; set; }
    }
    
  2. Add sınıfına başka bir işlev eklemek için aşağıdaki kodu ekleyin. Bunun şu ana kadar http yanıtı içermeyen benzersiz olduğunu unutmayın. Son satır, daha sonra (PartitionKey ve RowKey) daha sonra almayı kolaylaştıracak bazı önemli bilgilerle doldurulmuş yeni bir TableRow ile birlikte parametrelerini ve toplamını döndürür. yöntemi içindeki kod, işlev çalıştırılırken daha kolay bilgi için TraceWriter kullanır.

    [FunctionName("Process")]
    [return: Table("Results")]
    public static TableRow Process(
        [HttpTrigger(AuthorizationLevel.Function, "get",
            Route = "Process/{x:int}/{y:int}")]
        HttpRequestMessage req,
        int x,
        int y,
        TraceWriter log)
    {
        log.Info($"Processing {x} + {y}");
    
        return new TableRow()
        {
            PartitionKey = "sums",
            RowKey = $"{x}_{y}",
            X = x,
            Y = y,
            Sum = x + y
        };
    }
    
  3. Projeyi derlemek ve çalıştırmak için F5 tuşuna basın.

  4. Tarayıcı sekmesinde, 'a http://localhost:7071/api/Process/4/6 gidin. Bu, kuyruğa başka bir ileti ekleniyor ve sonunda tabloya başka bir satır ekleniyor.

  5. Terminal'e geri dönüp 4 + 6 için gelen isteği izleyin.

    Toplama isteğini gösteren terminal çıkışı

  6. İsteği aynı URL'ye yenilemek için tarayıcıya geri dönebilirsiniz. Bu kez Process yönteminden sonra bir hatayla karşılaştısınız. Bunun nedeni, kodun zaten var olan bir bölüm ve satır Depolama kullanarak Azure Tablo tablosuna satır eklemeye denemesidir.

    System.Private.CoreLib: Exception while executing function: Process. Microsoft.Azure.WebJobs.Host: Error while handling parameter $return after function returned:. Microsoft.Azure.WebJobs.Host: The specified entity already exists.
    
  7. Hata ayıklama oturumunu sona erer.

  8. Hatayı azaltmak için aşağıdaki parametreyi TraceWriter parametresinin hemen öncesinde yöntem tanımına ekleyin. Bu parametre, Azure İşlevleri platforma sonuçları depolamak için kullanmakta olduğu PartitionKey'te bulunan Results tablosundan TableRow alma girişiminde bulunarak bunu denemesi talimatı verir. Ancak RowKey'in aynı yöntem için diğer x ve y parametrelerine göre dinamik olarak oluşturulduğuna dikkat edin. Bu satır zaten varsa, yöntem geliştiricinin fazladan çalışması gerektirerek başladığında tableRow satıra sahip olur. Satır yoksa yalnızca null olur. Bu verimlilik, geliştiricilerin altyapıya değil önemli iş mantığına odaklanmalarını sağlar.

    [Table("Results", "sums", "{x}_{y}")]
    TableRow tableRow,
    
  9. Aşağıdaki kodu yönteminin başına ekleyin. tableRow null değilse, istenen işlem için zaten sonuçlarımız vardır ve bunu hemen döndürenin. Aksi takdirde işlev daha önce olduğu gibi devam eder. Verileri iade etmek için en güçlü yol bu değildir ancak çok az kodla birden çok ölçeklenebilir katmanda son derece karmaşık işlemleri düzenlemenizi sağlar.

    if (tableRow != null)
    {
        log.Info($"{x} + {y} already exists");
        return null;
    }
    
  10. Projeyi derlemek ve çalıştırmak için F5 tuşuna basın.

  11. Tarayıcı sekmesindeki URL'yi http://localhost:7071/api/Process/4/6 yenileyin. Bu kaydın tablo satırı mevcut olduğu için hemen ve hatasız olarak geri dönilmelidir. HTTP çıktısı olmadığından çıktıyı terminalde görebilirsiniz.

    Tablo satırını gösteren Terminal çıkışı zaten var

  12. URL 'YI, henüz test edilmemiş bir birleşimi yansıtacak şekilde güncelleştirin http://localhost:7071/api/Process/5/7 . Terminal 'teki, tablo satırının bulunamadığını (beklenen şekilde) belirten iletiyi not edin.

    Yeni işlemi gösteren Terminal çıkışı

  13. Mac için Visual Studio dönün ve hata ayıklama oturumunu sonlandırın.

Özet

bu laboratuvarda, Mac için Visual Studio ile Azure işlevleri oluşturmaya nasıl başladığınızı öğrendiniz.