Wyzwalacze i powiązania Azure Functions
Napisz funkcję wyzwalaną żądaniem HTTP, dodaj powiązanie wyjściowe zapisujące dane w Azure Queue Storage oraz poznaj model automatycznego skalowania planu Consumption Plan.
Wyzwalacze i powiązania Azure Functions to bezpłatna lekcja Azure Fundamentals na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Azure Fundamentals, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Azure Fundamentals zawiera 4 lekcji w sumie.
Czym jest Azure Functions?
Azure Functions to bezserwerowa usługa obliczeniowa, która umożliwia uruchamianie małych jednostek kodu (funkcji) w odpowiedzi na zdarzenia bez zarządzania infrastrukturą. Płacisz tylko za czas wykonywania i ilość pamięci używanej podczas działania funkcji — gdy funkcja jest bezczynna, nie jest naliczana opłata. Functions doskonale nadaje się do zadań sterowanych zdarzeniami, lekkich interfejsów API, zadań zaplanowanych oraz integrowania usług chmurowych bez konieczności używania stale działającego serwera.
Wyzwalacze: co uruchamia funkcję
Każda funkcja Azure Function musi mieć dokładnie jeden wyzwalacz, który definiuje zdarzenie powodujące jej wykonanie. Typowe wyzwalacze to HTTP (przychodzące żądanie HTTP), Timer (harmonogram CRON), Blob Storage (nowy blob w kontenerze), Queue Storage (nowa wiadomość w kolejce), Event Hub (strumień zdarzeń), Service Bus (wiadomość w kolejce lub temacie) oraz Cosmos DB (kanał zmian). Wyzwalacz odbiera dane zdarzenia i przekazuje je do kodu funkcji.
// HTTP trigger function (JavaScript/Node.js)
module.exports = async function (context, req) {
const name = req.query.name || (req.body && req.body.name);
const message = name ? 'Hello, ' + name : 'Pass a name in the query or body';
context.res = {
status: 200,
body: { message }
};
};Function.json: konfiguracja wyzwalaczy i powiązań
W językach interpretowanych (JavaScript, Python) plik function.json znajdujący się w katalogu każdej funkcji deklaruje jej wyzwalacze i powiązania. Plik ten mapuje źródła zdarzeń i dane wyjściowe na nazwane parametry w kodzie funkcji. W językach C# i Java powiązania są deklarowane bezpośrednio w kodzie za pomocą atrybutów/adnotacji. Środowisko uruchomieniowe Functions odczytuje konfigurację i automatycznie konfiguruje połączenia z usługami Azure.
// function.json — HTTP trigger + Queue output binding
{
'bindings': [
{
'authLevel': 'function',
'type': 'httpTrigger',
'direction': 'in',
'name': 'req',
'methods': ['post']
},
{
'type': 'http',
'direction': 'out',
'name': 'res'
},
{
'type': 'queue',
'direction': 'out',
'name': 'outputQueue',
'queueName': 'processing-queue',
'connection': 'AzureWebJobsStorage'
}
]
}Powiązania wyjściowe: zapisywanie w usługach
Powiązania wyjściowe umożliwiają funkcji zapisywanie danych w usługach Azure (Blob Storage, Queue Storage, Cosmos DB, Event Hub itd.) bez zarządzania zestawami SDK ani parametrami połączeń. Wystarczy przypisać wartość do parametru powiązania wyjściowego, a środowisko uruchomieniowe Functions obsłuży zapis. Znacznie ogranicza to ilość kodu pomocniczego i oddziela funkcję od szczegółów implementacji konkretnej usługi Azure.
// HTTP trigger with Queue output binding (Node.js)
module.exports = async function (context, req) {
const orderData = req.body;
// Write to queue via output binding -- no SDK needed!
context.bindings.outputQueue = JSON.stringify({
orderId: orderData.id,
timestamp: new Date().toISOString()
});
context.res = { status: 202, body: 'Order queued' };
};Wyzwalacz czasowy z wyrażeniami CRON
Wyzwalacz Timer uruchamia funkcję zgodnie z harmonogramem zdefiniowanym za pomocą wyrażenia CRON. Azure Functions używa sześcioelementowego formatu CRON: {seconds} {minutes} {hours} {day} {month} {day-of-week}. Użyj 0 0 * * * *, aby uruchamiać funkcję co godzinę, 0 0 0 * * *, aby uruchamiać ją codziennie o północy, lub 0 0 9-17 * * 1-5, aby uruchamiać ją co godzinę w godzinach pracy od poniedziałku do piątku. Funkcje czasowe są przydatne do zadań czyszczenia, generowania raportów i sprawdzania kondycji.
// Timer trigger — runs every day at 02:00 UTC
// function.json binding:
// {
// 'type': 'timerTrigger',
// 'schedule': '0 0 2 * * *',
// 'name': 'myTimer'
// }
module.exports = async function (context, myTimer) {
const now = new Date().toISOString();
context.log('Daily cleanup started at', now);
// ... perform cleanup logic ...
context.log('Cleanup completed');
};Plan Consumption: skalowanie bezserwerowe
W ramach planu Consumption Azure Functions automatycznie skaluje się od zera do setek instancji na podstawie częstotliwości zdarzeń wyzwalających. Płacisz tylko za liczbę wykonań i zużyte gigabajto-sekundy pamięci — pierwszy milion wykonań w miesiącu jest bezpłatny. Host Functions może skalować wyzwalacz HTTP do 200 instancji, a wyzwalacz kolejki — do liczby wiadomości w kolejce przetwarzanych jednocześnie. Zimny start (pierwsze wykonanie po okresie bezczynności) powoduje krótkie opóźnienie, które można ograniczyć dzięki wstępnie rozgrzanym instancjom w planie Premium.
# View billing details for a function app
az functionapp show \
--name myFunctionApp \
--resource-group MyRG \
--query '{name:name, plan:serverFarmId, state:state}'
# Create a Function App on Consumption plan
az functionapp create \
--name myFunctionApp \
--resource-group MyRG \
--consumption-plan-location eastus \
--runtime node \
--runtime-version 18 \
--storage-account mystorageaccountPlany Premium i Dedicated
Plan Premium eliminuje zimne starty dzięki utrzymywaniu wstępnie rozgrzanych instancji, dodaje integrację z VNet i umożliwia dłuższe limity czasu wykonywania (do 60 minut). Plan Dedicated (App Service) uruchamia funkcje w ramach tego samego planu App Service co aplikacje internetowe. Jest przydatny, gdy potrzebujesz przewidywalnych kosztów lub masz już zasoby obliczeniowe App Service, które możesz wykorzystać. Wybierz plan Consumption, jeśli zależy Ci na rzeczywiście bezserwerowym modelu kosztów, a plan Premium w przypadku funkcji wymagających wysokiej wydajności lub połączenia z VNet.
# Create a Function App on Premium plan (EP1)
az functionapp plan create \
--name MyPremiumPlan \
--resource-group MyRG \
--location eastus \
--sku EP1 \
--is-linux
az functionapp create \
--name myFunctionAppPremium \
--resource-group MyRG \
--plan MyPremiumPlan \
--runtime python \
--runtime-version 3.11 \
--storage-account mystorageaccountWdrażanie Azure Functions
Wdrażaj Azure Functions za pomocą narzędzi Azure Functions Core Tools (func azure functionapp publish), rozszerzenia VS Code, wdrażania ZIP za pośrednictwem interfejsu wiersza polecenia Azure CLI lub potoku CI/CD w Azure Pipelines albo GitHub Actions. W środowisku produkcyjnym zawsze wdrażaj z potoku, a nie z komputera dewelopera, aby mieć pewność, że do produkcji trafiają przetestowane i oznaczone wersje. Środowisko uruchomieniowe Functions obsługuje także wdrażanie kontenerów Docker, zapewniające pełną kontrolę nad środowiskiem uruchomieniowym.
# Local development: install Core Tools
npm install -g azure-functions-core-tools@4
# Start locally (triggers work against real Azure services)
func start
# Deploy to Azure
func azure functionapp publish myFunctionApp
# Or deploy via Azure CLI (ZIP deploy)
zip -r function.zip . --exclude '.git/*'
az functionapp deployment source config-zip \
--name myFunctionApp \
--resource-group MyRG \
--src function.zipUstawienia aplikacji i odwołania do Key Vault
Aplikacje Function przechowują konfigurację w ustawieniach aplikacji — w kodzie funkcji są one dostępne jako zmienne środowiskowe. Parametry połączeń, klucze API i wpisy tajne przechowuj jako ustawienia aplikacji. W środowisku produkcyjnym używaj odwołań do Key Vault, aby wartość była przechowywana w Key Vault i wskazywana w ustawieniu aplikacji wyłącznie według nazwy. Dzięki temu wpisy tajne nie są ujawniane w portalu ani artefaktach wdrożeniowych. Włącz tożsamość zarządzaną w aplikacji funkcji, aby uwierzytelniać się w Key Vault bez używania poświadczeń.
# Set application settings
az functionapp config appsettings set \
--name myFunctionApp \
--resource-group MyRG \
--settings \
STORAGE_CONNECTION='@Microsoft.KeyVault(SecretUri=https://mykv.vault.azure.net/secrets/storage-conn/)' \
COSMOS_DB_URI='https://mycosmosdb.documents.azure.com'
# In function code, read as normal env var
# const storageConn = process.env['STORAGE_CONNECTION'];Monitorowanie Functions za pomocą Application Insights
Azure Functions automatycznie integruje się z Application Insights, gdy podasz klucz instrumentacji lub parametry połączenia. Każde wykonanie funkcji jest śledzone jako żądanie, wraz z czasem trwania, informacją o powodzeniu lub niepowodzeniu oraz właściwościami niestandardowymi. Używaj funkcji Live Metrics w Application Insights do obserwowania wykonań w czasie rzeczywistym podczas testów, a bloku Failures do diagnozowania błędów wraz z pełnymi śladami wyjątków i wywołaniami zależności.
# Connect Application Insights to a Function App
az functionapp config appsettings set \
--name myFunctionApp \
--resource-group MyRG \
--settings \
APPLICATIONINSIGHTS_CONNECTION_STRING='InstrumentationKey=xxxxxxxx;...'
# Custom telemetry in function code (Node.js)
const appInsights = require('applicationinsights');
appInsights.setup().start();
const client = appInsights.defaultClient;
client.trackEvent({ name: 'OrderProcessed', properties: { orderId: '123' } });Współbieżność i sposób skalowania
W przypadku funkcji wyzwalanych przez kolejkę host Functions przetwarza wiele wiadomości równolegle. Skonfiguruj parametr batchSize w pliku host.json, aby określić, ile wiadomości pojedyncza instancja przetwarza jednocześnie. W przypadku wyzwalaczy HTTP skalowanie poziome automatycznie dodaje nowe instancje. Używaj parametrów maxConcurrentCalls (wyzwalacze Service Bus) lub maxPollingInterval (wyzwalacze kolejek), aby dostosować przepustowość i uniknąć przeciążania usług zależnych, takich jak bazy danych, podczas skalowania poziomego.
// host.json — tune queue trigger concurrency
{
'version': '2.0',
'extensions': {
'queues': {
'batchSize': 16, // messages per instance
'newBatchThreshold': 8, // fetch more when < 8 remain
'maxPollingInterval': '00:00:02',
'visibilityTimeout': '00:05:00'
}
},
'functionTimeout': '00:10:00'
}Szybki test
Sprawdź swoją znajomość zagadnień Microsoft Azure Fundamentals (AZ-900) omówionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji poznali Państwo: wyzwalacze definiują zdarzenie rozpoczynające działanie funkcji (HTTP, Timer, Queue, Blob itd.), powiązania wyjściowe pozwalają funkcjom zapisywać dane w usługach Azure bez używania kodu SDK, a plan Consumption zapewnia prawdziwe bezserwerowe skalowanie z rozliczaniem za każde wykonanie, od zera. W następnej części omówimy Durable Functions na potrzeby przepływów pracy ze stanem.
Często zadawane pytania
Czy lekcja „Wyzwalacze i powiązania Azure Functions” jest bezpłatna?
Tak — pełny tekst „Wyzwalacze i powiązania Azure Functions” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Azure Fundamentals, przejdź na CoddyKit PRO. Kurs Azure Fundamentals zawiera 4 lekcji w sumie.
Co nauczysz się w „Wyzwalacze i powiązania Azure Functions”?
Napisz funkcję wyzwalaną żądaniem HTTP, dodaj powiązanie wyjściowe zapisujące dane w Azure Queue Storage oraz poznaj model automatycznego skalowania planu Consumption Plan. Ćwiczysz Azure Fundamentals z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Azure Fundamentals?
Nie wymagamy żadnego doświadczenia. Azure Fundamentals w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Wyzwalacze i powiązania Azure Functions”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Azure Fundamentals?
Tak. Każda lekcja Azure Fundamentals zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wyzwalacze i powiązania Azure Functions
- Durable Functions dla przepływów pracy ze stanem
- Azure Logic Apps
- Event Grid i architektura sterowana zdarzeniami