Aracılığıyla paylaş


Hızlı Başlangıç: Azure İşlevlerini kullanarak zamanlanmış görevleri çalıştırma

Bu makalede, Azure İşlevleri'nde zamanlanmış bir görevi çalıştırmak üzere zamanlayıcı tetikleyici işlevi oluşturmak için Azure Geliştirici CLI'sini (azd) kullanacaksınız. Kodu yerel olarak doğruladıktan sonra Azure İşlevleri'nde Flex Consumption planında çalıştırarak oluşturduğunuz yeni bir sunucusuz işlev uygulamasına dağıtırsınız.

Proje kaynağı, işlev uygulamasını ve ilgili kaynakları oluşturmak ve kodunuzu Azure'a dağıtmak için kullanır azd . Bu dağıtım, güvenli ve ölçeklenebilir Azure İşlevleri dağıtımları için geçerli en iyi yöntemleri izler.

Flex Tüketim planı varsayılan olarak kullanabildiğiniz kadar öde faturalama modelini izler. Bu, bu makaleyi tamamlayabileceğiniz ve Azure hesabınızda yalnızca birkaç ABD doları veya daha az bir maliyete neden olabileceğiniz anlamına gelir.

Önemli

Zamanlanmış görevleri çalıştırmak tüm diller için destekleniyor olsa da, bu hızlı başlangıç senaryosunda şu anda yalnızca C#, Python ve TypeScript örnekleri vardır. Bu hızlı başlangıcı tamamlamak için makalenin üst kısmındaki desteklenen dillerden birini seçin.

Önkoşullar

  • .NET 8 SDK

Projeyi başlatma

azd init Komutunu kullanarak şablondan yerel bir Azure İşlevleri kod projesi oluşturun.

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

    azd init --template functions-quickstart-dotnet-azd-timer -e scheduled-dotnet
    

    Bu komut , proje dosyalarını şablon deposundan çeker ve projeyi geçerli klasörde başlatır. bayrağı geçerli -e 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. Uygulama klasörüne gitmek için şu komutu çalıştırın:

    cd src
    
  3. Bu JSON verilerini içeren klasörde local.settings.jsonsrc adlı bir dosya oluşturun:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "TIMER_SCHEDULE": "*/30 * * * * *"
        }
    }
    

    Bu dosya yerel olarak çalıştırılırken gereklidir.

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

    azd init --template functions-quickstart-typescript-azd-timer -e scheduled-ts
    

    Bu komut , proje dosyalarını şablon deposundan çeker ve projeyi geçerli klasörde başlatır. bayrağı geçerli -e 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. Bu JSON verilerini içeren klasörde local.settings.jsonsrc adlı bir dosya oluşturun:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "TIMER_SCHEDULE": "*/30 * * * * *"
        }
    }
    

    Bu dosya yerel olarak çalıştırılırken gereklidir.

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

    azd init --template functions-quickstart-python-azd-timer -e scheduled-py
    

    Bu komut , proje dosyalarını şablon deposundan çeker ve projeyi geçerli klasörde başlatır. bayrağı geçerli -e 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. Bu JSON verilerini içeren klasörde local.settings.jsonsrc adlı bir dosya oluşturun:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "python",
            "TIMER_SCHEDULE": "*/30 * * * * *"
        }
    }
    

    Bu dosya yerel olarak çalıştırılırken gereklidir.

Sanal ortam oluşturma ve etkinleştirme

Kök klasörde şu komutları çalıştırarak adlı .venvbir sanal ortam oluşturun ve etkinleştirin:

python3 -m venv .venv
source .venv/bin/activate

Python Venv paketini Linux dağıtımınıza yüklemezse aşağıdaki komutu çalıştırın:

sudo apt-get install python3-venv

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

  1. Bu komutu uygulama klasörünüzden bir terminal veya komut isteminde çalıştırın:

    func start
    
  1. Bu komutu uygulama klasörünüzden bir terminal veya komut isteminde çalıştırın:

    npm install
    npm start  
    
  1. İşlevler konağı yerel proje klasörünüzde başladığında, Zamanlayıcı ile tetiklenen işleviniz hakkındaki bilgileri terminal çıkışına yazar. Zamanlayıcı ile tetiklenen işlevinizin kodunuzda tanımlanan zamanlamaya göre yürütüldiğini görmeniz gerekir.

    Varsayılan zamanlama, her 30 saniyede bir çalışan zamanlamadır */30 * * * * *.

  2. İşiniz bittiğinde, ana bilgisayar işlemini durdurmak func.exe 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ı)

Zamanlayıcı tetikleyici işlevini tanımlayan kodu gözden geçirebilirsiniz:

using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Timer;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public class timerFunction
    {
        private readonly ILogger _logger;

        public timerFunction(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<timerFunction>();
        }

        [Function("timerFunction")]
        public void Run(
            [TimerTrigger("%TIMER_SCHEDULE%", RunOnStartup = true)] TimerInfo myTimer,
            FunctionContext context
        )
        {
            _logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

            if (myTimer.IsPastDue)
            {
                _logger.LogWarning("The timer is running late!");
            }
        }
    }
}

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

import { app, InvocationContext, Timer } from '@azure/functions';

export async function timerFunction(myTimer: Timer, context: InvocationContext): Promise<void> {
    context.log(`TypeScript Timer trigger function executed at: ${new Date().toISOString()}`);

    if (myTimer.isPastDue) {
        context.warn("The timer is running late!");
    }
}

app.timer('timerFunction', {
    schedule: '%TIMER_SCHEDULE%',
    runOnStartup: true,
    handler: timerFunction
});

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

import datetime
import logging

import azure.functions as func

# Create the function app instance
app = func.FunctionApp()

@app.timer_trigger(schedule="%TIMER_SCHEDULE%", 
                   arg_name="mytimer", 
                   run_on_startup=True,
                   use_monitor=False) 
def timer_function(mytimer: func.TimerRequest) -> None:
    utc_timestamp = datetime.datetime.now(datetime.timezone.utc).isoformat()
    
    logging.info(f'Python timer trigger function executed at: {utc_timestamp}')
    
    if mytimer.past_due:
        logging.warning('The timer is running late!')

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

İşlevinizi yerel olarak doğruladıktan sonra Azure'da yayımlamanın zamanı geldi.

Azure’a dağıtın

Azure'daki Flex Consumption planında yeni bir işlev uygulamasına kodunuzu dağıtmak için azd up komutunu kullanacak şekilde yapılandırılan bu projedir.

Tip

Bu proje, en iyi yöntemleri izleyen azd bir Flex tüketim planına güvenli dağıtım oluşturmak için kullanan bicep dosyaları kümesini içerir.

  1. Azure'da azd gerekli Azure kaynaklarını oluşturmak ve kod projenizi yeni işlev uygulamasına dağıtmak için şu komutu çalıştırın:

    azd up
    

    Kök klasör, için azure.yamlgereken tanım dosyasını içerirazd.

    Henüz oturum açmadıysanız Azure hesabınızla kimlik doğrulaması yapmanız istenir.

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

    Parametre Description
    Azure aboneliği Kaynaklarınızın oluşturulduğu abonelik.
    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.

    Komut, azd up bu dağıtım görevlerini tamamlamak için Bicep yapılandırma dosyalarıyla bu istemlere yanıtınızı kullanır:

    • Bu gerekli Azure kaynaklarını oluşturun ve yapılandırın (eşdeğeri azd provision):

      • Esnek Tüketim planı ve işlev uygulaması
      • Azure Depolama (gerekli) ve Application Insights (önerilir)
      • Hesabınız için ilkelere ve rollere erişme
      • Yönetilen kimlikleri kullanan hizmet-hizmet bağlantıları (depolanan bağlantı dizesi yerine)
      • Hem işlev uygulamasını hem de diğer Azure kaynaklarını güvenli bir şekilde çalıştırmak için sanal ağ
    • Kodunuzu paketleyin ve dağıtım kapsayıcısına dağıtın (eşdeğeri azd deploy). Ardından uygulama başlatılır ve dağıtılan pakette çalıştırılır.

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

Dağıtımı doğrulayın

Dağıtım tamamlandıktan sonra Zamanlayıcı tetikleyici işleviniz zamanlamaya göre Azure'da otomatik olarak çalışmaya başlar.

  1. Azure portalında yeni işlev uygulamanıza gidin.

  2. İşlev yürütmelerinizi gerçek zamanlı olarak izlemek için sol menüden Günlük akışı'nı seçin.

  3. Zamanlayıcı tetikleyici işlevinizin zamanlamasına göre yürütüldüğünü gösteren günlük girdilerini görmeniz gerekir.

Kodunuzu yeniden dağıtma

azd up Komutunu hem Azure kaynaklarınızı sağlamak hem de işlev uygulamanıza kod güncelleştirmeleri dağıtmak için gerektiği kadar çalıştırın.

Uyarı

Dağıtılan kod dosyalarının üzerine her zaman en son dağıtım paketi yazılır.

İ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. azd env get-values Azure kaynakları oluşturulurken kullanılan ortamınızdaki tüm değişkenleri gözden geçirmek için 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

Uyarı

seçeneği, --no-prompt sizden onay almadan kaynak grubunuzu silmenizi belirtir azd .

Bu komut yerel kod projenizi etkilemez.