Python'da ilk dayanıklı işlevinizi oluşturma

Dayanıklı İşlevler, sunucusuz bir ortamda durum bilgisi olan işlevler yazmanızı sağlayan bir Azure İşlevleri uzantısıdır. Uzantı sizin için durumu, denetim noktalarını ve yeniden başlatmaları yönetir.

Bu makalede, "hello world" dayanıklı işlevini yerel olarak oluşturmak ve test etmek için Visual Studio Code Azure İşlevleri uzantısını kullanmayı öğreneceksiniz. Bu işlev, diğer işlevlere çağrıları düzenler ve zincirler. Ardından işlev kodunu Azure'da yayımlayabilirsiniz.

Azure'da çalışan dayanıklı işlevin ekran görüntüsü.

Önkoşullar

Bu öğreticiyi tamamlamak için:

Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.

Yerel projenizi oluşturma

Bu bölümde, yerel bir Azure İşlevleri projesi oluşturmak için Visual Studio Code'u kullanacaksınız.

  1. Visual Studio Code'da komut paletini açmak için F1 (veya Ctrl/Cmd+Shift+P) tuşlarına basın. Komut paletinde araması yapın ve öğesini seçin Azure Functions: Create New Project....

    İşlev oluştur penceresinin ekran görüntüsü.

  2. Projeniz için boş bir klasör konumu seçin ve Seç'i seçin.

  1. istemleri izleyin ve aşağıdaki bilgileri sağlayın:

    İstem Value Açıklama
    İşlev uygulaması projeniz için bir dil seçin Python Yerel bir Python İşlevleri projesi oluşturun.
    Bir sürüm seçin Azure İşlevleri v4 Bu seçeneği yalnızca Çekirdek Araçlar henüz yüklü olmadığında görürsünüz. Bu durumda, uygulamayı ilk kez çalıştırdığınızda Core Tools yüklenir.
    Python sürümü Python 3.7, 3.8, 3.9 veya 3.10 Visual Studio Code, seçtiğiniz sürümle bir sanal ortam oluşturur.
    Projenizin ilk işlevi için bir şablon seçin Şimdilik atla
    Projenizi nasıl açmak istediğinizi seçin Geçerli pencerede aç Seçtiğiniz klasörde Visual Studio Code'un yeniden açılmasını sağlar.
  1. istemleri izleyin ve aşağıdaki bilgileri sağlayın:

    İstem Value Açıklama
    Dil seçin Python (Programlama Modeli V2) V2 programlama modelini kullanarak yerel bir Python İşlevleri projesi oluşturun.
    Bir sürüm seçin Azure İşlevleri v4 Bu seçeneği yalnızca Çekirdek Araçlar henüz yüklü olmadığında görürsünüz. Bu durumda, uygulamayı ilk kez çalıştırdığınızda Core Tools yüklenir.
    Python sürümü Python 3.7, 3.8, 3.9 veya 3.10 Visual Studio Code, seçtiğiniz sürümle bir sanal ortam oluşturur.
    Projenizi nasıl açmak istediğinizi seçin Geçerli pencerede aç Seçtiğiniz klasörde Visual Studio Code'un yeniden açılmasını sağlar.

Visual Studio Code gerekirse Azure İşlevleri Temel Araçları'nı yükler. Ayrıca bir klasörde bir işlev uygulaması projesi oluşturur. Bu proje host.json ve local.settings.json yapılandırma dosyalarını içerir.

Kök klasörde bir requirements.txt dosyası da oluşturulur. İşlev uygulamanızı çalıştırmak için gereken Python paketlerini belirtir.

PyPI'den azure-functions-durable yükleme

Projeyi oluşturduğunuzda, Azure İşlevleri Visual Studio Code uzantısı otomatik olarak seçtiğiniz Python sürümüyle bir sanal ortam oluşturur. Ardından bir terminalde sanal ortamı etkinleştirmeniz ve Azure İşlevleri ve Dayanıklı İşlevler için gereken bazı bağımlılıkları yüklemeniz gerekir.

  1. düzenleyicide requirements.txt açın ve içeriğini aşağıdaki kodla değiştirin:

    azure-functions
    azure-functions-durable
    
  2. Düzenleyicinin tümleşik terminalini geçerli klasörde açın (Ctrl+Shift+').

  3. Tümleşik terminalde, işletim sisteminize bağlı olarak geçerli klasördeki sanal ortamı etkinleştirin:

    source .venv/bin/activate
    
  4. Sanal ortamın etkinleştirildiği tümleşik terminalde, tanımladığınız paketleri yüklemek için pip kullanın.

    python -m pip install -r requirements.txt
    

İşlevlerinizi oluşturma

Temel bir Dayanıklı İşlevler uygulaması üç işlev içerir:

  • Orchestrator işlevi: Diğer işlevleri düzenleyen bir iş akışını açıklar.
  • Etkinlik işlevi: Orchestrator işlevi tarafından çağrılır, çalışma gerçekleştirir ve isteğe bağlı olarak bir değer döndürür.
  • İstemci işlevi: Düzenleyici işlevi başlatan normal bir Azure İşlevidir. Bu örnekte HTTP ile tetiklenen bir işlev kullanılır.

Orchestrator işlevi

Projenizde dayanıklı işlev kodunu oluşturmak için bir şablon kullanırsınız.

  1. Komut paletinde araması yapın ve öğesini seçin Azure Functions: Create Function....

  2. istemleri izleyin ve aşağıdaki bilgileri sağlayın:

    İstem Value Açıklama
    İşleviniz için şablon seçme Dayanıklı İşlevler düzenleyici Dayanıklı İşlevler düzenlemesi oluşturma
    İşlev adı belirtin HelloOrchestrator Dayanıklı işlevinizin adı

Etkinlik işlevlerini koordine etmek için bir düzenleyici eklediniz. Orchestrator işlevini görmek için HelloOrchestrator/__init__.py açın. Çağrısının context.call_activity her birinde adlı Hellobir etkinlik işlevi çağrılır.

Ardından başvuruda Hello bulunan etkinlik işlevini ekleyeceksiniz.

Activity işlevi

  1. Komut paletinde araması yapın ve öğesini seçin Azure Functions: Create Function....

  2. istemleri izleyin ve aşağıdaki bilgileri sağlayın:

    İstem Value Açıklama
    İşleviniz için şablon seçme Dayanıklı İşlevler etkinliği Etkinlik işlevi oluşturma
    İşlev adı belirtin Merhaba Etkinlik işlevinizin adı

Düzenleyici tarafından çağrılan etkinlik işlevini eklediniz Hello . Giriş olarak bir ad alıp selamlama döndürdüğünü görmek için Hello/__init__.py açın. Etkinlik işlevi, veritabanı çağrısı yapma veya hesaplama gerçekleştirme gibi eylemleri gerçekleştireceğiniz yerdir.

Son olarak, düzenlemeyi başlatan HTTP ile tetiklenen bir işlev ekleyeceksiniz.

İstemci işlevi (HTTP starter)

  1. Komut paletinde araması yapın ve öğesini seçin Azure Functions: Create Function....

  2. istemleri izleyin ve aşağıdaki bilgileri sağlayın:

    İstem Value Açıklama
    İşleviniz için şablon seçme HTTP başlatıcıyı Dayanıklı İşlevler HTTP starter işlevi oluşturma
    İşlev adı belirtin DurableFunctionsHttpStart İstemci işlevinizin adı
    Yetkilendirme düzeyi Anonim Tanıtım amacıyla, işlevin kimlik doğrulaması olmadan çağrılmasına izin verin

Düzenlemeyi başlatan HTTP ile tetiklenen bir işlev eklediniz. Yeni bir düzenleme başlatmak için kullandığını client.start_new görmek için DurableFunctionsHttpStart/__init__.py açın. Ardından, yeni düzenlemeyi izlemek ve yönetmek için kullanılabilecek URL'leri içeren bir HTTP yanıtı döndürmek için kullanır client.create_check_status_response .

Artık yerel olarak çalıştırılıp Azure'a dağıtılabilir bir Dayanıklı İşlevler uygulamanız var.

Gereksinimler

Python programlama modelinin 2. sürümü aşağıdaki en düşük sürümleri gerektirir:

v2 programlama modelini etkinleştirme

v2 programlama modelini çalıştırmak için aşağıdaki uygulama ayarı gereklidir:

  • Ad: AzureWebJobsFeatureFlags
  • Değer: EnableWorkerIndexing

Azure İşlevleri Çekirdek Araçları'nı kullanarak yerel olarak çalıştırıyorsanız, bu ayarı dosyanıza local.settings.json eklemeniz gerekir. Azure'da çalıştırıyorsanız, seçtiğiniz araçla şu adımları izleyin:

ve <RESOURCE_GROUP_NAME> değerini sırasıyla işlev uygulamanızın ve kaynak grubunuzun adıyla değiştirin<FUNCTION_APP_NAME>.

az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing

Bu 3 işlev türünü kullanarak temel bir Dayanıklı İşlevler uygulaması oluşturmak için öğesinin içeriğini function_app.py aşağıdaki Python koduyla değiştirin.

import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

# An HTTP-Triggered Function with a Durable Functions Client binding
@myApp.route(route="orchestrators/{functionName}")
@myApp.durable_client_input(client_name="client")
async def http_start(req: func.HttpRequest, client):
    function_name = req.route_params.get('functionName')
    instance_id = await client.start_new(function_name)
    response = client.create_check_status_response(req, instance_id)
    return response

# Orchestrator
@myApp.orchestration_trigger(context_name="context")
def hello_orchestrator(context):
    result1 = yield context.call_activity("hello", "Seattle")
    result2 = yield context.call_activity("hello", "Tokyo")
    result3 = yield context.call_activity("hello", "London")

    return [result1, result2, result3]

# Activity
@myApp.activity_trigger(input_name="city")
def hello(city: str):
    return f"Hello {city}"

Örnekteki her işlevin ve amacının açıklaması için aşağıdaki tabloyu gözden geçirin.

Metot Açıklama
hello_orchestrator İş akışını açıklayan orchestrator işlevi. Bu durumda düzenleme başlatılır, sırayla üç işlev çağrılır ve listedeki 3 işlevin de sıralı sonuçlarını döndürür.
hello Yürütülmekte olan işi gerçekleştiren etkinlik işlevi. İşlev, bağımsız değişken olarak geçirilen şehre basit bir selamlama döndürür.
http_start Düzenlemenin bir örneğini başlatan ve bir denetim durumu yanıtı döndüren HTTP ile tetiklenen bir işlev.

Not

Dayanıklı İşlevler, Python V2'nin şemalarını da destekler. Bunları kullanmak için şema işlevlerinizi burada gösterildiği gibi sınıfını azure-functions-durableBlueprint kullanarak kaydetmeniz gerekir. Sonuçta elde edilen şema normal şekilde kaydedilebilir. Örnek için örneğimize bakın.

İşlevi yerel olarak test etme

Azure İşlevleri Temel Araçları, Azure İşlevleri projenizi yerel geliştirme bilgisayarınızda çalıştırmanıza olanak sağlar. Yüklü değilse, Visual Studio Code'dan ilk kez bir işlev başlattığınızda bu araçları yüklemeniz istenir.

  1. İşlevinizi test etmek için etkinlik işlev kodunda Hello (Hello/__init__.py) bir kesme noktası ayarlayın. F5 tuşuna basın veya işlev uygulaması projesini başlatmak için komut paletinden öğesini seçinDebug: Start Debugging. Temel Araçlar’daki çıktı, Terminal panelinde görüntülenir.
  1. İşlevinizi test etmek için etkinlik işlev kodunda hello bir kesme noktası ayarlayın. F5 tuşuna basın veya işlev uygulaması projesini başlatmak için komut paletinden öğesini seçinDebug: Start Debugging. Temel Araçlar’daki çıktı, Terminal panelinde görüntülenir.

Not

Hata ayıklama hakkında daha fazla bilgi için bkz. tanılama Dayanıklı İşlevler.

  1. Dayanıklı İşlevler çalıştırmak için bir Azure depolama hesabı gerekir. Visual Studio Code bir depolama hesabı seçmenizi isterken Depolama hesabı seç'i seçin.

    Depolama hesabı oluşturma ekran görüntüsü.

  2. İstemleri izleyin ve Azure'da yeni bir depolama hesabı oluşturmak için aşağıdaki bilgileri sağlayın:

    İstem Value Açıklama
    Abonelik seçme aboneliğinizin adı Azure aboneliğinizi seçin
    Depolama hesabı seçin Yeni depolama hesabı oluşturma
    Yeni depolama hesabının adını girin benzersiz ad Oluşturulacak depolama hesabının adı
    Kaynak grubu seçme benzersiz ad Oluşturulacak kaynak grubunun adı
    Bir konum seçin Bölge Size yakın bir bölge seçin
  3. Terminal panelinde, HTTP ile tetiklenen işlevinizin URL uç noktasını kopyalayın.

    Azure yerel çıktısının ekran görüntüsü.

  1. Tarayıcınızı veya Postman veya cURL gibi bir aracı kullanarak URL uç noktasına bir HTTP isteği gönderin. Son segmenti orchestrator işlevinin (HelloOrchestrator) adıyla değiştirin. URL ile benzer http://localhost:7071/api/orchestrators/HelloOrchestratorolmalıdır.

    Yanıt, HTTP işlevinin dayanıklı düzenlemenin başarıyla başladığını bildiren ilk sonucudur. Henüz düzenlemenin sonucu değildir. Yanıt birkaç yararlı URL içerir. Şimdilik düzenlemenin durumunu sorgulayalım.

  1. Tarayıcınızı veya Postman veya cURL gibi bir aracı kullanarak URL uç noktasına bir HTTP isteği gönderin. Son segmenti orchestrator işlevinin (hello_orchestrator) adıyla değiştirin. URL ile benzer http://localhost:7071/api/orchestrators/hello_orchestratorolmalıdır.

    Yanıt, HTTP işlevinin dayanıklı düzenlemenin başarıyla başladığını bildiren ilk sonucudur. Henüz düzenlemenin sonucu değildir. Yanıt birkaç yararlı URL içerir. Şimdilik düzenlemenin durumunu sorgulayalım.

  1. url statusQueryGetUrideğerini kopyalayın, tarayıcının adres çubuğuna yapıştırın ve isteği yürütür. Alternatif olarak, GET isteğini vermek için Postman'i kullanmaya devam edebilirsiniz.

    İstek, durum için düzenleme örneğini sorgular. Örneğin tamamlandığını gösteren ve dayanıklı işlevin çıkışlarını veya sonuçlarını içeren bir nihai yanıt almanız gerekir. Şuna benzer:

{
    "name": "HelloOrchestrator",
    "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
    "runtimeStatus": "Completed",
    "input": null,
    "customStatus": null,
    "output": [
        "Hello Tokyo!",
        "Hello Seattle!",
        "Hello London!"
    ],
    "createdTime": "2020-03-18T21:54:49Z",
    "lastUpdatedTime": "2020-03-18T21:54:54Z"
}
{
    "name": "hello_orchestrator",
    "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
    "runtimeStatus": "Completed",
    "input": null,
    "customStatus": null,
    "output": [
        "Hello Tokyo!",
        "Hello Seattle!",
        "Hello London!"
    ],
    "createdTime": "2020-03-18T21:54:49Z",
    "lastUpdatedTime": "2020-03-18T21:54:54Z"
}
  1. Hata ayıklamayı durdurmak için Visual Studio Code'da Shift+F5 tuşlarına basın.

İşlevin yerel bilgisayarınızda düzgün çalıştığını doğruladıktan sonra, projeyi Azure'da yayımlamanın zamanı gelmiştir.

Azure'da oturum açma

Azure kaynakları oluşturabilmeniz veya uygulamanızı yayımlayabilmeniz için önce Azure'da oturum açmanız gerekir.

  1. Henüz oturum açmadıysanız Etkinlik çubuğunda Azure simgesini seçin. Ardından Kaynaklar alanında Azure'da oturum aç... seçeneğini belirleyin.

    VS Code içinde Azure'da oturum açma penceresinin ekran görüntüsü.

    Zaten oturum açtıysanız ve mevcut aboneliklerinizi görebiliyorsanız sonraki bölüme gidin. Henüz bir Azure hesabınız yoksa Azure Hesabı Oluştur... seçeneğini belirleyin. Öğrenciler Öğrenciler için Azure Hesabı Oluştur'u seçebilir....

  2. Tarayıcıda sorulduğunda Azure hesabınızı seçin ve Azure hesabı kimlik bilgilerinizi kullanarak oturum açın. Yeni bir hesap oluşturursanız, hesabınız oluşturulduktan sonra oturum açabilirsiniz.

  3. Başarıyla oturum açtıktan sonra yeni tarayıcı penceresini kapatabilirsiniz. Azure hesabınıza ait abonelikler kenar çubuğunda görüntülenir.

Azure'da işlev uygulamasını oluşturma

Bu bölümde, Azure aboneliğinizde bir işlev uygulaması ve ilgili kaynaklar oluşturacaksınız.

  1. Etkinlik çubuğunda Azure simgesini seçin. Ardından Kaynaklar alanında simgeyi + seçin ve Azure'da İşlev Uygulaması Oluştur seçeneğini belirleyin.

    Azure aboneliğinizde kaynak oluşturma

  2. İstemlerde aşağıdaki bilgileri sağlayın:

    İstem Seçim
    Aboneliği seçin Kullanılacak aboneliği seçin. Kaynaklar altında yalnızca bir aboneliğiniz olduğunda bu istemi görmezsiniz.
    İşlev uygulaması için genel olarak benzersiz bir ad girin URL yolunda geçerli bir ad yazın. Yazdığınız ad, Azure İşlevleri benzersiz olduğundan emin olmak için doğrulanır.
    Çalışma zamanı yığını seçme Yerel olarak çalıştırdığınız dil sürümünü seçin.
    Yeni kaynaklar için bir konum seçin Daha iyi performans için size yakın bir bölge seçin.

    Uzantı, Azure'da oluşturulan tek tek kaynakların durumunu Azure : Etkinlik Günlüğü panelinde gösterir.

    Azure kaynak oluşturma günlüğü

  3. Oluşturma işlemi tamamlandığında aboneliğinizde aşağıdaki Azure kaynakları oluşturulur. Kaynaklar, işlev uygulamanızın adına göre adlandırılır:

    • İlgili kaynaklar için mantıksal bir kapsayıcı olan kaynak grubu.
    • Projeleriniz hakkındaki durumu ve diğer bilgileri koruyan standart bir Azure Depolama hesabı.
    • İşlev kodunuzu yürütmek için ortam sağlayan bir işlev uygulaması. İşlev uygulaması, aynı barındırma planı içindeki 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.
    • İşlev uygulamanız için temel konağı tanımlayan bir App Service planı.
    • uygulamadaki işlevlerinizin kullanımını izleyen işlev uygulamasına bağlı bir Uygulama Analizler örneği.

    İşlev uygulamanız oluşturulduktan sonra bir bildirim görüntülenir ve dağıtım paketi uygulanır.

    İpucu

    Varsayılan olarak, işlev uygulamanızın gerektirdiği Azure kaynakları, sağladığınız işlev uygulaması adına göre oluşturulur. Varsayılan olarak, bunlar işlev uygulamasıyla aynı yeni kaynak grubunda da oluşturulur. Bu kaynakların adlarını özelleştirmek veya mevcut kaynakları yeniden kullanmak istiyorsanız, bunun yerine projeyi gelişmiş oluşturma seçenekleriyle yayımlamanız gerekir.

Projeyi Azure’a dağıtma

Önemli

Mevcut bir işlev uygulamasına dağıtılması her zaman Azure'da bu uygulamanın içeriğinin üzerine yazılır.

  1. Azure etkinliğinin Kaynaklar alanında, yeni oluşturduğunuz işlev uygulaması kaynağını bulun, kaynağa sağ tıklayın ve İşlev uygulamasına dağıt... öğesini seçin.

  2. Önceki dağıtımların üzerine yazmanız istendiğinde, işlev kodunuzu yeni işlev uygulaması kaynağına dağıtmak için Dağıt'ı seçin.

  3. Dağıtım tamamlandıktan sonra, oluşturduğunuz Azure kaynakları da dahil olmak üzere oluşturma ve dağıtım sonuçlarını görüntülemek için Çıkışı Görüntüle'yi seçin. Bildirimi kaçırırsanız, yeniden görmek için sağ alt köşedeki zil simgesini seçin.

    Çıktıyı Görüntüle penceresinin ekran görüntüsü.

Azure'da işlevinizi test etme

  1. Çıktı panelinden HTTP tetikleyicisinin URL’sini kopyalayın. HTTP ile tetiklenen işlevinizi çağıran URL şu biçimde olmalıdır: https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
  1. Çıktı panelinden HTTP tetikleyicisinin URL’sini kopyalayın. HTTP ile tetiklenen işlevinizi çağıran URL şu biçimde olmalıdır: https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator
  1. HTTP isteği için bu yeni URL'yi tarayıcınızın adres çubuğuna yapıştırın. Yayımlanan uygulamayı kullanırken önceki durum yanıtını almanız gerekir.

Sonraki adımlar

Bir Python dayanıklı işlev uygulaması oluşturmak ve yayımlamak için Visual Studio Code'u kullandınız.