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.
Önkoşullar
Bu öğreticiyi tamamlamak için:
Visual Studio Code’u yükleyin.
Azure İşlevleri Visual Studio Code uzantısını yükleyin.
Azure İşlevleri Core Tools'un en son sürümüne sahip olduğunuzdan emin olun.
Dayanıklı İşlevler bir Azure depolama hesabı gerektirir. Azure aboneliğine ihtiyacınız var.
Python'ın 3.7, 3.8, 3.9 veya 3.10 sürümünün yüklü olduğundan emin olun.
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.
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...
.Projeniz için boş bir klasör konumu seçin ve Seç'i seçin.
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.
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.
düzenleyicide requirements.txt açın ve içeriğini aşağıdaki kodla değiştirin:
azure-functions azure-functions-durable
Düzenleyicinin tümleşik terminalini geçerli klasörde açın (Ctrl+Shift+').
Tümleşik terminalde, işletim sisteminize bağlı olarak geçerli klasördeki sanal ortamı etkinleştirin:
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.
Komut paletinde araması yapın ve öğesini seçin
Azure Functions: Create Function...
.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ı Hello
bir etkinlik işlevi çağrılır.
Ardından başvuruda Hello
bulunan etkinlik işlevini ekleyeceksiniz.
Activity işlevi
Komut paletinde araması yapın ve öğesini seçin
Azure Functions: Create Function...
.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)
Komut paletinde araması yapın ve öğesini seçin
Azure Functions: Create Function...
.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:
- Azure İşlevleri Runtime v4.16+
- Azure İşlevleri Core Tools v4.0.5095+ (yerel olarak çalışıyorsa)
- azure-functions-durable v1.2.4+
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-durable
Blueprint
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.
- İş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.
- İş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.
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.
İ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 Terminal panelinde, HTTP ile tetiklenen işlevinizin URL uç noktasını kopyalayın.
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 benzerhttp://localhost:7071/api/orchestrators/HelloOrchestrator
olmalı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.
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 benzerhttp://localhost:7071/api/orchestrators/hello_orchestrator
olmalı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.
url
statusQueryGetUri
değ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"
}
- 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.
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.
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....
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.
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.
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.
İ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.
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.
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.
Ö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.
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.
Azure'da işlevinizi test etme
- Çı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
- Çı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
- 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.