Das ist eine für den Ausdruck optimierte Ansicht des gesamten Kapitels inkl. Unterseiten. Druckvorgang starten.

Zur Standardansicht zurückkehren.

Einrichtung

Von null zur laufenden DataBridge-Instanz: Voraussetzungen, Installation und Konfiguration der Umgebung.

Dieses Kapitel führt Schritt für Schritt durch die erstmalige Einrichtung einer dsyr.DataBridge-Instanz. Am Ende steht eine vollständig deployete und konfigurierte Azure Function App, die synchronisieren kann.

Empfohlene Reihenfolge:

  1. Voraussetzungen — Benutzer, Berechtigungen, Azure-Provider
  2. Installation — Azure-Ressourcen per Bicep anlegen, Function deployen
  3. Umgebungsvariablen — Alle Einstellungen im Function-App-Kontext

Ergänzend, außerhalb des regulären Installationswegs:

  • Container-Betrieb — Betrieb als Container-Image. Beta, nicht für den Kundenbetrieb vorgesehen.

1 - Voraussetzungen

Benutzerkonten, Berechtigungen, Azure-Provider und Software, die vor der Installation bereitstehen müssen.

Bevor die DataBridge installiert werden kann, müssen die folgenden Voraussetzungen in Azure, Dataverse und Business Central erfüllt sein.


Azure-Abonnement

Ein aktives Azure-Abonnement ist Pflicht. Im Abonnement müssen die folgenden Resource Provider registriert sein:

ProviderZweckPflicht
Microsoft.InsightsApplication Insights✅
Microsoft.OperationalInsightsLog Analytics✅
Microsoft.ServiceBusService Bus Namespace✅
Microsoft.StorageTable Storage, Blob Storage✅
Microsoft.WebAzure Function App✅
Microsoft.DashboardGrafana-Dashboard in Application Insights✅
Microsoft.KeyVaultSichere Speicherung von Connection Stringsoptional
Microsoft.RelayHybrid Connections (OnPremise-Anbindung)optional
Microsoft.AppContainer Appsveraltet / deprecated

Provider können im Azure Portal unter Abonnement → Ressourcenanbieter aktiviert werden.


Empfohlene Instanzen-Struktur

Pro Umgebung wird eine eigene DataBridge-Instanz (= Ressourcengruppe) benötigt. Als Regelfall werden zwei Instanzen empfohlen:

InstanzZweck
TestValidierung von Mappings und Konfigurationsänderungen
ProduktionLiveverbindung zwischen den Produktivsystemen

Eine Entwicklungsinstanz ist meist nicht nötig, da die Entwicklung der DataBridge selbst bei WYSA liegt und sich eine Synchronisation im Entwicklungssystem selten lohnt.

Eine dritte Instanz für Entwicklung ist dann sinnvoll, wenn im Entwicklungssystem eigene Anpassungen an Dataverse oder Business Central entstehen, die vor dem Test gegen eine laufende Synchronisation geprüft werden sollen — etwa neue Felder, geänderte Optionssets oder umgebaute Entitäten. In diesem Fall werden drei Ressourcengruppen benötigt (Entwicklung, Test, Produktion).


Laufzeitumgebung

Die DataBridge läuft als Azure Function App. Die folgenden Eckdaten werden vom Deployment gesetzt und müssen nicht vorbereitet werden — sie sind hier als Referenz für die Abstimmung mit der IT aufgeführt:

MerkmalWert
Laufzeit.NET 10, Isolated Worker
Azure Functions Runtimev4
BetriebssystemWindows
App Service PlanY1 (Consumption) oder EP1–EP3 (Premium), wählbar beim Deployment

Beim containerisierten Betrieb wird zusätzlich Zugriff auf die WYSA-Container-Registry benötigt. Das aktuelle Image ist acrwysatest.azurecr.io/containered-connector:v2.3.0.


Unterstützte Quell- und Zielsysteme

SystemLesenSchreibenAnmerkung
Dynamics 365 Business Central✅✅Cloud und OnPremise
Dynamics 365 / Dataverse✅✅Change Tracking erforderlich (siehe unten)
Microsoft Dynamics NAV✅✅OnPremise, wahlweise Basic Auth oder NTLM
Microsoft SQL Server⚠️ Preview—
MySQL / MariaDB⚠️ Preview—
Oracle Database⚠️ Preview—
PostgreSQL⚠️ Preview—

Für die vier SQL-Systeme gelten die unten beschriebenen Anforderungen an Anwendungsbenutzer und Change Tracking nicht — dort werden lediglich ein Connection String und die Netzwerkerreichbarkeit aus Azure heraus benötigt. Die Konnektoren sind als Vorabversion eingestuft und unterstützen kein Schreiben; Details auf den Konnektor-Seiten.


Benutzerkonten

Die folgenden Anforderungen gelten für die Anbindung von Dataverse und Business Central. Für SQL-Quellsysteme genügt ein Datenbankbenutzer mit Leserechten.

Administrations-/Betreuungsbenutzer (Entra-Benutzer)

Für die Einrichtung und Pflege von Dataverse und Business Central wird ein menschlicher Benutzer benötigt, der in Entra ID existiert und entsprechend lizensiert ist.

SystemMindestrechte
DataverseRolle „Systemadministrator" + mindestens eine Power Platform-Lizenz
Business CentralAdministrationsrechte + BC-Lizenz zugewiesen

Anwendungsbenutzer (Service Principal / App Registration)

Anwendungsbenutzer ermöglichen der DataBridge den automatisierten, sicheren Zugriff auf die Systeme — ohne personengebundene Credentials.

Minimum: 1 Anwendungsbenutzer pro DataBridge-Instanz.

Empfehlung: 3 Anwendungsbenutzer für maximale Sicherheit und klare Trennung:

AnwendungsbenutzerZweckBenötigte Rechte
Deployment-UserInstallation und Updates der DataBridgeAzure: Contributor auf Ressourcengruppe (bei aktiviertem enableManagedIdentity: Owner oder User Access Administrator, da Rollen zugewiesen werden) · Dataverse: S2S-Benutzer + Systemadministrator
Dataverse-UserDatenaustausch mit Dataverse im laufenden BetriebDataverse: S2S-Benutzer + Systemadministrator oder individuelle Sicherheitsrolle
BC-UserDatenaustausch mit Business Central im laufenden BetriebBC: Registriert + individuelle Sicherheitsrolle

Alle Anwendungsbenutzer müssen als App Registration in Entra ID angelegt und in den jeweiligen Systemen als S2S-Benutzer registriert sein.


Dataverse: Change Tracking aktivieren

Für alle Dataverse-Tabellen, die als Quelle genutzt werden sollen, muss Change Tracking aktiviert sein. Ohne Change Tracking kann die DataBridge keine effizienten Differenzabfragen durchführen.

Aktivierung: Power Platform Admin Center → Umgebung → Tabellen → Tabelle auswählen → Eigenschaften → „Änderungsnachverfolgung aktivieren" ✅


Benötigte Software für die Installation

Für das Deployment per Bicep / Azure CLI muss auf dem ausführenden Rechner installiert sein:

SoftwareDownloadMindestversion
Azure CLIlearn.microsoft.comaktuell
Bicep Extensionüber Azure CLI≥ 0.35

Bicep-Extension installieren und verifizieren:

az bicep install
az bicep version   # Ausgabe sollte ≥ 0.35 zeigen

Die Installation selbst kann durch WYSA durchgeführt werden, sofern der Deployment-Anwendungsbenutzer mit Contributor-Rechten auf der Ressourcengruppe bereitgestellt wurde. Soll der Preview-Schalter enableManagedIdentity genutzt werden, benötigt der Deployment-User Owner oder User Access Administrator, da dabei Rollenzuweisungen angelegt werden.

2 - Installation

Die DataBridge über den Azure Marketplace oder per Bicep in Azure einrichten.

Für die Installation gibt es zwei Wege:

WegWann geeignet
Azure MarketplaceRegelfall. Läuft vollständig im Azure Portal, keine lokale Software nötig.
Bicep / Azure CLIAutomatisierte oder wiederholbare Deployments, Integration in eine Pipeline.

Beide Wege legen dieselben Ressourcen an und sind gleichwertig im Ergebnis.


Weg 1 — Azure Marketplace (empfohlen)

1. Ressourcengruppe anlegen

Im Azure Portal eine neue Ressourcengruppe für die DataBridge-Instanz erstellen. Pro Umgebung (Test, Produktion) wird eine eigene Ressourcengruppe verwendet.

Ressourcengruppe anlegen

2. DataBridge aus dem Marketplace auswählen

In der Ressourcengruppe Erstellen wählen und im Marketplace nach der WYSA DataBridge suchen.

DataBridge im Marketplace auswählen

3. Region und Kurzname festlegen

FeldBedeutung
RegionAzure-Region, in der alle Ressourcen angelegt werden
Shortname for DataBridgeNamensbestandteil für alle Ressourcen dieser Instanz

Region und Kurzname

4. Produkteinstellungen

Unter Product Settings werden die fachlichen Einstellungen gruppiert:

BereichEinstellungen
Function SettingsGetChanges Timer Expression — Taktung des Quellabrufs (Vorgabe: alle 15 Sekunden)
TelemetrySampling-Override sowie die drei Sampling-Raten für Logs und Abhängigkeiten
AlertAlerts aktivieren, Benachrichtigungs-E-Mail und die vier Dead-Letter-Schwellwerte
PreviewSkipOutdatedMessages

Skipping und Alerts

Alle Telemetrie-Einstellungen können auf den Vorgabewerten bleiben und später jederzeit in den Umgebungsvariablen angepasst werden.

5. Service Bus

FeldVorgabeBedeutung
Maximum Delivery Count3Zustellversuche, bevor eine Nachricht in die Dead-Letter-Queue geht
Message Time To Live (TTL)P14DAufbewahrungszeit einer Nachricht (ISO 8601)
Lock DurationPT30SSperrdauer während der Verarbeitung

Service-Bus-Einstellungen

6. Storage Account

Storage Account

Als Speicherkonto-Typ steht ausschließlich StorageV2 zur Verfügung.

7. App Service Plan

FeldVorgabeBedeutung
Maximum Scale-Out Count12Obergrenze für parallele Instanzen
App Service Plan SKUConsumption (Y1)Alternativ Premium (EP1) bis Premium (EP3)

App Service Plan

Anschließend über Überprüfen und erstellen das Deployment starten.


Weg 2 — Bicep / Azure CLI

1. Bicep-Dateien bereitstellen

Die Bicep-Templates befinden sich im Repository unter bicep/. Klone das Repository oder lade die Dateien auf den Rechner, von dem aus die Installation durchgeführt wird.

2. Bei Azure anmelden

az login

Es öffnet sich ein Browser-Fenster. Melde dich mit dem Deployment-Anwendungsbenutzer oder dem Administrations-Benutzer an, der Contributor-Rechte auf der Ziel-Ressourcengruppe hat. Den Haken bei „Zugriffseinwilligung für alle Benutzer" nicht setzen.

3. Abonnement prüfen

az account show

Vergleiche die angezeigte Abonnement-ID mit der ID im Azure Portal. Falls mehrere Abonnements vorhanden sind, das richtige setzen:

az account set --subscription "<Abonnement-ID>"

4. Ressourcen deployen

az deployment group create --template-file ./bicep/main.bicep --resource-group <Name-der-Ressourcengruppe> --parameters name=<instanzname> -c

Das Flag -c zeigt eine Vorschau der Änderungen an. Mit Y oder J bestätigen.

Bicep-Parameter im Überblick

Infrastruktur:

ParameterStandardwertBeschreibung
namecustomername-databridgeNamensbestandteil für alle Ressourcen. Immer überschreiben.
locationRegion der RessourcengruppeZielregion für alle Ressourcen
storageKindStorageV2Speicherkonto-Typ (einziger erlaubter Wert)
appServiceSkuY1Y1 (Consumption) oder EP1–EP3 (Premium)
functionScaleLimit12Obergrenze für parallele Instanzen
maxDeliveryCount3Zustellversuche pro Nachricht (1–100)
defaultMessageTimeToLiveP14DAufbewahrungszeit für Nachrichten (ISO 8601)
lockDurationPT30SSperrdauer während der Verarbeitung (ISO 8601)
tagsByResource(leer)Tags je Ressourcentyp

Laufzeit und Telemetrie:

ParameterStandardwertBeschreibung
getChangesTimerExpression*/15 * * * * *Taktung des Quellabrufs
skipOutdatedMessagesfalseNachrichten mit älterem Quell-Zeitstempel überspringen
telemetryControlTRACE_SAMPLETRACE_SAMPLE, TRACE_ALL oder TRACE_NONE
telemetryInfoSampleRate20Anteil der Information-Einträge bei erfolgreichen Läufen (%)
telemetryDependencySampleRate10Anteil erfolgreicher, schneller Abhängigkeits-Aufrufe (%)
telemetryDependencySlowMs2000Schwellwert für „langsam" in Millisekunden

Alerts:

ParameterStandardwertBeschreibung
enableAlertsfalseAlerts für Dead-Letter-Queue und Queue-Länge anlegen
notificationEmail(leer)Empfänger der Alert-Benachrichtigungen. Nur bei enableAlerts = true erforderlich.
dlqLowThreshold1Schwellwert Severity „Informational"
dlqMediumThreshold50Schwellwert Severity „Warning"
dlqHighThreshold200Schwellwert Severity „Error"
dlqCriticalThreshold500Schwellwert Severity „Critical"

Was angelegt wird

Nach erfolgreichem Deployment existieren in der Ressourcengruppe:

RessourceNameDetails
Function Appfunc-<name>Windows, .NET 10 Isolated Worker, Functions v4, FTPS-only
App Service Planasp-<name>Y1 (Consumption) oder EP1–EP3 (Premium)
Storage Accountst<name>StorageV2, Standard_LRS, TLS 1.2
Service Bus Namespacesb<name>SKU Basic, mit allen sieben Queues
Application Insightsappi-<name>90 Tage Aufbewahrung
Grafana-Dashboarddash-<name>Wird immer mit angelegt, kein Opt-out
Alerts + Action Groupag-<name>Nur bei enableAlerts = true

Service-Bus-Queues: sbqexport · sbqhighexport · sbqlowexport · sbqignored · sbqtransitivehigh · sbqtransitivestandart · sbqtransitivelow

Table-Storage-Tabellen: connections, jobs, mappings, watermark — sie werden vom Deployment leer angelegt.


Phase 2 — Function App befüllen

Beim Marketplace-Weg entfällt dieser Schritt in der Regel; das Paket wird mit ausgeliefert. Beim Bicep-Weg wird der Anwendungscode separat eingespielt.

Option A: Container-Image

Wird die DataBridge containerisiert betrieben, verweist die Function App auf das bereitgestellte Image:

acrwysatest.azurecr.io/containered-connector:v2.3.0

Option B: Zip-Upload per Azure Portal

  1. Im Azure Portal die Function App öffnen
  2. Entwicklungstools → Erweiterte Tools (Kudu) öffnen
  3. In Kudu: Tools → Zip Push Deploy
  4. Die bereitgestellte .zip-Datei per Drag & Drop hochladen
  5. Nach dem Upload startet die Function App automatisch neu

Option C: Deployment-Pipeline

Das Deployment kann über eine CI/CD-Pipeline automatisiert werden. WYSA stellt hierfür Azure-Pipeline-Definitionen zur Verfügung (cicd/-Verzeichnis). Alternativ kann eine eigene Azure-DevOps- oder GitHub-Actions-Pipeline verwendet werden.


Nach der Installation: Konfigurationstabellen befüllen

Nach dem Deployment laufen die Azure Functions — aber noch ohne Konfiguration. Die vier Table-Storage-Tabellen existieren, sind aber leer:

ReihenfolgeTabelleInhalt
1connectionsZugangsdaten für alle Quell- und Zielsysteme
2mappingsFeld-Mappings zwischen Quell- und Zieltabellen
3jobsSynchronisations-Jobs (welche Tabelle, welche Richtung, welcher Schedule)
4watermarkWird zur Laufzeit automatisch befüllt — kein manueller Eintrag nötig

Die Tabellen können über den Azure Storage Explorer oder direkt im Azure Portal (Storage Account → Tables) bearbeitet werden.

Details zu den Tabellen und den erwarteten Feldern sind im Kapitel Konfiguration beschrieben.


Umgebungsvariablen prüfen

Alle Verbindungs-Strings sowie der Timer-Ausdruck und die Telemetrie-Einstellungen werden vom Deployment gesetzt. Nachträglich anzupassen sind sie nur, wenn vom Vorgabewert abgewichen werden soll.

Eine vollständige Übersicht findet sich auf der Seite Umgebungsvariablen.


Installation prüfen

Sobald Konfigurationstabellen und Umgebungsvariablen gesetzt sind, kann die Installation geprüft werden:

GET https://func-<name>.azurewebsites.net/api/GetInfo?code=<Function-Key>

Eine erfolgreiche Antwort sieht so aus:

{
  "Version": "2.1.2026.802"
}

Alternativ: Im Azure Portal → Function App → Funktionen → GetInfo → Testen/Ausführen — dort wird der Schlüssel automatisch mitgegeben.

Für eine inhaltliche Prüfung der Konfiguration stehen zusätzlich die Diagnose-Funktionen Validate (prüft die hinterlegte Konfiguration) und CheckList (gleicht Mappings gegen die Attribute der beteiligten Systeme ab) zur Verfügung.

3 - Umgebungsvariablen

Alle Konfigurationsparameter der DataBridge Function App — mit Standardwerten und Erläuterung.

Die DataBridge Function App wird über Anwendungseinstellungen (Application Settings) konfiguriert. Diese sind im Azure Portal unter Function App → Einstellungen → Umgebungsvariablen zu finden und zu bearbeiten.


Infrastruktur-Verbindungen

Diese Variablen verbinden die Function App mit den zugehörigen Azure-Diensten. Sie werden durch das Deployment automatisch befüllt.

VariablePflichtBeschreibung
AzureWebJobsStorage✅¹Connection String zum Azure Storage Account (Table Storage für die Konfiguration + Function-interner Storage).
ExportQueueServiceBus✅¹Connection String zum Service Bus Namespace (alle Verarbeitungs-Queues)
APPLICATIONINSIGHTS_CONNECTION_STRINGfaktischConnection String zu Application Insights. Ohne den Wert startet die DataBridge trotzdem, gibt aber nur eine Warnung aus und sendet keinerlei Telemetrie — kein Logging, keine Metriken, keine Fehlerdiagnose.

¹ Schlüssel- oder identitätsbasiert. Standardmäßig werden die beiden Connection Strings gesetzt. Zusätzlich setzt das Deployment in diesem Modus TARGET_BASED_SCALING_ENABLED=0: Target-based Scaling ist damit abgeschaltet, der Host skaliert direkt über den Metrics Monitor und die entsprechende Warnung im Log entfällt. Ist der Preview-Schalter enableManagedIdentity (Bicep) aktiv, entfallen sie und werden durch die identitätsbasierten Varianten ersetzt — die Function nutzt dann die Managed Identity:

Variable (Identity-Modus)Beschreibung
AzureWebJobsStorage__accountNameName des Storage Accounts. Der Functions-Host leitet Blob/Queue/Table-Endpunkte daraus ab und authentifiziert über die Managed Identity.
ExportQueueServiceBus__fullyQualifiedNamespaceVoll qualifizierter Service-Bus-Namespace (z. B. sbfoo.servicebus.windows.net) für den identitätsbasierten Zugriff.

Lokal (local.settings.json) bleiben die schlüsselbasierten Connection Strings maßgeblich.


Laufzeit-Einstellungen

VariableTypStandardwertPflichtBeschreibung
GetChangesTimerExpressionCRON (6-stellig)*/15 * * * * *✅Taktung des GetChanges-Timers. Bei einer Neuinstallation alle 15 Sekunden.
SkipOutdatedMessagesBooleanfalse—Wenn true: Nachrichten, deren Quell-Zeitstempel älter ist als der Zieldatensatz, werden nicht verarbeitet, sondern nach sbqignored verschoben.

CRON-Ausdruck — Format

Der CRON-Ausdruck nutzt das 6-stellige NCrontab-Format (inkl. Sekunden):

┌─────────── Sekunde  (0–59)
│ ┌───────── Minute   (0–59)
│ │ ┌─────── Stunde   (0–23)
│ │ │ ┌───── Tag      (1–31)
│ │ │ │ ┌─── Monat    (1–12)
│ │ │ │ │ ┌─ Wochentag (0–6, Sonntag=0)
│ │ │ │ │ │
*/15 * * * * *  →  alle 15 Sekunden (Vorgabe)
0 */2 * * * *   →  alle 2 Minuten
0 */5 * * * *   →  alle 5 Minuten
0 0 */1 * * *   →  stündlich

Einzelne Jobs können über das Feld Schedule einen eigenen, seltener greifenden Zeitplan bekommen — siehe Jobs.


Logging & Telemetrie

Die DataBridge steuert ihr Telemetrie-Volumen über zwei Mechanismen: gepuffertes Logging für Log-Einträge und Sampling für ausgehende Aufrufe. Ausführlich beschrieben unter Betrieb → Logging.

VariableTypStandardwertBeschreibung
TELEMETRY_CONTROLStringTRACE_SAMPLEGlobaler Override für beide Sampling-Mechanismen. Werte: TRACE_SAMPLE (selektives Sampling, entspricht auch einem leeren Wert), TRACE_ALL (sendet alles), TRACE_NONE (unterdrückt alles).
TELEMETRY_INFO_SAMPLE_RATEInteger 0–10020Anteil der Information-Einträge, die bei erfolgreichen Läufen gesendet werden. Bei Läufen mit Warnungen oder Fehlern immer 100 %.
TELEMETRY_DEPENDENCY_SAMPLE_RATEInteger 0–10010Anteil der erfolgreichen und schnellen Aufrufe an Quell- und Zielsysteme (D365 OData, SQL, Table Storage, Service Bus), die gesendet werden. Fehlgeschlagene und langsame Aufrufe sind davon nicht betroffen.
TELEMETRY_DEPENDENCY_SLOW_MSInteger (ms)2000Schwellwert, ab dem ein Aufruf als „langsam" gilt und immer gesendet wird — auch bei Erfolg.

Telemetrie-Verhalten im Überblick

Lauf-ErgebnisTraceDebugInformationWarningError
Fehlerfreier Laufnie—~20 % (konfigurierbar)✅✅
Lauf mit Warnungennie—✅ alle✅✅
Lauf mit Fehlernie✅ alle✅ alle✅✅

Trace-Einträge erreichen Application Insights grundsätzlich nie — auch nicht bei Fehler-Läufen. Sie sind ausschließlich live im Log Stream der Function App bzw. im Container-Log sichtbar.

Abhängigkeiten

AufrufWird gesendet
Fehlgeschlagenimmer vollständig
Langsam (≥ TELEMETRY_DEPENDENCY_SLOW_MS)immer vollständig
Erfolgreich und schnellanteilig gemäß TELEMETRY_DEPENDENCY_SAMPLE_RATE

Die Entscheidung fällt hier pro Aufruf und nicht pro Funktionsausführung — ein fehlgeschlagener Lauf enthält deshalb nicht zwangsläufig die erfolgreichen Aufrufe davor.


Funktionen gezielt deaktivieren

Einzelne Azure Functions können ohne Redeployment deaktiviert werden. Das ist nützlich, um z. B. die Quellabruf-Funktion zu stoppen, ohne die Queue-Verarbeitung zu unterbrechen.

VariableBetrifftWert zum Deaktivieren
AzureWebJobs.GetChanges.DisabledTimer-Funktion (Quellabruf)true
AzureWebJobs.ProcessStandardQueueItems.DisabledStandard-Prioritäts-Queuetrue
AzureWebJobs.ProcessHighPriorityQueueItems.DisabledHoch-Prioritäts-Queuetrue
AzureWebJobs.ProcessLowPriorityQueueItems.DisabledNiedrig-Prioritäts-Queuetrue

Das Namensschema AzureWebJobs.<Funktionsname>.Disabled gilt für jede Function der App. Neben den vier betrieblich relevanten oben sind das:

ExecuteJob · ExecuteHttpRequest · GetInfo · Validate · CheckList · StartGetChangesOrchestration · GetChangesOrchestrator · GetChangesActivity · JobState

Die letzten vier gehören zur optionalen Durable-Orchestrierung, die im Regelbetrieb ohnehin nicht aktiv ist.


Plattform-Einstellungen — nicht verändern

Diese Werte setzt das Deployment. Sie steuern die Azure-Functions-Laufzeit selbst und haben keinen fachlichen Bezug zur DataBridge:

VariableWertBedeutung
FUNCTIONS_EXTENSION_VERSION~4Version der Azure-Functions-Runtime
FUNCTIONS_WORKER_RUNTIMEdotnet-isolatedWorker-Modell (.NET Isolated Worker)
WEBSITE_CONTENTAZUREFILECONNECTIONSTRING= AzureWebJobsStorageAblage des Function-Contents
WEBSITE_RUN_FROM_PACKAGE1Ausführung direkt aus dem Deployment-Paket

Nur im Container-Betrieb

VariableWertBedeutung
AzureWebJobsSecretStorageTypefilesWeist die Runtime an, Function-Keys ins Dateisystem zu schreiben. Ohne diesen Wert sind HTTP-Trigger mit Function-Authentifizierung nicht aufrufbar.

Key Vault (optional)

Statt Connection Strings direkt in den Anwendungseinstellungen zu speichern, können diese in einem Azure Key Vault hinterlegt werden. Die Function App referenziert das Secret dann per Key Vault Reference:

@Microsoft.KeyVault(SecretUri=https://<vault>.vault.azure.net/secrets/<name>/)

Diese Referenz wird direkt als Wert der jeweiligen Umgebungsvariable eingetragen. Azure löst sie zur Laufzeit automatisch auf — ohne Änderungen am Code.

Für die Zugangsdaten zu Quell- und Zielsystemen gibt es einen zweiten, davon unabhängigen Weg über den Parameter keyVaultUrl im Verbindungs-JSON — siehe Verbindungen.

4 - Container-Betrieb

Die DataBridge als Container bauen, in eine Azure Container Registry veröffentlichen und lokal starten — Beta.

Die DataBridge lässt sich als Container-Image bauen und betreiben. Das Image basiert auf der Azure-Functions-Laufzeit und enthält dieselbe Anwendung wie das reguläre Deployment.

Sinnvoll ist der Container-Betrieb derzeit vor allem für lokale Tests und Entwicklung: Die HTTP-Trigger lassen sich damit ohne Azure-Deployment aufrufen.

Voraussetzungen

WerkzeugZweck
Docker Desktop oder PodmanImage bauen und Container starten
Azure CLI (az)Anmeldung an der Azure Container Registry (nur zum Veröffentlichen)

Alle Befehle auf dieser Seite werden aus dem Ordner src/ ausgeführt — dort liegen Dockerfile, compose.yml und die Start-Scripts.

Image bauen

Das Dockerfile liegt in src/. Bei Bedarf lässt sich dort das Basis-Image anpassen.

docker build --tag acrwysatest.azurecr.io/containered-connector:v2.3.0 .
podman build --tag acrwysatest.azurecr.io/containered-connector:v2.3.0 .

Allgemein aufgebaut ist der Tag so:

{acr-name}.azurecr.io/{image-name}:{version}
BestandteilBedeutung
acr-nameName der Azure Container Registry
image-nameName des Images, z. B. containered-connector
versionVersionsnummer, üblicherweise dreistellig in der Form v2.1.0

In die Azure Container Registry veröffentlichen

Zunächst an Azure und anschließend an der Registry anmelden:

az login
az acr login --name acrwysatest

Danach das gebaute Image veröffentlichen:

docker push acrwysatest.azurecr.io/containered-connector:v2.3.0

Damit steht das Image unter der angegebenen Versionsnummer in der Registry bereit.

Lokal betreiben

Umgebungsdatei anlegen

In src/.podman/ liegt die Vorlage podman.env.sample. Diese kopieren und unter dem Namen podman.<Umgebung>.env ablegen, zum Beispiel podman.wysatest.env:

cp .podman/podman.env.sample .podman/podman.wysatest.env

Anschließend die Datei mit den Verbindungsdaten der Zielumgebung füllen. Sie enthält unter anderem AzureWebJobsStorage, ConnectionStrings__ExportQueueServiceBus, APPLICATIONINSIGHTS_CONNECTION_STRING, den Timer-Ausdruck GetChangesTimerExpression sowie die Funktions-Toggles.

Danach in src/compose.yml prüfen, dass env_file auf die richtige Datei verweist:

    env_file:
      - .podman/podman.wysatest.env

Der Container veröffentlicht seinen Port unter 7071 und setzt AzureWebJobsSecretStorageType=files, damit die Function-Keys im Container abgelegt werden können.

Start-Script (empfohlen)

Der einfachste Weg sind die mitgelieferten Start-Scripts in src/. Sie bauen das Image, starten den Container und geben anschließend alle HTTP-Trigger-URLs inklusive Authentication-Key aus.

bash start-local.sh
.\start-local.ps1

Die Ausgabe sieht dann ungefähr so aus:

============================================
 DataBridge lokal gestartet
============================================
 Master Key: abc123...

 HTTP-Trigger URLs:

 [GET]  http://127.0.0.1:7071/api/GetInfo?code=abc123...
 [GET]  http://127.0.0.1:7071/api/CheckList?code=abc123...
 [POST] http://127.0.0.1:7071/api/ExecuteJob?code=abc123...
 [POST] http://127.0.0.1:7071/api/ExecuteHttpRequest?code=abc123...
============================================

Die URLs lassen sich direkt im Browser öffnen oder in Bruno beziehungsweise curl verwenden.

Manueller Start

Wer den Container selbst steuern möchte, startet ihn aus dem Ordner src/:

podman compose up --build -d

Logs anzeigen:

podman compose logs -f

Container beenden:

podman compose down

Installation prüfen

Ob der Container korrekt läuft, lässt sich über die HTTP-Trigger prüfen — GetInfo liefert die Version, CheckList und Validate prüfen Mappings und Konfiguration. Die Details dazu stehen unter Installation.