Hızlı Başlangıç: Dayanıklı İşlevler kullanarak sunucusuz iş akışı oluşturma

Bu hızlı başlangıçta, paralel çalışan birden çok görevi düzenleyen sunucusuz bir iş akışı oluşturmak için Azure Geliştirici komut satırı araçlarını kullanacaksınız. Azure'da kaynak oluşturuyor, kodu yerel olarak doğrultu ve ardından Azure İşlevleri'ta Flex Consumption planında çalışan yeni bir sunucusuz fonksiyon uygulamasına dağıtıyorsun.

Proje, kodunuzu Azure'a dağıtmayı kolaylaştırmak için Azure Geliştirici CLI'sini (azd) kullanır. Bu dağıtım, güvenli ve ölçeklenebilir Azure İşlevleri dağıtımları için geçerli en iyi yöntemleri izler. Bu hızlı başlangıç kılavuzu, kalıcı yürütme ile durum bilgisi olan iş akışlarını düzenleyen bir uzantı olan Dayanıklı İşlevler'de fan-out/fan-in desenini göstermektedir. Örnek, Azure Depolama arka ucunun yerini alan Dayanıklı İşlevler için tam yönetilen bir arka uç olan Durable Task Scheduler'ı kullanır. Örnek, makale başlıklarını paralel olarak getirir—orkestrasyon, aynı anda çalışan birden çok etkinliğe yayılır ve ardından sonuçları toplamak için geri toplanır.

Flex Consumption planı varsayılan olarak kullandıkça öde faturalama modelini izler, bu da bu hızlı başlangıç kılavuzunu tamamlamanın, Azure hesabınızda birkaç ABD senti veya daha az maliyet anlamına geldiği anlamına gelir.

Prerequisites

Projeyi başlatma

Şablondan yerel Dayanıklı İşlevler kod projesi oluşturmak için azd init komutunu kullanın.

  1. Yerel terminalinizde veya komut isteminizde şu azd init komutu boş bir klasörde çalıştırın:

    azd init --template durable-functions-quickstart-dotnet-azd -e dfquickstart-dotnet
    

    Bu komut proje dosyalarını template deposundan çeker ve projeyi yeni bir klasörde başlatır. -e bayrağı, mevcut ortam için bir ad ayarlar. ortamında azd, ortamınız uygulamanız için benzersiz bir dağıtım bağlamı tutar ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ortam adı, Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.

  2. Proje dizinine geçin ve ardından uygulama klasörüne gidin fanoutfanin :

    cd durable-functions-quickstart-dotnet-azd/fanoutfanin
    
  1. Yerel terminalinizde veya komut isteminizde şu azd init komutu boş bir klasörde çalıştırın:

    azd init --template durable-functions-quickstart-python-azd -e dfquickstart-python
    

    Bu komut proje dosyalarını template deposundan çeker ve projeyi yeni bir klasörde başlatır. -e bayrağı, mevcut ortam için bir ad ayarlar. ortamında azd, ortamınız uygulamanız için benzersiz bir dağıtım bağlamı tutar ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ortam adı, Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.

  2. Proje dizinine geçin ve ardından uygulama klasörüne gidin src :

    cd durable-functions-quickstart-python-azd/src
    
  1. Yerel terminalinizde veya komut isteminizde şu azd init komutu boş bir klasörde çalıştırın:

    azd init --template durable-functions-quickstart-typescript-azd -e dfquickstart-typescript
    

    Bu komut proje dosyalarını template deposundan çeker ve projeyi yeni bir klasörde başlatır. -e bayrağı, mevcut ortam için bir ad ayarlar. ortamında azd, ortamınız uygulamanız için benzersiz bir dağıtım bağlamı tutar ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ortam adı, Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.

  2. Proje dizinine geçin ve ardından uygulama klasörüne gidin src :

    cd durable-functions-quickstart-typescript-azd/src
    
  1. Yerel terminalinizde veya komut isteminizde şu azd init komutu boş bir klasörde çalıştırın:

    azd init --template durable-functions-quickstart-java-azd -e dfquickstart-java
    

    Bu komut proje dosyalarını template deposundan çeker ve projeyi yeni bir klasörde başlatır. -e bayrağı, mevcut ortam için bir ad ayarlar. ortamında azd, ortamınız uygulamanız için benzersiz bir dağıtım bağlamı tutar ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ortam adı, Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.

  2. Proje dizinine geçin:

    cd durable-functions-quickstart-java-azd
    
  1. Yerel terminalinizde veya komut isteminizde şu azd init komutu boş bir klasörde çalıştırın:

    azd init --template durable-functions-quickstart-javascript-azd -e dfquickstart-javascript
    

    Bu komut proje dosyalarını template deposundan çeker ve projeyi yeni bir klasörde başlatır. -e bayrağı, mevcut ortam için bir ad ayarlar. ortamında azd, ortamınız uygulamanız için benzersiz bir dağıtım bağlamı tutar ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ortam adı, Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.

  2. Proje dizinine geçin ve ardından uygulama klasörüne gidin src :

    cd durable-functions-quickstart-javascript-azd/src
    
  1. Yerel terminalinizde veya komut isteminizde şu azd init komutu boş bir klasörde çalıştırın:

    azd init --template durable-functions-quickstart-powershell-azd -e dfquickstart-powershell
    

    Bu komut proje dosyalarını template deposundan çeker ve projeyi yeni bir klasörde başlatır. -e bayrağı, mevcut ortam için bir ad ayarlar. ortamında azd, ortamınız uygulamanız için benzersiz bir dağıtım bağlamı tutar ve birden fazla dağıtım bağlamı tanımlayabilirsiniz. Ortam adı, Azure'da oluşturduğunuz kaynak grubunun adında da kullanılır.

  2. Proje dizinine geçin ve ardından uygulama klasörüne gidin src :

    cd durable-functions-quickstart-powershell-azd/src
    

Azure kaynaklarını sağlama

Bu proje, Flex Tüketim planında yeni bir fonksiyon uygulaması, Durable Task Scheduler ve bir görev merkezi dahil olmak üzere gerekli Azure kaynaklarını oluşturmak için komutu azd provision kullanır.

Tip

Proje, infra en iyi yöntemleri izleyen bir Flex tüketim planına güvenli dağıtım oluşturmak için kullandığı bir dizi Bicep dosyası (azd klasöründe) içerir.

  1. Kök proje klasörüne (dosyayı azure.yaml içeren klasör) geri dönün:

    cd ..
    
  1. Hâlâ kök proje klasöründe (dosyayı azure.yaml içeren klasör) olduğundan emin olun.
  1. Azure hesabınızla kimlik doğrulaması için bu komutu çalıştırın:

    azd auth login
    
  2. Gerekli Azure kaynaklarını oluşturmak için kök proje klasöründen azd bu komutu çalıştırın:

    azd provision
    

    Kök klasör, azure.yaml için gerekli olan azd tanım dosyasını içerir.

  3. İstendiğinde şu gerekli dağıtım parametrelerini sağlayın:

    Parametre Description
    Azure aboneliği Kaynaklarınızın oluşturulduğu abonelik. Hesabınızda birden fazla kiracı varsa, önce kiracınızı seçmelisiniz.
    Azure veri merkezi konumu Yeni Azure kaynaklarını içeren kaynak grubunun oluşturulacağı Azure bölgesi. Yalnızca şu anda Esnek Tüketim planını destekleyen bölgeler gösterilir.
    vnetEnabled Sanal bir ağda dağıtılıp dağıtılmayacağı. Bu hızlı başlangıç için false seçeneğini seçin.

    Komut, azd provision bu çağrılara verdiğiniz yanıtları Bicep yapılandırma dosyalarıyla kullanarak gerekli Azure kaynaklarını oluşturur ve yapılandırır:

    • Esnek Tüketim Planı ve Fonksiyon Uygulaması
    • Azure Depolama (gerekli) ve Application Insights (önerilir)
    • Dayanıklı Görev Zamanlayıcı ve görev merkezi
    • Hesabınız için ilkelere ve rollere erişme
    • Depolanan bağlantı dizeleri yerine yönetilen kimlikler kullanılarak kurulan hizmetler arası bağlantılar

    Komut başarıyla tamamlandıktan sonra, oluşturduğunuz kaynakların bağlantılarını görürsünüz.

    Provisioning ayrıca uygulama klasörünüzde local.settings.json bir dosya oluşturan post-provision betiği çalıştırır. Bu dosya, projeyi yerel olarak çalıştırmak için ihtiyacınız olan dağıtılmış Durable Task Scheduler uç noktasının bağlantı ayarlarını içerir.

Azurite'i başlatma

Projeyi yerel olarak çalıştırmak için Functions çalışma zamanında yerel bir depolama emülatörü gerekir. local.settings.json dosyasındaki ayar "AzureWebJobsStorage": "UseDevelopmentStorage=true" , çalışma zamanını bu amaçla Azurite kullanması için yönlendirir.

Yeni bir terminal penceresinde, Azurite'i başlatmak için şu komutu çalıştırın:

azurite --skipApiVersionCheck --location ~/azurite-data

Yerel olarak test ederken Azurite'ı bu terminal penceresinde çalışır durumda tutun.

Yerel ortamınızda çalıştırma

  1. Orijinal terminalinizde, fanoutfanin uygulama klasörüne gidin ve Functions sunucusunu başlatın:

    cd fanoutfanin
    func start
    

    İşlevler ana bilgisayarı yerel proje klasörünüzde başladığında, HTTP ile tetiklenen işlevlerinizin yerel URL uç noktalarını terminal çıkışına yazar.

    Note

    Yerel olarak çalıştırılırken erişim anahtarı yetkilendirmesi zorunlu tutulmadığından, işlevinizi çağırmak için bir erişim anahtarına ihtiyacınız yoktur.

  2. Tarayıcınızda, düzenlemeyi başlatan uç noktaya bir GET isteği oluşturun:

    http://localhost:7071/api/FetchOrchestration_HttpStart

    Bu istek yeni bir düzenleme örneği başlatır. Düzenleme, Microsoft Learn makalelerinin başlıklarını paralel olarak getirmek için çeşitli etkinliklere odaklanır. Etkinlikler bittiğinde, orkestrasyon birimleri başlangıç konumlarına geri döner ve başlıkları biçimlendirilmiş bir dize şeklinde geri döndürür.

  1. Orijinal terminalinizde, uygulama klasörüne gidin src , sanal bir ortam oluşturun ve etkinleştirin, bağımlılıkları yükleyin ve Functions sunucusunu başlatın:

    cd src
    

    Sanal ortamınızı (adlandırılmış .venv) oluşturma ve etkinleştirme şekliniz, terminalinize bağlıdır:

    python3 -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt
    func start
    

    İşlevler ana bilgisayarı yerel proje klasörünüzde başladığında, HTTP ile tetiklenen işlevlerinizin yerel URL uç noktalarını terminal çıkışına yazar.

    Note

    Yerel olarak çalıştırılırken erişim anahtarı yetkilendirmesi zorunlu tutulmadığından, işlevinizi çağırmak için bir erişim anahtarına ihtiyacınız yoktur.

  2. Tarayıcınızda HTTP başlangıç uç noktasına bir GET isteğinde bulunın:

    http://localhost:7071/api/orchestrators/fetch_orchestration

    Bu istek yeni bir düzenleme örneği başlatır. Düzenleme, Microsoft Learn makalelerinin başlıklarını paralel olarak getirmek için çeşitli etkinliklere odaklanır. Etkinlikler bittiğinde, orkestrasyon birimleri başlangıç konumlarına geri döner ve başlıkları biçimlendirilmiş bir dize şeklinde geri döndürür.

  1. Orijinal terminalinizde, src uygulama klasörüne gidin, bağımlılıkları yükleyin, projeyi oluşturun ve Fonksiyonlar ana bilgisayarını başlatın:

    cd src
    npm install
    npm run build
    func start
    

    İşlevler ana bilgisayarı yerel proje klasörünüzde başladığında, HTTP ile tetiklenen işlevlerinizin yerel URL uç noktalarını terminal çıkışına yazar.

    Note

    Yerel olarak çalıştırılırken erişim anahtarı yetkilendirmesi zorunlu tutulmadığından, işlevinizi çağırmak için bir erişim anahtarına ihtiyacınız yoktur.

  2. Tarayıcınızda HTTP başlangıç uç noktasına bir GET isteğinde bulunın:

    http://localhost:7071/api/orchestrators/fetchOrchestration

    Bu istek yeni bir düzenleme örneği başlatır. Düzenleme, Microsoft Learn makalelerinin başlıklarını paralel olarak getirmek için çeşitli etkinliklere odaklanır. Etkinlikler bittiğinde, orkestrasyon birimleri başlangıç konumlarına geri döner ve başlıkları biçimlendirilmiş bir dize şeklinde geri döndürür.

  1. Orijinal terminalinizde projeyi oluşturun ve ardından Fonksiyonlar hostunu build çıktı klasöründen başlatın:

    mvn clean package
    cd target/azure-functions/durable-functions-quickstart
    func start
    

    İşlevler ana bilgisayarı yerel proje klasörünüzde başladığında, HTTP ile tetiklenen işlevlerinizin yerel URL uç noktalarını terminal çıkışına yazar.

    Note

    Yerel olarak çalıştırılırken erişim anahtarı yetkilendirmesi zorunlu tutulmadığından, işlevinizi çağırmak için bir erişim anahtarına ihtiyacınız yoktur.

  2. Tarayıcınızda, düzenlemeyi başlatan uç noktaya bir GET isteği oluşturun:

    http://localhost:7071/api/FetchOrchestration_HttpStart

    Bu istek yeni bir düzenleme örneği başlatır. Düzenleme, Microsoft Learn makalelerinin başlıklarını paralel olarak getirmek için çeşitli etkinliklere odaklanır. Etkinlikler bittiğinde, orkestrasyon birimleri başlangıç konumlarına geri döner ve başlıkları biçimlendirilmiş bir dize şeklinde geri döndürür.

  1. Orijinal terminalinizde uygulama klasörüne gidin src , bağımlılıkları yükleyin ve Functions host'u başlatın:

    cd src
    npm install
    func start
    

    İşlevler ana bilgisayarı yerel proje klasörünüzde başladığında, HTTP ile tetiklenen işlevlerinizin yerel URL uç noktalarını terminal çıkışına yazar.

    Note

    Yerel olarak çalıştırılırken erişim anahtarı yetkilendirmesi zorunlu tutulmadığından, işlevinizi çağırmak için bir erişim anahtarına ihtiyacınız yoktur.

  2. Tarayıcınızda, düzenlemeyi başlatan uç noktaya bir GET isteği oluşturun:

    http://localhost:7071/api/FetchOrchestration_HttpStart

    Bu istek yeni bir düzenleme örneği başlatır. Düzenleme, Microsoft Learn makalelerinin başlıklarını paralel olarak getirmek için çeşitli etkinliklere odaklanır. Etkinlikler bittiğinde, orkestrasyon birimleri başlangıç konumlarına geri döner ve başlıkları biçimlendirilmiş bir dize şeklinde geri döndürür.

  1. Orijinal terminalinizde, src uygulama klasörüne gidin ve Functions sunucusunu başlatın:

    cd src
    func start
    

    İşlevler ana bilgisayarı yerel proje klasörünüzde başladığında, HTTP ile tetiklenen işlevlerinizin yerel URL uç noktalarını terminal çıkışına yazar.

    Note

    Yerel olarak çalıştırılırken erişim anahtarı yetkilendirmesi zorunlu tutulmadığından, işlevinizi çağırmak için bir erişim anahtarına ihtiyacınız yoktur.

  2. Tarayıcınızda, düzenlemeyi başlatan uç noktaya bir GET isteği oluşturun:

    http://localhost:7071/api/FetchOrchestration_HttpStart

    Bu istek yeni bir düzenleme örneği başlatır. Düzenleme, Microsoft Learn makalelerinin başlıklarını paralel olarak getirmek için çeşitli etkinliklere odaklanır. Etkinlikler bittiğinde, orkestrasyon birimleri başlangıç konumlarına geri döner ve başlıkları biçimlendirilmiş bir dize şeklinde geri döndürür.

  1. HTTP uç noktası, çeşitli URL'lere sahip bir JSON yanıtı döndürür. Endpoint statusQueryGetUri orkestrasyon durumunu sağlar.

  2. Düzenlemenin statusQueryGetUri durumunu denetlemek için değeri kopyalayın ve tarayıcınıza veya HTTP test aracınıza yapıştırın. Orkestrasyon tamamlandığında, yanıtta getirilen makale başlıklarını görürsünüz.

  3. İşiniz bittiğinde, ana bilgisayar işlemini durdurmak func için terminal penceresinde Ctrl+C tuşlarına basın.

  1. Sanal ortamı kapatmak için komutunu çalıştırın deactivate .

Kodu gözden geçirme (isteğe bağlı)

** Fan-out/fan-in desenini uygulayan kodu inceleyebilirsiniz.

Başlık getirme etkinlikleri dinamik görev listesi kullanılarak izlenir. Satır await Task.WhenAll(parallelTasks); , eş zamanlı olarak çalışan tüm çağrılan etkinliklerin tamamlanmasını bekler. İşiniz bittiğinde, tüm çıkışlar biçimlendirilmiş bir dize olarak toplanır.

[Function(nameof(FetchOrchestration))]
public static async Task<string> RunOrchestrator(
    [OrchestrationTrigger] TaskOrchestrationContext context)
{
    ILogger logger = context.CreateReplaySafeLogger(nameof(FetchOrchestration));
    logger.LogInformation("Fetching data.");
    var parallelTasks = new List<Task<string>>();
    
    // List of URLs to fetch titles from
    var urls = new List<string>
    {
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
        "https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
        "https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps",
    };

    // Run fetching tasks in parallel
    foreach (var url in urls)
    {
        Task<string> task = context.CallActivityAsync<string>(nameof(FetchTitleAsync), url);
        parallelTasks.Add(task);
    }
    
    // Wait for all the parallel tasks to complete before continuing
    await Task.WhenAll(parallelTasks);
   
    // Return fetched titles as a formatted string
    return string.Join("; ", parallelTasks.Select(t => t.Result));
}

Şablon projesinin tamamını burada gözden geçirebilirsiniz.

Başlık getirme etkinlikleri dinamik görev listesi kullanılarak izlenir. Satır yield context.task_all(tasks) , eş zamanlı olarak çalışan tüm çağrılan etkinliklerin tamamlanmasını bekler. İşiniz bittiğinde, tüm çıkışlar biçimlendirilmiş bir dize olarak toplanır.

    # List of URLs to fetch titles from
    urls = [
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
        "https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
        "https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps",
    ]
    
    # Run fetching tasks in parallel
    tasks = []
    for url in urls:
        task = context.call_activity("fetch_title", url)
        tasks.append(task)
    
    # Wait for all the parallel tasks to complete before continuing
    results = yield context.task_all(tasks)
    
    # Return fetched titles as a formatted string
    return "; ".join(results)


@myApp.activity_trigger(input_name="url")
async def fetch_title(url: str):
    """Activity function that fetches the title from a URL."""
    logger = logging.getLogger("FetchTitle")
    logger.info(f"Fetching from url {url}.")
    
    try:
        async with ClientSession() as session:

Şablon projesinin tamamını burada gözden geçirebilirsiniz.

Başlık getirme etkinlikleri dinamik görev listesi kullanılarak izlenir. Satır yield context.df.Task.all(parallelTasks) , eş zamanlı olarak çalışan tüm çağrılan etkinliklerin tamamlanmasını bekler. İşiniz bittiğinde, tüm çıkışlar biçimlendirilmiş bir dize olarak toplanır.

    const urls = [
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
        "https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
        "https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps",
    ];

    // Run fetching tasks in parallel
    const parallelTasks = [];
    for (const url of urls) {
        const task = context.df.callActivity(fetchTitleActivityName, url);
        parallelTasks.push(task);
    }

    // Wait for all the parallel tasks to complete before continuing
    const results: string[] = yield context.df.Task.all(parallelTasks);

    // Return fetched titles as a formatted string
    return results.join("; ");
};
df.app.orchestration("fetchOrchestration", fetchOrchestration);

const fetchTitleAsync: ActivityHandler = async function (
    url: string,
    context: InvocationContext

Şablon projesinin tamamını burada gözden geçirebilirsiniz.

Başlık getirme etkinlikleri dinamik görev listesi kullanılarak izlenir. Satır ctx.allOf(parallelTasks).await() , eş zamanlı olarak çalışan tüm çağrılan etkinliklerin tamamlanmasını bekler. İşiniz bittiğinde, tüm çıkışlar biçimlendirilmiş bir dize olarak toplanır.

@FunctionName("FetchOrchestration")
public String runOrchestrator(
        @DurableOrchestrationTrigger(name = "taskOrchestrationContext") TaskOrchestrationContext ctx) {

    List<String> urls = List.of(
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
        "https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
        "https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps"
    );

    // Fan out: run fetching tasks in parallel
    List<Task<String>> parallelTasks = urls.stream()
        .map(url -> ctx.callActivity("FetchTitle", url, String.class))
        .collect(Collectors.toList());

    // Fan in: wait for all parallel tasks to complete
    List<String> results = ctx.allOf(parallelTasks).await();

    // Return fetched titles as a formatted string
    return String.join("; ", results);
}

Şablon projesinin tamamını burada gözden geçirebilirsiniz.

Başlık getirme etkinlikleri dinamik görev listesi kullanılarak izlenir. Satır yield context.df.Task.all(parallelTasks) , eş zamanlı olarak çalışan tüm çağrılan etkinliklerin tamamlanmasını bekler. İşiniz bittiğinde, tüm çıkışlar biçimlendirilmiş bir dize olarak toplanır.

df.app.orchestration('fetchOrchestration', function* (context) {
    context.log("Fetching data.");

    const urls = [
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
        "https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
        "https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
        "https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps",
    ];

    // Fan out: run fetching tasks in parallel
    const parallelTasks = urls.map(url => context.df.callActivity(activityName, url));

    // Fan in: wait for all parallel tasks to complete
    const results = yield context.df.Task.all(parallelTasks);

    // Return fetched titles as a formatted string
    return results.join("; ");
});

Şablon projesinin tamamını burada gözden geçirebilirsiniz.

Başlık getirme etkinlikleri dinamik görev listesi kullanılarak izlenir. Satır Wait-ActivityFunction -Task $parallelTasks , eş zamanlı olarak çalışan tüm çağrılan etkinliklerin tamamlanmasını bekler. İşiniz bittiğinde, tüm çıkışlar biçimlendirilmiş bir dize olarak toplanır.

param($Context)

$urls = @(
    "https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-overview",
    "https://learn.microsoft.com/azure/azure-functions/durable/durable-task-scheduler/durable-task-scheduler",
    "https://learn.microsoft.com/azure/azure-functions/functions-scenarios",
    "https://learn.microsoft.com/azure/azure-functions/functions-create-ai-enabled-apps"
)

# Fan out: run fetching tasks in parallel
$parallelTasks = @()
foreach ($url in $urls) {
    $parallelTasks += Invoke-DurableActivity -FunctionName 'FetchTitle' -Input $url -NoWait
}

# Fan in: wait for all parallel tasks to complete
$results = Wait-ActivityFunction -Task $parallelTasks

# Return fetched titles as a formatted string
$output = $results -join "; "
$output

Şablon projesinin tamamını burada gözden geçirebilirsiniz.

Fonksiyonlarınızı yerel olarak doğruladıktan sonra, onları Azure'a dağıtma zamanı gelmiştir.

Azure'a dağıtım yap

Kod projenizi Azure'daki fonksiyon uygulamasına dağıtmak için kök proje klasöründen bu komutu çalıştırın:

azd deploy

azd deploy komutu, kodunuzu sağlama sırasında oluşturulan işlev uygulamasına paketler ve dağıtır. Komut tamamlandıktan sonra uygulama dağıtılan pakette başlar ve çalışır.

İşlevi Azure'da çağırma

Artık URL'sine http isteğinde bulunarak Azure'da düzenleme uç noktanızı çağırabilirsiniz. İşlevleriniz Azure'da çalıştırıldığında, erişim anahtarı yetkilendirmesi zorlanır ve isteğinizle birlikte bir işlev erişim anahtarı sağlamanız gerekir.

Azure'daki orkestrasyonu başlatan HTTP tetikleyicisinin URL uç noktasını almak için Çekirdek Araçları'nı kullanabilirsiniz.

  1. Yerel terminalinizde veya komut isteminizde şu komutları çalıştırarak URL uç noktası değerlerini alın:

    APP_NAME=$(azd env get-value AZURE_FUNCTION_NAME)
    func azure functionapp list-functions $APP_NAME --show-keys
    

    komut, azd env get-value işlev uygulamanızın adını yerel ortamdan alır. ile --show-keysseçeneğini kullandığınızdafunc azure functionapp list-functions, her uç nokta için döndürülen Invoke URL: değeri gerekli işlev düzeyinde erişim anahtarlarını içerir.

  2. Azure'da çalışan fonksiyon uygulamanızda orkestrasyonu başlatmak için HTTP başlangıç uç noktasına GET talebi yapmak için bir tarayıcı veya HTTP test aracı kullanın.

Kodunuzu yeniden dağıtma

Kod güncellemelerini işlev uygulamanıza dağıtmak için ihtiyacınız olduğu kadar çalıştırın azd deploy . Azure kaynaklarını güncellemeniz gerekiyorsa, tekrar çalıştırınazd provision.

Note

En son dağıtım paketi, daima dağıtılan kod dosyalarının üzerine yazar.

İstemlere ve tarafından azd oluşturulan tüm ortam değişkenlerine azd yönelik ilk yanıtlarınız adlandırılmış ortamınızda yerel olarak depolanır. ortamınızda Azure kaynakları oluştururken kullandığınız tüm değişkenleri gözden geçirmek için azd env get-values komutunu kullanın.

Kaynakları temizle

İşlev uygulamanızla ve ilgili kaynaklarla çalışmayı bitirdiğinizde, işlev uygulamasını ve ilgili kaynaklarını Azure'dan silmek ve başka maliyetlerle karşılaşmamak için bu komutu kullanın:

azd down --no-prompt

Note

--no-prompt seçeneği, azd'e sizden onay almadan kaynak grubunuzu silmek üzere talimat verir.

Bu komut yerel kod projenizi etkilemez.