Freigeben über


Schnellstart: Erstellen und Bereitstellen von Azure Functions-Ressourcen aus Terraform

In dieser Schnellstartanleitung verwenden Sie Terraform, um eine Funktions-App in einem Flex-Verbrauchsplan in Azure Functions zusammen mit anderen erforderlichen Azure-Ressourcen zu erstellen. Der Flex-Verbrauchsplan bietet serverloses Hosting, mit dem Sie Ihren Code bei Bedarf ausführen können, ohne die Infrastruktur explizit bereitzustellen oder zu verwalten. Die Funktions-App wird unter Linux ausgeführt und für die Verwendung von Azure Blob Storage für Codebereitstellungen konfiguriert.

Terraform ermöglicht die Definition, Vorschau und Bereitstellung der Cloudinfrastruktur. Terraform ermöglicht das Erstellen von Konfigurationsdateien mit HCL-Syntax. Mit der HCL-Syntax können Sie den Cloudanbieter ( z. B. Azure ) und die Elemente angeben, aus denen Ihre Cloudinfrastruktur besteht. Nach der Erstellung Ihrer Konfigurationsdateien erstellen Sie einen Ausführungsplan, mit dem Sie eine Vorschau Ihrer Infrastrukturänderungen anzeigen können, bevor diese bereitgestellt werden. Nachdem Sie die Änderungen überprüft haben, wenden Sie den Ausführungsplan an, um die Infrastruktur bereitzustellen.

  • Erstellen Sie eine Azure-Ressourcengruppe mit einem eindeutigen Namen.
  • Generieren Sie eine zufällige Zeichenfolge von 13 Kleinbuchstaben, um Ressourcen zu benennen.
  • Führen Sie das Erstellen eines Speicherkontos in Azure durch.
  • Erstellen Sie einen Blob Storage-Container im Speicherkonto.
  • Erstellen Sie einen Flex-Verbrauchsplan in Azure Functions.
  • Erstellen Sie eine Funktions-App mit einem Flex-Verbrauchsplan in Azure.
  • Geben Sie die Namen der Ressourcengruppe, des Speicherkontos, des Serviceplans, der Funktions-App und des Azure Functions Flex-Verbrauchsplans aus.

Prerequisites

Implementieren des Terraform-Codes

Der Beispielcode für diesen Artikel befindet sich im Azure Terraform GitHub-Repository. Sie können die Protokolldatei anzeigen, die die Testergebnisse aus den aktuellen und früheren Versionen von Terraform enthält. Sehen Sie weitere Artikel und Beispielcode, die zeigen, wie Terraform zur Verwaltung von Azure-Ressourcen verwendet wird.

  1. Erstellen Sie ein Verzeichnis, in dem der Terraform-Beispielcode getestet und ausgeführt werden soll, und legen Sie es als aktuelles Verzeichnis fest.

  2. Erstellen Sie eine Datei namens main.tf, und fügen Sie den folgenden Code ein:

    # This Terraform configuration creates a Flex Consumption plan app in Azure Functions 
    # with the required Storage account and Blob Storage deployment container.
    
    # Create a random pet to generate a unique resource group name
    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    # Create a resource group
    resource "azurerm_resource_group" "example" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    # Random String for unique naming of resources
    resource "random_string" "name" {
      length  = 8
      special = false
      upper   = false
      lower   = true
      numeric = false
    }
    
    # Create a storage account
    resource "azurerm_storage_account" "example" {
      name                     = coalesce(var.sa_name, random_string.name.result)
      resource_group_name      = azurerm_resource_group.example.name
      location                 = azurerm_resource_group.example.location
      account_tier             = var.sa_account_tier
      account_replication_type = var.sa_account_replication_type
    }
    
    # Create a storage container
    resource "azurerm_storage_container" "example" {
      name                  = "example-flexcontainer"
      storage_account_id    = azurerm_storage_account.example.id
      container_access_type = "private"
    }
    
    # Create a Log Analytics workspace for Application Insights
    resource "azurerm_log_analytics_workspace" "example" {
      name                = coalesce(var.ws_name, random_string.name.result)
      location            = azurerm_resource_group.example.location
      resource_group_name = azurerm_resource_group.example.name
      sku                 = "PerGB2018"
      retention_in_days   = 30
    }
    
    # Create an Application Insights instance for monitoring
    resource "azurerm_application_insights" "example" {
      name                = coalesce(var.ai_name, random_string.name.result)
      location            = azurerm_resource_group.example.location
      resource_group_name = azurerm_resource_group.example.name
      application_type    = "web"
      workspace_id = azurerm_log_analytics_workspace.example.id
    }
    
    # Create a service plan
    resource "azurerm_service_plan" "example" {
      name                = coalesce(var.asp_name, random_string.name.result)
      resource_group_name = azurerm_resource_group.example.name
      location            = azurerm_resource_group.example.location
      sku_name            = "FC1"
      os_type             = "Linux"
    }
    
    # Create a function app
    resource "azurerm_function_app_flex_consumption" "example" {
      name                = coalesce(var.fa_name, random_string.name.result)
      resource_group_name = azurerm_resource_group.example.name
      location            = azurerm_resource_group.example.location
      service_plan_id     = azurerm_service_plan.example.id
    
      storage_container_type      = "blobContainer"
      storage_container_endpoint  = "${azurerm_storage_account.example.primary_blob_endpoint}${azurerm_storage_container.example.name}"
      storage_authentication_type = "StorageAccountConnectionString"
      storage_access_key          = azurerm_storage_account.example.primary_access_key
      runtime_name                = var.runtime_name
      runtime_version             = var.runtime_version
      maximum_instance_count      = 50
      instance_memory_in_mb       = 2048
      
      site_config {
      }
    }
    
  3. Erstellen Sie eine Datei namens outputs.tf, und fügen Sie den folgenden Code ein:

    output "resource_group_name" {
      value = azurerm_resource_group.example.name
    }
    
    output "sa_name" {
      value = azurerm_storage_account.example.name
    }
    
    output "asp_name" {
      value = azurerm_service_plan.example.name
    }
    
    output "fa_name" {
      value = azurerm_function_app_flex_consumption.example.name
    }
    
    output "fa_url" {
      value = "https://${azurerm_function_app_flex_consumption.example.name}.azurewebsites.net"
    }
    
  4. Erstellen Sie eine Datei namens providers.tf, und fügen Sie den folgenden Code ein:

    terraform {
      required_version = ">=1.0"
    
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>4.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  5. Erstellen Sie eine Datei namens variables.tf, und fügen Sie den folgenden Code ein:

    variable "resource_group_name" {
      type        = string
      default     = ""
      description = "The name of the Azure resource group. If blank, a random name will be generated."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    
    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "sa_account_tier" {
      description = "The tier of the storage account. Possible values are Standard and Premium."
      type        = string
      default     = "Standard"
    }
    
    variable "sa_account_replication_type" {
      description = "The replication type of the storage account. Possible values are LRS, GRS, RAGRS, and ZRS."
      type        = string
      default     = "LRS"
    }
    
    variable "sa_name" {
      description = "The name of the storage account. If blank, a random name will be generated."
      type        = string
      default     = ""
    }
    
    variable "ws_name" {
      description = "The name of the Log Analytics workspace. If blank, a random name will be generated."
      type        = string
      default     = ""
    }
    
    variable "ai_name" {
      description = "The name of the Application Insights instance. If blank, a random name will be generated."
      type        = string
      default     = ""
    }
    
    variable "asp_name" {
      description = "The name of the App Service Plan. If blank, a random name will be generated."
      type        = string
      default     = ""
    }
    
    variable "fa_name" {
      description = "The name of the Function App. If blank, a random name will be generated."
      type        = string
      default     = ""
    }
    
    variable "runtime_name" {
      description = "The name of the language worker runtime."
      type        = string
      default     = "node" # Allowed: dotnet-isolated, java, node, powershell, python
    }
    
    variable "runtime_version" {
      description = "The version of the language worker runtime."
      type        = string
      default     = "20" # Supported versions: see https://aka.ms/flexfxversions
    }
    
  6. Verwenden Sie diesen Azure CLI-Befehl, um die ARM_SUBSCRIPTION_ID Umgebungsvariable auf die ID Ihres aktuellen Abonnements festzulegen:

    export ARM_SUBSCRIPTION_ID=$(az account show --query "id" --output tsv)
    

    Sie müssen diese Variable für Terraform festlegen, um sich bei Ihrem Azure-Abonnement authentifizieren zu können.

Initialisieren Sie Terraform

Führen Sie terraform init aus, um die Terraform-Bereitstellung zu initialisieren. Mit diesem Befehl wird der Azure-Anbieter heruntergeladen, der zum Verwalten Ihrer Azure-Ressourcen erforderlich ist.

terraform init -upgrade

Wichtige Punkte:

  • Der Parameter -upgrade aktualisiert die erforderlichen Anbieter-Plug-Ins auf die neueste Version, die den Versionseinschränkungen der Konfiguration entspricht.

Erstellen eines Terraform-Ausführungsplans

Führen Sie terraform plan aus, um einen Ausführungsplan zu erstellen.

terraform plan -out main.tfplan -var="runtime_name=dotnet-isolated" -var="runtime_version=8"
terraform plan -out main.tfplan -var="runtime_name=powershell" -var="runtime_version=7.4"
terraform plan -out main.tfplan -var="runtime_name=python" -var="runtime_version=3.12"
terraform plan -out main.tfplan -var="runtime_name=java" -var="runtime_version=21"
terraform plan -out main.tfplan -var="runtime_name=node" -var="runtime_version=20"

Stellen Sie sicher, dass runtime_version mit der Sprache-Stack-Version übereinstimmt, die Sie lokal überprüft haben. Wählen Sie oben im Artikel Ihren bevorzugten Sprachstapel aus.

Wichtige Punkte:

  • Durch den Befehl terraform plan wird ein Ausführungsplan erstellt, aber nicht ausgeführt. Stattdessen werden die Aktionen ermittelt, die erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an den eigentlichen Ressourcen vornehmen.
  • Der optionale Parameter -out ermöglicht die Angabe einer Ausgabedatei für den Plan. Durch die Verwendung des Parameters -out wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.

Anwenden eines Terraform-Ausführungsplans

Führen Sie terraform apply aus, um den Ausführungsplan auf Ihre Cloudinfrastruktur anzuwenden.

terraform apply main.tfplan

Wichtige Punkte:

  • Der Beispielbefehl terraform apply setzt voraus, dass Sie zuvor terraform plan -out main.tfplan ausgeführt haben.
  • Wenn Sie einen anderen Dateinamen für den Parameter -out angegeben haben, verwenden Sie denselben Dateinamen im Aufruf von terraform apply.
  • Wenn Sie den Parameter -out nicht verwendet haben, rufen Sie terraform apply ohne Parameter auf.

Überprüfen der Ergebnisse

Die outputs.tf Datei gibt diese Werte für Ihre neue Funktions-App zurück:

Value Description
resource_group_name Der Name der Ressourcengruppe, die Sie erstellt haben.
sa_name Der Name des Azure-Speicherkontos, das vom Funktionenhost benötigt wird.
asp_name Der Name des Flex-Verbrauchsplans, der Ihre neue App hosten soll.
fa_name Der Name der neuen Funktions-App.
fa_url Die URL des neuen Funktionsanwendungsendpunkts.

Öffnen Sie einen Browser, und navigieren Sie zum URL-Speicherort in fa_url. Sie können auch den Terraform-Ausgabebefehl verwenden, um diese Werte zu einem späteren Zeitpunkt zu überprüfen.

Screenshot der Azure Functions-App

Bereinigen von Ressourcen

Wenn Sie die über Terraform erstellten Ressourcen nicht mehr benötigen, führen Sie die folgenden Schritte aus:

  1. Führen Sie terraform plan aus, und geben Sie das Flag destroy an.

    terraform plan -destroy -out main.destroy.tfplan
    

    Wichtige Punkte:

    • Durch den Befehl terraform plan wird ein Ausführungsplan erstellt, aber nicht ausgeführt. Stattdessen werden die Aktionen ermittelt, die erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an den eigentlichen Ressourcen vornehmen.
    • Der optionale Parameter -out ermöglicht die Angabe einer Ausgabedatei für den Plan. Durch die Verwendung des Parameters -out wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
  2. Führen Sie den Befehl terraform apply aus, um den Ausführungsplan anzuwenden.

    terraform apply main.destroy.tfplan
    

Problembehandlung für Terraform in Azure

Lösen Sie allgemeine Probleme bei der Verwendung von Terraform in Azure.

Nächste Schritte

Sie können jetzt ein Codeprojekt für die Funktionen-App-Ressourcen bereitstellen, die Sie in Azure erstellt haben.

Sie können ein Codeprojekt aus diesen lokalen Umgebungen in Ihrer neuen Funktions-App erstellen, überprüfen und bereitstellen: