Blog

Verwenden Sie VSTS zur Bereitstellung von Funktionen als Infrastructure as Code

Peter Groenewegen

Aktualisiert Oktober 21, 2025
3 Minuten

Mit Azure Functions können Sie ganz einfach kleine Codestücke in der Cloud ausführen. Um dies richtig zu machen, müssen Sie eine kontinuierliche Bereitstellung der Infrastruktur und des Codes einrichten. Andernfalls haben Sie am Ende eine unkontrollierte Umgebung, in der niemand weiß, welcher Code tatsächlich ausgeführt wird. In diesem Blogbeitrag beschreibe ich, wie Sie eine Bereitstellungspipeline für Funktionen mit VSTS einrichten. Damit können Sie Funktionen als Infrastructure as Code bereitstellen.

vstsfunctionpipelineAus Sicht der Bereitstellung besteht eine Azure-Funktion aus zwei Teilen:

  1. Azure Infrastruktur
  2. Funktionscode

Sowohl die ARM-Vorlage als auch der Code können von VSTS aus bereitgestellt werden. Auf diese Weise können Sie die Funktionen wie jede andere Azure-Ressource verwalten.

Erstellen Sie Ihre erste Funktion:
  1. Laden Sie die Azure Functions CLI herunter
  2. Erstellen Sie eine Funktion von der Kommandozeile aus mit: func init

Erstellen Sie einen Build Mit dem Build bereiten Sie das Artefakt für die eigentlichen Veröffentlichungsschritte vor. Er kopiert die ARM-Vorlage und den Quellcode der Funktion in das richtige Verzeichnis im ArtifactStagingDirectory. Als letzten Schritt führt er eine Veröffentlichung des ArtifactStagingDirectory durch. Sie können auch Tests hinzufügen. Die Build-Pipeline sieht folgendermaßen aus:

bauen

Der Quellcode für die Funktion ist wie folgt aufgebaut:

src
| - host.json
| - MyTimerFunction
| | - function.json
| | - project.json
| | - run.csx

Alle Dateien müssen in das ArtifactStagingDirectory kopiert werden.

Stellen Sie die Infrastruktur bereit Die Bereitstellung der Azure-Infrastruktur kann über eine ARM-Vorlage erfolgen. In der Bereitstellungspipeline ist der erste Schritt die Validierung der ARM-Vorlage, der zweite Schritt die Bereitstellung in einer Testumgebung und der letzte Schritt die Bereitstellung in der Produktionsumgebung. Die Infrastruktur unter der Azure-Funktion ist:

  • Azure Speicher-Konto
  • Hosting-Plan
  • Funktion App

In VSTS kann die Vorlage mit der Aufgabe Azure Resource Group Deployment validiert und bereitgestellt werden. Eine Beispiel-ARM-Vorlage, die für die Bereitstellung der Infrastruktur verwendet werden kann:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "Parameter": {
  "functionappname": {
  "Typ": "string"
  }
  },
  "Variablen": {
  "serviceplanname": "[concat('funktionsserviceplan-',parameters('funktionsappname'),'-', uniqueString(resourceGroup().id))]",
  "functionstoragename": "[substring(toLower(concat('st',parameters('functionappname')), uniqueString(resourceGroup().id))),0,24)]"
  },
  "Ressourcen": [
  {
  "name": "[variables('serviceplanname')]",
  "Typ": "Microsoft.Web/Serverfarmen",
  "Art": "functionapp",
  "sku": {
  "Name": "Y1",
  "Stufe": "Dynamisch",
  "Größe": "Y1",
  "Familie": "Y",
  "Kapazität": 0
  },
  "apiVersion": "2015-08-01",
  "Standort": "[resourceGroup().location]",
  "Eigenschaften": { "name": "[variables('serviceplanname')]" }
  },
  {
  "Typ": "Microsoft.Storage/storageAccounts",
  "name": "[variables('functionstoragename')]",
  "apiVersion": "2016-01-01",
  "sku": {"name": "Standard_LRS" },
  "Standort": "[resourceGroup().location]",
  "Art": "Speicherung"
  },
  {
  "Typ": "Microsoft.Web/sites",
  "Art": "functionapp",
  "Name": "[parameters('functionappname')]",
  "apiVersion": "2015-08-01",
  "Standort": "[resourceGroup().location]",
  "Eigenschaften": {
  "Name": "[parameters('functionappname')]",
  "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('serviceplanname'))]",
  "hostNames": [ "[concat(parameters('functionappname'),'.azurewebsites.net')]" ],
  "enabledHostNames": [
  "[concat(parameters('functionappname'),'.azurewebsites.net')]",
  "[concat(parameters('functionappname'),'.scm.azurewebsites.net')]"
  ],
  "siteConfig": {
  "appSettings": [
  { "name": "FUNCTIONS_EXTENSION_VERSION", "Wert": "~1" },
  { "name": "AzureWebJobsDashboard", "Wert": "[concat('DefaultEndpointsProtocol=https;AccountName=',variables('functionstoragename'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('functionstoragename')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value)]" },
  { "name": "AzureWebJobsStorage", "Wert": "[concat('DefaultEndpointsProtocol=https;AccountName=',variables('functionstoragename'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('functionstoragename')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value)]" },
                     { "name": "WEBSITE_NODE_DEFAULT_VERSION", "Wert": "6.5.0" }
  ]
  }
  },
  "dependsOn": [
  "[resourceId('Microsoft.Web/serverfarms', variables('serviceplanname'))]",
  "[resourceId('Microsoft.Storage/storageAccounts', variables('functionstoragename'))]"
  ]
  }
  ]
}

Mit dieser Vorlage wird die gesamte Infrastruktur bereitgestellt, die für die Bereitstellung der eigentlichen Funktionen erforderlich ist.

Freigeben des Codes Als letzter Schritt der Freigabe wird der Code in der Funktionsapp bereitgestellt. Hierfür wird die Aufgabe Azure App Service Deploy verwendet. App Service Name muss auf den Namen verweisen, den Sie mit der ARM-Vorlage bereitgestellt haben, der Paketordner kann auf das src-Verzeichnis Ihrer Funktions-App gesetzt werden.

Jetzt sind Sie bereit, Ihre erste Funktion mit Ihrer Deployment-Pipeline einzusetzen.

Verfasst von

Peter Groenewegen

Contact

Let’s discuss how we can support your journey.