Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
- Node.js 22 veya üzeri
Python 3.11 veya üzeri
Azure Geliştirici CLI
Aktif bir aboneliğe sahip bir Azure hesabı. Ücretsiz bir hesap oluşturun.
Projeyi başlatma
azd init Komutunu kullanarak şablondan yerel bir Azure İşlevleri kod projesi oluşturun.
Yerel terminalinizde veya komut isteminizde şu
azd initkomutu boş bir klasörde çalıştırın:azd init --template functions-quickstart-dotnet-azd-timer -e scheduled-dotnetBu komut , proje dosyalarını şablon deposundan çeker ve projeyi geçerli klasörde başlatır. bayrağı geçerli
-eortam için bir ad ayarlar. ortamındaazd, 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.Uygulama klasörüne gitmek için şu komutu çalıştırın:
cd srcBu JSON verilerini içeren klasörde local.settings.json
srcadlı 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.
Yerel terminalinizde veya komut isteminizde şu
azd initkomutu boş bir klasörde çalıştırın:azd init --template functions-quickstart-typescript-azd-timer -e scheduled-tsBu komut , proje dosyalarını şablon deposundan çeker ve projeyi geçerli klasörde başlatır. bayrağı geçerli
-eortam için bir ad ayarlar. ortamındaazd, 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.Bu JSON verilerini içeren klasörde local.settings.json
srcadlı 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.
Yerel terminalinizde veya komut isteminizde şu
azd initkomutu boş bir klasörde çalıştırın:azd init --template functions-quickstart-python-azd-timer -e scheduled-pyBu komut , proje dosyalarını şablon deposundan çeker ve projeyi geçerli klasörde başlatır. bayrağı geçerli
-eortam için bir ad ayarlar. ortamındaazd, 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.Bu JSON verilerini içeren klasörde local.settings.json
srcadlı 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
Bu komutu uygulama klasörünüzden bir terminal veya komut isteminde çalıştırın:
func start
Bu komutu uygulama klasörünüzden bir terminal veya komut isteminde çalıştırın:
npm install npm start
İş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 * * * * *.İşiniz bittiğinde, ana bilgisayar işlemini durdurmak
func.exeiçin terminal penceresinde Ctrl+C tuşlarına basın.
- 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.
Azure'da
azdgerekli Azure kaynaklarını oluşturmak ve kod projenizi yeni işlev uygulamasına dağıtmak için şu komutu çalıştırın:azd upKö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.
İ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 upbu 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.
Azure portalında yeni işlev uygulamanıza gidin.
İşlev yürütmelerinizi gerçek zamanlı olarak izlemek için sol menüden Günlük akışı'nı seçin.
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.