Erstellen Ihrer ersten dauerhaften Funktion in TypeScript

Durable Functions ist eine Erweiterung von Azure Functions, mit der Sie zustandsbehaftete Funktionen in einer serverlosen Umgebung schreiben können. Die Erweiterung verwaltet Status, Prüfpunkte und Neustarts für Sie.

In diesem Artikel erfahren Sie, wie Sie die Azure Functions-Erweiterung von Visual Studio Code verwenden, um lokal eine dauerhafte Funktion namens „hello world“ zu erstellen und zu testen. Mit dieser Funktion werden Aufrufe anderer Funktionen orchestriert und miteinander verkettet. Anschließend veröffentlichen Sie den Funktionscode in Azure.

Wichtig

Der Inhalt dieses Artikels ändert sich abhängig von dem Node.js-Programmiermodell, das Sie oben auf der Seite ausgewählt haben. Das v4-Modell ist allgemein verfügbar und bietet JavaScript- und TypeScript-Entwickler*innen eine flexiblere und intuitivere Erfahrung. Weitere Informationen zu den Unterschieden zwischen v3 und v4 finden Sie im Migrationshandbuch.

Screenshot eines Edgefensters. Das Fenster zeigt die Ausgabe des Aufrufens einer einfachen dauerhaften Funktion in Azure.

Voraussetzungen

Für dieses Tutorial benötigen Sie Folgendes:

  • Installieren Sie die VS Code-Erweiterungsversion 1.10.4 oder höher von Azure Functions.
  • Für Durable Functions ist ein Azure-Speicherkonto erforderlich. Sie benötigen ein Azure-Abonnement.
  • Vergewissern Sie sich, dass Sie Version 16.x oder höher von Node.js installiert haben.
  • Vergewissern Sie sich, dass Sie Version 18.x oder höher von Node.js installiert haben.
  • Stellen Sie sicher, dass Sie TypeScript v4.x oder höher installiert haben.

Sollten Sie über kein Azure-Abonnement verfügen, können Sie zunächst ein kostenloses Azure-Konto erstellen.

Erstellen Ihres lokalen Projekts

In diesem Abschnitt wird mithilfe von Visual Studio Code ein lokales Azure Functions-Projekt erstellt.

  1. Drücken Sie in Visual Studio Code F1 (oder STRG/BEFEHLSTASTE+UMSCHALT+P), um die Befehlspalette zu öffnen. Suchen Sie in der Befehlspalette den Befehl Azure Functions: Create New Project..., und wählen Sie ihn aus.

    Screenshot:Visual Studio Code-Befehlspalette. Der Befehl mit dem Titel „Azure Functions: Neues Projekt erstellen...“ ist hervorgehoben.

  2. Wählen Sie einen leeren Ordner für Ihr Projekt und anschließend Auswählen aus.

  1. Geben Sie gemäß der Eingabeaufforderungen die folgenden Informationen ein:

    Prompt Wert BESCHREIBUNG
    Auswählen einer Sprache für Ihr Funktions-App-Projekt TypeScript Erstellen Sie ein lokales Node.js-Functions-Projekt mit TypeScript.
    Auswählen eines JavaScript-Programmiermodells Modell V3 Wählen Sie das V3-Programmiermodell aus.
    „Select a version“ (Wählen Sie eine Version aus.) Azure Functions v4 Diese Option wird nur angezeigt, wenn die Core Tools noch nicht installiert sind. In diesem Fall werden die Core Tools beim erstmaligen Ausführen der App installiert.
    Auswählen einer Vorlage für die erste Funktion Ihres Projekts Vorerst überspringen
    Auswählen, wie Sie Ihr Projekt öffnen möchten Im aktuellen Fenster Öffnet VS Code wieder im ausgewählten Ordner.
  1. Geben Sie gemäß der Eingabeaufforderungen die folgenden Informationen ein:

    Prompt Wert BESCHREIBUNG
    Auswählen einer Sprache für Ihr Funktions-App-Projekt TypeScript Erstellen Sie ein lokales Node.js-Functions-Projekt mit TypeScript.
    Auswählen eines JavaScript-Programmiermodells Modell V4 Wählen Sie das V4-Programmiermodell aus.
    „Select a version“ (Wählen Sie eine Version aus.) Azure Functions v4 Diese Option wird nur angezeigt, wenn die Core Tools noch nicht installiert sind. In diesem Fall werden die Core Tools beim erstmaligen Ausführen der App installiert.
    Auswählen einer Vorlage für die erste Funktion Ihres Projekts Vorerst überspringen
    Auswählen, wie Sie Ihr Projekt öffnen möchten Im aktuellen Fenster Öffnet VS Code wieder im ausgewählten Ordner.

Von Visual Studio Code werden bei Bedarf die Azure Functions Core Tools installiert. Außerdem wird ein Funktions-App-Projekt in einem Ordner erstellt. Dieses Projekt enthält die Konfigurationsdateien host.json und local.settings.json.

Eine Datei package.json und eine Datei tsconfig.json werden ebenfalls im Stammordner erstellt.

Installieren des Durable Functions-npm-Pakets

Wenn Sie in einer Node.js-Funktionen-App mit Durable Functions arbeiten möchten, verwenden Sie eine Bibliothek namens durable-functions.

Um das V4-Programmiermodell verwenden zu können, müssen Sie die Vorschauversion v3.x von durable-functions installieren.

  1. Verwenden Sie das Menü Ansicht oder STRG+UMSCHALT+`, um in VS Code ein neues Terminal zu öffnen.
  1. Installieren Sie das durable-functions npm-Paket, indem Sie npm install durable-functions im Stammverzeichnis der Funktions-App ausführen.
  1. Installieren Sie die Vorschauversion durable-functions des npm-Pakets, indem Sie npm install durable-functions@preview im Stammverzeichnis der Funktions-App ausführen.

Erstellen Ihrer Funktionen

Die einfachste Durable Functions-App enthält drei Funktionen:

  • Orchestratorfunktion: Beschreibt einen Workflow, der andere Funktionen orchestriert.
  • Aktivitätsfunktion: Wird von der Orchestratorfunktion aufgerufen, führt die Aufgabe aus und gibt optional einen Wert zurück.
  • Clientfunktion: Eine reguläre Azure-Funktion, die eine Orchestratorfunktion startet. In diesem Beispiel wird eine per HTTP ausgelöste Funktion verwendet.

Orchestratorfunktion

Sie verwenden eine Vorlage, um den Code Ihrer dauerhaften Funktion in Ihrem Projekt zu erstellen.

  1. Suchen Sie in der Befehlspalette den Befehl Azure Functions: Create Function..., und wählen Sie ihn aus.

  2. Geben Sie gemäß der Eingabeaufforderungen die folgenden Informationen ein:

    Prompt Wert BESCHREIBUNG
    „Select a template for your function“ (Wählen Sie eine Vorlage für Ihre Funktion aus.) Orchestrator für Durable Functions Erstellen Sie eine Orchestrierung für Durable Functions.
    Wählen Sie einen dauerhaften Speichertyp aus. Azure Storage (Standard) Wählen Sie das Speicher-Back-End aus, das für Durable Functions verwendet wird.
    Angeben eines Funktionsnamens HelloOrchestrator Der Name Ihrer dauerhaften Funktion.

Sie haben einen Orchestrator für die Koordinierung von Aktivitätsfunktionen hinzugefügt. Öffnen Sie HelloOrchestrator/index.js, um die Orchestratorfunktion anzuzeigen. Mit jedem Aufruf von context.df.callActivity wird eine Aktivitätsfunktion namens Hello aufgerufen.

Fügen Sie als Nächstes die referenzierte Aktivitätsfunktion Hello hinzu.

Aktivitätsfunktion

  1. Suchen Sie in der Befehlspalette den Befehl Azure Functions: Create Function..., und wählen Sie ihn aus.

  2. Geben Sie gemäß der Eingabeaufforderungen die folgenden Informationen ein:

    Prompt Wert BESCHREIBUNG
    „Select a template for your function“ (Wählen Sie eine Vorlage für Ihre Funktion aus.) Aktivität für Durable Functions Erstellen Sie eine Aktivitätsfunktion.
    Angeben eines Funktionsnamens Hallo Der Name Ihrer Aktivitätsfunktion.

Sie haben die Aktivitätsfunktion Hello hinzugefügt, die vom Orchestrator aufgerufen wird. Öffnen Sie Hello/index.js, um zu sehen, dass die Datei einen Namen als Eingabe akzeptiert und eine Grußformel zurückgibt. Eine Aktivitätsfunktion ist der Ort, an dem Sie „die eigentliche Arbeit“ in Ihrem Workflow ausführen: Aufgaben wie einen Datenbankaufruf oder eine nicht deterministische Berechnung.

Abschließend fügen Sie noch eine per HTTP ausgelöste Funktion hinzu, durch die die Orchestrierung gestartet wird.

Clientfunktion (HTTP-Starter)

  1. Suchen Sie in der Befehlspalette den Befehl Azure Functions: Create Function..., und wählen Sie ihn aus.

  2. Geben Sie gemäß der Eingabeaufforderungen die folgenden Informationen ein:

    Prompt Wert BESCHREIBUNG
    „Select a template for your function“ (Wählen Sie eine Vorlage für Ihre Funktion aus.) HTTP-Starter für Durable Functions Erstellen Sie eine HTTP-Startfunktion.
    Angeben eines Funktionsnamens DurableFunctionsHttpStart Der Name Ihrer Aktivitätsfunktion.
    Autorisierungsstufe Anonym Lassen Sie zu Demonstrationszwecken das Aufrufen der Funktion ohne Authentifizierung zu.

Sie haben eine per HTTP ausgelöste Funktion hinzugefügt, durch die eine Orchestrierung gestartet wird. Öffnen Sie DurableFunctionsHttpStart/index.ts, um zu sehen, dass client.startNew zum Starten einer neuen Orchestrierung verwendet wird. Anschließend wird client.createCheckStatusResponse verwendet, um eine HTTP-Antwort mit URLs zurückzugeben, die zum Überwachen und Verwalten der neuen Orchestrierung verwendet werden können.

Sie verfügen nun über eine Durable Functions-App, die lokal ausgeführt und in Azure bereitgestellt werden kann.

Einer der Vorteile des V4-Programmiermodells ist die Flexibilität, an welcher Stelle Sie Ihre Funktionen schreiben. Im V4-Modell können Sie eine einzelne Vorlage verwenden, um alle drei Funktionen in einer Datei in Ihrem Projekt zu erstellen.

  1. Suchen Sie in der Befehlspalette den Befehl Azure Functions: Create Function..., und wählen Sie ihn aus.

  2. Geben Sie gemäß der Eingabeaufforderungen die folgenden Informationen ein:

    Prompt Wert BESCHREIBUNG
    „Select a template for your function“ (Wählen Sie eine Vorlage für Ihre Funktion aus.) Orchestrator für Durable Functions Erstellen Sie eine Datei mit einer Durable Functions-Orchestrierung, einer Aktivitätsfunktion und einer Durable Client-Starterfunktion.
    Auswählen eines dauerhaften Speichertyps Azure Storage (Standard) Wählen Sie das Speicher-Back-End aus, das für Durable Functions verwendet wird.
    Angeben eines Funktionsnamens hello Der Name, der für Ihre dauerhaften Funktionen verwendet wird.

Öffnen Sie src/functions/hello.ts, um die von Ihnen erstellten Funktionen anzuzeigen.

Sie haben einen Orchestrator namens helloOrchestrator für die Koordinierung von Aktivitätsfunktionen erstellt. Mit jedem Aufruf von context.df.callActivity wird eine Aktivitätsfunktion namens hello aufgerufen.

Sie haben außerdem die Aktivitätsfunktion hello hinzugefügt, die vom Orchestrator aufgerufen wird. In der gleichen Datei können Sie erkennen, dass ein Name als Eingabe akzeptiert und eine Grußformel zurückgegeben wird. Eine Aktivitätsfunktion ist der Ort, an dem Sie „die eigentliche Arbeit“ in Ihrem Workflow ausführen: Aufgaben wie einen Datenbankaufruf oder eine nicht deterministische Berechnung.

Schließlich haben Sie eine über HTTP ausgelöste Funktion hinzugefügt, durch die eine Orchestrierung gestartet wird. In derselben Datei sehen Sie, dass client.startNew verwendet wird, um eine neue Orchestrierung zu starten. Anschließend wird client.createCheckStatusResponse verwendet, um eine HTTP-Antwort mit URLs zurückzugeben, die zum Überwachen und Verwalten der neuen Orchestrierung verwendet werden können.

Sie verfügen nun über eine Durable Functions-App, die lokal ausgeführt und in Azure bereitgestellt werden kann.

Lokales Testen der Funktion

Mit Azure Functions Core-Tools können Sie ein Azure Functions-Projekt auf dem lokalen Entwicklungscomputer ausführen. Sie werden beim ersten Starten einer Funktion in Visual Studio Code zum Installieren dieser Tools aufgefordert.

  1. Legen Sie zum Testen der Funktion einen Breakpoint im Code der Aktivitätsfunktion Hello (Hello/index.ts) fest. Drücken Sie F5, oder wählen Sie über die Befehlspalette den Befehl Debug: Start Debugging aus, um das Funktions-App-Projekt zu starten. Die Ausgabe der Core Tools wird im Bereich Terminal angezeigt.
  1. Legen Sie zum Testen der Funktion einen Breakpoint im Code der Aktivitätsfunktion hello (src/functions/hello.ts) fest. Drücken Sie F5, oder wählen Sie über die Befehlspalette den Befehl Debug: Start Debugging aus, um das Funktions-App-Projekt zu starten. Die Ausgabe der Core Tools wird im Bereich Terminal angezeigt.

Hinweis

Weitere Informationen zum Debuggen finden Sie unter Diagnose in Durable Functions in Azure.

  1. Zum Ausführen von Durable Functions ist ein Azure-Speicherkonto erforderlich. Wenn Sie von VS Code zum Auswählen eines Speicherkontos aufgefordert werden, wählen Sie Speicherkonto auswählen aus.

    Screenshot: Visual Studio Code-Warnungsfenster. Im Fenster heißt es: „Zum Debuggen müssen Sie ein Speicherkonto für die interne Verwendung durch die Azure Functions-Runtime auswählen“. Die Schaltfläche „Speicherkonto auswählen“ ist hervorgehoben.

  2. Geben Sie bei den Eingabeaufforderungen die folgenden Informationen an, um ein neues Speicherkonto in Azure zu erstellen:

    Prompt Wert BESCHREIBUNG
    Auswählen des Abonnements Name Ihres Abonnements Auswählen des Azure-Abonnements
    Auswählen eines Speicherkontos Erstellen eines neuen Speicherkontos
    „Enter the name of the new storage account“ (Geben Sie den Namen des neuen Speicherkontos ein.) Eindeutiger Name Der Name des zu erstellenden Speicherkontos.
    Auswählen einer Ressourcengruppe Eindeutiger Name Der Name der zu erstellenden Ressourcengruppe.
    Standort auswählen Region Wählen Sie eine Region in Ihrer Nähe aus.
  3. Kopieren Sie im Bereich Terminal den URL-Endpunkt Ihrer über HTTP ausgelösten Funktion.

    Screenshot: Visual Studio Code-Terminalbereich. Das Terminal zeigt die Ausgabe der lokalen Ausführung einer Durable Functions-App an. Die Tabelle mit dem Titel „terminal“ und die URL der HTTP-Starterfunktion sind hervorgehoben.

  1. Senden Sie mit Ihrem Browser oder einem Tool wie Postman oder cURL eine HTTP-POST-Anforderung an den URL-Endpunkt. Ersetzen Sie das letzte Segment durch den Namen der Orchestratorfunktion (HelloOrchestrator). Die URL sollte in etwa wie folgt lauten: http://localhost:7071/api/orchestrators/HelloOrchestrator.
  1. Senden Sie mit Ihrem Browser oder einem Tool wie Postman oder cURL eine HTTP-POST-Anforderung an den URL-Endpunkt. Ersetzen Sie das letzte Segment durch den Namen der Orchestratorfunktion (helloOrchestrator). Die URL sollte in etwa wie folgt lauten: http://localhost:7071/api/orchestrators/helloOrchestrator.

Die Antwort ist das erste Ergebnis der HTTP-Funktion, um mitzuteilen, dass die dauerhafte Orchestrierung erfolgreich gestartet wurde. Es ist noch nicht das Endergebnis der Orchestrierung. Die Antwort enthält einige nützliche URLs. Zunächst fragen wir den Status der Orchestrierung ab.

  1. Kopieren Sie den URL-Wert für statusQueryGetUri, fügen Sie ihn in die Adressleiste des Browsers ein, und führen Sie anschließend die Anforderung aus. Alternativ können Sie auch weiter Postman verwenden, um die GET-Anforderung auszuführen.

    Die Anforderung fragt die Orchestrierungsinstanz der Status ab. Sie sollten schließlich eine Antwort erhalten, die zeigt, dass die Instanz abgeschlossen wurde, und die die Ausgaben oder Ergebnisse der dauerhaften Funktion enthält. Er sieht wie folgt aus:

    {
        "name": "HelloOrchestrator",
        "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
        "runtimeStatus": "Completed",
        "input": null,
        "customStatus": null,
        "output": [
            "Hello Tokyo!",
            "Hello Seattle!",
            "Hello London!"
        ],
        "createdTime": "2020-03-18T21:54:49Z",
        "lastUpdatedTime": "2020-03-18T21:54:54Z"
    }
    
    {
        "name": "helloOrchestrator",
        "instanceId": "6ba3f77933b1461ea1a3828c013c9d56",
        "runtimeStatus": "Completed",
        "input": "",
        "customStatus": null,
        "output": [
            "Hello, Tokyo",
            "Hello, Seattle",
            "Hello, Cairo"
        ],
        "createdTime": "2023-02-13T23:02:21Z",
        "lastUpdatedTime": "2023-02-13T23:02:25Z"
    }
    
  2. Drücken Sie in VS CodeUMSCHALT+F5, um das Debuggen zu beenden.

Nachdem Sie sichergestellt haben, dass die Funktion auf Ihrem lokalen Computer richtig ausgeführt wird, können Sie das Projekt in Azure veröffentlichen.

Anmelden bei Azure

Bevor Sie Azure-Ressourcen erstellen oder Ihre App veröffentlichen können, müssen Sie sich bei Azure anmelden.

  1. Sollten Sie noch nicht angemeldet sein, wählen Sie auf der Aktivitätsleiste das Azure-Symbol aus. Wählen Sie dann im Bereich Ressourcen die Option Bei Azure anmelden... aus.

    Screenshot: das Fenster für die Anmeldung bei Azure in VS Code.

    Wenn Sie bereits angemeldet sind und Ihre vorhandenen Abonnements anzeigen können, fahren Sie mit dem nächsten Abschnitt fort. Wenn Sie noch kein Azure-Konto haben, wählen Sie Azure-Konto erstellen aus. Lernende können Microsoft Azure for Students-Konto erstellen... auswählen.

  2. Wählen Sie im Browser nach entsprechender Aufforderung Ihr Azure-Konto aus, und melden Sie sich mit Ihren Azure-Anmeldeinformationen an. Wenn Sie ein neues Konto erstellen, können Sie sich anmelden, nachdem Ihr Konto erstellt wurde.

  3. Wenn Sie sich erfolgreich angemeldet haben, können Sie das neue Browserfenster schließen. Die Abonnements, die zu Ihrem Azure-Konto gehören, werden auf der Seitenleiste angezeigt.

Erstellen der Funktions-App in Azure

In diesem Abschnitt erstellen Sie eine Funktions-App und zugehörige Ressourcen in Ihrem Azure-Abonnement.

  1. Wählen Sie in der Aktivitätsleiste das Azure-Symbol aus. Wählen Sie dann im Bereich Ressourcen das +-Symbol aus, und wählen Sie die Option Funktions-App in Azure erstellen aus.

    Erstellen einer Ressource in Ihrem Azure-Abonnement

  2. Geben Sie nach entsprechender Aufforderung Folgendes ein:

    Prompt Auswahl
    Auswählen des Abonnements Wählen Sie das zu verwendende Abonnement aus. Diese Eingabeaufforderung wird nicht angezeigt, wenn nur ein Abonnement unter Ressourcen sichtbar ist.
    Eingeben eines global eindeutigen Namens für die Funktions-App Geben Sie einen Namen ein, der in einem URL-Pfad gültig ist. Der eingegebene Name wird überprüft, um sicherzustellen, dass er in Azure Functions eindeutig ist.
    Wählen Sie einen Runtimestapel aus Wählen Sie die lokal ausgeführte Sprachversion aus.
    Auswählen eines Standorts für neue Ressourcen Wählen Sie eine Region in Ihrer Nähe aus, um eine bessere Leistung zu erzielen.

    Die Erweiterung zeigt den Status einzelner Ressourcen an, während diese in Azure im Bereich Azure: Aktivitätsprotokoll erstellt werden.

    Protokoll der Azure-Ressourcenerstellung

  3. Nach Abschluss der Erstellung werden in Ihrem Abonnement die folgenden Azure-Ressourcen erstellt. Die Ressourcen werden basierend auf Ihrem Funktions-App-Namen benannt:

    • Eine Ressourcengruppe, bei der es sich um einen logischen Container für verwandte Ressourcen handelt.
    • Ein Azure Storage-Standardkonto, unter dem Status- und andere Informationen zu Ihren Projekten verwaltet werden.
    • Eine Funktions-App, die als Umgebung zum Ausführen Ihres Funktionscodes dient. Mit einer Funktions-App können Sie Funktionen zu logischen Einheiten gruppieren. Dies erleichtert die Verwaltung, Bereitstellung und Freigabe von Ressourcen im selben Hostingplan.
    • Ein App Service-Plan, der den zugrunde liegenden Host für Ihre serverlose Funktions-App definiert.
    • Eine mit der Funktions-App verbundene Application Insights-Instanz, die die Nutzung Ihrer Funktionen in der App nachverfolgt.

    Nach der Erstellung der Funktions-App wird eine Benachrichtigung angezeigt, und das Bereitstellungspaket wird angewendet.

    Tipp

    Standardmäßig werden die von Ihrer Funktions-App benötigten Azure-Ressourcen basierend auf dem von Ihnen angegebenen Namen der Funktions-App erstellt. Darüber hinaus werden sie auch in derselben neuen Ressourcengruppe mit der Funktions-App erstellt. Falls Sie entweder die Namen dieser Ressourcen anpassen oder vorhandene Ressourcen wiederverwenden möchten, müssen Sie das Projekt stattdessen mit den erweiterten Erstellungsoptionen veröffentlichen.

Bereitstellen des Projekts in Azure

Wichtig

Bei der Bereitstellung in einer vorhandenen Funktions-App wird der Inhalt dieser App in Azure immer überschrieben.

  1. Suchen Sie im Bereich Ressourcen der Azure-Aktivität die soeben erstellte Funktions-App-Ressource, klicken Sie mit der rechten Maustaste auf die Ressource, und wählen Sie Bereitstellen für Funktions-App... aus.

  2. Wenn Sie aufgefordert werden, vorherige Bereitstellungen zu überschreiben, wählen Sie Bereitstellen aus, um Ihren Funktionscode in der neuen Funktions-App-Ressource bereitzustellen.

  3. Wählen Sie nach Abschluss der Bereitstellung Ausgabe anzeigen aus, um die Erstellungs- und Bereitstellungsergebnisse (auch für die von Ihnen erstellten Azure-Ressourcen) anzuzeigen. Wenn Sie die Benachrichtigung übersehen haben, wählen Sie das Glockensymbol in der unteren rechten Ecke aus, um sie erneut anzuzeigen.

    Screenshot: das Fenster „Ausgabe anzeigen“.

Testen der Funktion in Azure

Hinweis

Um das V4-Knotenprogrammiermodell zu verwenden, stellen Sie sicher, dass Ihre App mit mindestens Version 4.25 der Azure Functions-Runtime ausgeführt wird.

  1. Kopieren Sie die URL des HTTP-Triggers im Bereich Ausgabe. Die URL, über die Ihre per HTTP ausgelöste Funktion aufgerufen wird, muss das folgende Format haben: https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
  1. Kopieren Sie die URL des HTTP-Triggers im Bereich Ausgabe. Die URL, über die Ihre per HTTP ausgelöste Funktion aufgerufen wird, muss das folgende Format haben: https://<functionappname>.azurewebsites.net/api/orchestrators/helloOrchestrator
  1. Fügen Sie diese neue URL für die HTTP-Anforderung in die Adresszeile des Browsers ein. Sie sollten die gleiche Statusantwort wie zuvor erhalten, als Sie die veröffentlichte App verwendet haben.

Nächste Schritte

Sie haben mit Visual Studio Code eine dauerhafte JavaScript-basierte Funktions-App erstellt und veröffentlicht.