Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule użyjesz interfejsu wiersza polecenia dla deweloperów platformy Azure (azd), aby utworzyć funkcję wyzwalacza czasomierza w celu uruchomienia zaplanowanego zadania w usłudze Azure Functions. Po zweryfikowaniu kodu lokalnie należy wdrożyć go w nowej aplikacji funkcji bezserwerowej utworzonej w planie Flex Consumption w usłudze Azure Functions.
Źródło projektu używa azd do tworzenia aplikacji funkcji i powiązanych zasobów oraz wdrażania kodu w Azure. To wdrożenie jest zgodne z bieżącymi najlepszymi rozwiązaniami dotyczącymi bezpiecznych i skalowalnych wdrożeń usługi Azure Functions.
Domyślnie plan Flex Consumption stosuje model rozliczeń płatności za to, co wykorzystujesz, co pozwala na ukończenie tego artykułu i poniesienie tylko niewielkiego kosztu kilku centów amerykańskich lub mniej na koncie platformy Azure.
Ważne
Uruchamianie zaplanowanych zadań jest obsługiwane dla wszystkich języków, jednak ten scenariusz szybkiego startu zawiera obecnie przykłady tylko dla C#, Python i TypeScript. Aby ukończyć ten szybki start, wybierz jeden z tych obsługiwanych języków u góry artykułu.
Wymagania wstępne
- Node.js 22 lub nowsze
Python 3.11 lub nowszy
Konto Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
Inicjowanie projektu
Użyj polecenia , azd init aby utworzyć lokalny projekt kodu usługi Azure Functions na podstawie szablonu.
W lokalnym terminalu lub wierszu polecenia uruchom to
azd initpolecenie w pustym folderze:azd init --template functions-quickstart-dotnet-azd-timer -e scheduled-dotnetTo polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze. Flaga
-eustawia nazwę bieżącego środowiska. Wazdśrodowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Nazwa środowiska jest również używana w nazwie grupy zasobów utworzonej na platformie Azure.Uruchom to polecenie, aby przejść do folderu aplikacji:
cd srcUtwórz plik o nazwie local.settings.json w
srcfolderze zawierającym te dane JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "TIMER_SCHEDULE": "*/30 * * * * *" } }Ten plik jest wymagany podczas uruchamiania lokalnego.
W lokalnym terminalu lub wierszu polecenia uruchom to
azd initpolecenie w pustym folderze:azd init --template functions-quickstart-typescript-azd-timer -e scheduled-tsTo polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze. Flaga
-eustawia nazwę bieżącego środowiska. Wazdśrodowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Nazwa środowiska jest również używana w nazwie grupy zasobów utworzonej na platformie Azure.Utwórz plik o nazwie local.settings.json w
srcfolderze zawierającym te dane JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node", "TIMER_SCHEDULE": "*/30 * * * * *" } }Ten plik jest wymagany podczas uruchamiania lokalnego.
W lokalnym terminalu lub wierszu polecenia uruchom to
azd initpolecenie w pustym folderze:azd init --template functions-quickstart-python-azd-timer -e scheduled-pyTo polecenie ściąga pliki projektu z repozytorium szablonów i inicjuje projekt w bieżącym folderze. Flaga
-eustawia nazwę bieżącego środowiska. Wazdśrodowisko systemowe zapewnia unikatowy kontekst wdrażania dla twojej aplikacji i można zdefiniować więcej niż jeden z nich. Nazwa środowiska jest również używana w nazwie grupy zasobów utworzonej na platformie Azure.Utwórz plik o nazwie local.settings.json w
srcfolderze zawierającym te dane JSON:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "python", "TIMER_SCHEDULE": "*/30 * * * * *" } }Ten plik jest wymagany podczas uruchamiania lokalnego.
Tworzenie i aktywowanie środowiska wirtualnego
W folderze głównym uruchom następujące polecenia, aby utworzyć i aktywować środowisko wirtualne o nazwie .venv:
python3 -m venv .venv
source .venv/bin/activate
Jeśli język Python nie instaluje pakietu venv w dystrybucji systemu Linux, uruchom następujące polecenie:
sudo apt-get install python3-venv
Uruchamianie w środowisku lokalnym
Uruchom to polecenie z folderu aplikacji w terminalu lub wierszu polecenia:
func start
Uruchom to polecenie z folderu aplikacji w terminalu lub wierszu polecenia:
npm install npm start
Gdy host usługi Functions zostanie uruchomiony w lokalnym folderze projektu, zapisuje informacje o funkcji wyzwalanej przez czasomierz w danych wyjściowych terminalu. Powinieneś zobaczyć wykonanie funkcji wyzwolonej przez timer zgodnie z harmonogramem określonym w kodzie.
Domyślny harmonogram to
*/30 * * * * *, który jest uruchamiany co 30 sekund.Po zakończeniu naciśnij Ctrl+C w oknie terminalu
func.exe, aby zatrzymać proces hosta.
- Uruchom polecenie
deactivate, aby zamknąć środowisko wirtualne.
Przejrzyj kod (opcjonalnie)
Możesz przejrzeć kod definiujący funkcję wyzwalacza czasomierza:
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!");
}
}
}
}
Pełny projekt szablonu można przejrzeć tutaj.
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
});
Pełny projekt szablonu można przejrzeć tutaj.
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!')
Pełny projekt szablonu można przejrzeć tutaj.
Po zweryfikowaniu funkcji lokalnie nadszedł czas, aby opublikować ją na platformie Azure.
Wdrażanie na platformie Azure
Ten projekt jest skonfigurowany do używania polecenia azd up do wdrożenia kodu w nowej aplikacji funkcji w planie Flex Consumption na platformie Azure.
Wskazówka
Ten projekt zawiera zestaw plików Bicep używanych azd do tworzenia bezpiecznego wdrożenia w planie zużycia Flex, który jest zgodny z najlepszymi rozwiązaniami.
Uruchom to polecenie, aby
azdutworzyć wymagane zasoby platformy Azure na platformie Azure i wdrożyć projekt kodu w nowej aplikacji funkcji:azd upFolder główny zawiera
azure.yamlplik definicji wymagany przezazdprogram .Jeśli jeszcze nie zalogowano się, zostanie wyświetlony monit o uwierzytelnienie przy użyciu konta platformy Azure.
Po wyświetleniu monitu podaj następujące wymagane parametry wdrożenia:
Parameter Description Subskrypcja platformy Azure Subskrypcja, w której są tworzone zasoby. Lokalizacja platformy Azure Region platformy Azure, w którym ma zostać utworzona grupa zasobów zawierająca nowe zasoby platformy Azure. Wyświetlane są tylko regiony, które obecnie obsługują plan Flex Consumption. Polecenie
azd upużywa odpowiedzi na te monity z plikami konfiguracji Bicep, aby wykonać następujące zadania wdrażania:Utwórz i skonfiguruj te wymagane zasoby platformy Azure (równoważne ):
azd provision- Flex Consumption plan i aplikacja funkcji
- Azure Storage (wymagane) i Application Insights (zalecane)
- Zasady dostępu i role dla twojego konta
- Połączenia między usługami przy użyciu tożsamości zarządzanych (zamiast przechowywanych parametry połączenia)
- Sieć wirtualna do bezpiecznego uruchamiania aplikacji funkcji i innych zasobów platformy Azure
Spakuj i wdróż kod w kontenerze wdrażania (odpowiednik
azd deploy). Aplikacja jest następnie uruchamiana i uruchamiana w wdrożonym pakiecie.
Po pomyślnym zakończeniu działania polecenia zobaczysz linki do utworzonych zasobów.
Weryfikowanie wdrożenia
Po zakończeniu wdrażania funkcja wyzwalacza czasomierza automatycznie uruchamia się na platformie Azure na podstawie harmonogramu.
W portalu Azure przejdź do swojej nowej aplikacji funkcji.
Wybierz Strumień logów z menu po lewej stronie, aby monitorować wykonywanie funkcji w czasie rzeczywistym.
Powinny zostać wyświetlone wpisy dziennika, które pokazują funkcję wyzwalacza czasomierza wykonywaną zgodnie z harmonogramem.
Ponowne wdrażanie kodu
azd up Uruchom polecenie tyle razy, ile potrzebujesz, aby aprowizować zasoby platformy Azure i wdrażać aktualizacje kodu w aplikacji funkcji.
Uwaga / Notatka
Wdrożone pliki kodu są zawsze zastępowane przez najnowszy pakiet wdrożeniowy.
Początkowe odpowiedzi na azd monity i wszystkie zmienne środowiskowe wygenerowane przez azd program są przechowywane lokalnie w nazwanym środowisku. Użyj polecenia , azd env get-values aby przejrzeć wszystkie zmienne w środowisku, które zostały użyte podczas tworzenia zasobów platformy Azure.
Uprzątnij zasoby
Po zakończeniu pracy z aplikacją funkcji i powiązanymi zasobami użyj tego polecenia, aby usunąć aplikację funkcji i powiązane z nią zasoby z platformy Azure i uniknąć ponoszenia dodatkowych kosztów:
azd down --no-prompt
Uwaga / Notatka
Opcja --no-prompt powoduje azd usunięcie grupy zasobów bez potwierdzenia.
To polecenie nie ma wpływu na lokalny projekt kodu.