Comparteix a través de


Inicio rápido: Creación de una aplicación web de Windows de Azure con una copia de seguridad mediante Terraform

En Azure App Service, puede realizar copias de seguridad personalizadas a petición o configurar copias de seguridad personalizadas programadas. En este inicio rápido, usará Terraform para crear una aplicación web de Windows de Azure con una programación de copia de seguridad y una pila de aplicaciones de .NET. Para obtener más información sobre las copias de seguridad y restauraciones de App Service, consulte Copia de seguridad y restauración de la aplicación en Azure App Service.

Terraform habilita la definición, vista previa e implementación de la infraestructura en la nube. Con Terraform, se crean archivos de configuración mediante la sintaxis de HCL. La sintaxis de HCL permite especificar el proveedor de la nube, como Azure, y los elementos que componen la infraestructura de la nube. Después de crear los archivos de configuración, se crea un plan de ejecución que permite obtener una vista previa de los cambios de infraestructura antes de implementarlos. Una vez que compruebe los cambios, aplique el plan de ejecución para implementar la infraestructura.

  • Cree una cuenta de Almacenamiento de Azure y un contenedor con el nombre generado aleatoriamente.
  • Cree un plan de servicio de Azure con el nombre generado aleatoriamente.
  • Genere una firma de acceso compartido (SAS) para la cuenta de almacenamiento.
  • Cree una aplicación web de Windows de Azure con el nombre generado aleatoriamente.
  • Configure una programación de copia de seguridad para la aplicación web.
  • Especifique la pila de aplicaciones para la aplicación web.
  • Genere los nombres de los recursos clave creados con el script de Terraform.
  • Genere el nombre de host predeterminado de la aplicación web de Windows.

Requisitos previos

Implementación del código de Terraform

  1. Cree un directorio en el que probar y ejecutar el código de ejemplo de Terraform y conviértalo en el directorio actual.

  2. Cree un archivo llamado providers.tf e inserte el siguiente código.

    terraform {
      required_version = ">=1.0"
    
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. Cree un archivo llamado main.tf e inserte el siguiente código.

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "rg" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    resource "random_string" "storage_account_name" {
      length  = 8
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_storage_account" "example" {
      name                     = random_string.storage_account_name.result
      resource_group_name      = azurerm_resource_group.rg.name
      location                 = azurerm_resource_group.rg.location
      account_tier             = "Standard"
      account_replication_type = "LRS"
    }
    
    resource "random_string" "storage_container_name" {
      length  = 8
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_storage_container" "example" {
      name                  = random_string.storage_container_name.result
      storage_account_name  = azurerm_storage_account.example.name
      container_access_type = "private"
    }
    
    resource "random_string" "service_plan_name" {
      length  = 8
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_service_plan" "example" {
      name                = random_string.service_plan_name.result
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
      os_type             = "Windows"
      sku_name            = "S1"
    }
    
    data "azurerm_storage_account_sas" "example" {
      connection_string = azurerm_storage_account.example.primary_connection_string
      https_only        = true
    
      resource_types {
        service   = false
        container = false
        object    = true
      }
    
      services {
        blob  = true
        queue = false
        table = false
        file  = false
      }
    
      # Please change the start_date variable (in variables.tf) to the appropriate 
      # value for your environment.
      start  = formatdate(var.start_date, timestamp())
      expiry = formatdate(var.start_date, timeadd(timestamp(), "8765h"))
    
      permissions {
        read    = false
        write   = true
        delete  = false
        list    = false
        add     = false
        create  = false
        update  = false
        process = false
        tag     = false
        filter  = false
      }
    }
    
    resource "random_string" "windows_web_app_name" {
      length  = 8
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_windows_web_app" "example" {
      name                = random_string.windows_web_app_name.result
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
      service_plan_id     = azurerm_service_plan.example.id
    
      backup {
        name                = "Example"
        storage_account_url = "https://${azurerm_storage_account.example.name}.blob.core.windows.net/${azurerm_storage_container.example.name}${data.azurerm_storage_account_sas.example.sas}&sr=b"
        schedule {
          frequency_interval = 30
          frequency_unit     = "Day"
        }
      }
    
      site_config {
        application_stack {
          dotnet_version = "v6.0"
          current_stack  = "dotnet"
        }
      }
    }
    
  4. Cree un archivo llamado variables.tf e inserte el siguiente código.

    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 "start_date" {
      type        = string
      default     = "2024-06-01"
      description = "Start date."
    }
    
  5. Cree un archivo llamado outputs.tf e inserte el siguiente código.

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "storage_account_name" {
      value = azurerm_storage_account.example.name
    }
    
    output "storage_container_name" {
      value = azurerm_storage_container.example.name
    }
    
    output "service_plan_name" {
      value = azurerm_service_plan.example.name
    }
    
    output "windows_web_app_name" {
      value = azurerm_windows_web_app.example.name
    }
    
    output "windows_web_app_default_hostname" {
      value = azurerm_windows_web_app.example.default_hostname
    }
    

Inicialización de Terraform

Para inicializar la implementación de Terraform, ejecute terraform init. Este comando descarga el proveedor de Azure necesario para administrar los recursos de Azure.

terraform init -upgrade

Puntos clave:

  • El parámetro -upgrade actualiza los complementos de proveedor necesarios a la versión más reciente que cumpla con las restricciones de versión de la configuración.

Creación de un plan de ejecución de Terraform

Ejecute terraform plan para crear un plan de ejecución.

terraform plan -out main.tfplan

Puntos clave:

  • El comando terraform plan crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales.
  • El parámetro -out opcional permite especificar un archivo de salida para el plan. El uso del parámetro -out garantiza que el plan que ha revisado es exactamente lo que se aplica.

Aplicación de un plan de ejecución de Terraform

Ejecute terraform apply para aplicar el plan de ejecución a su infraestructura en la nube.

terraform apply main.tfplan

Puntos clave:

  • El comando terraform apply de ejemplo asume que ejecutó terraform plan -out main.tfplan previamente.
  • Si especificó un nombre de archivo diferente para el parámetro -out, use ese mismo nombre de archivo en la llamada a terraform apply.
  • Si no ha utilizado el parámetro -out, llame a terraform apply sin ningún parámetro.

Verificación de los resultados

Ejecute az webapp show para ver la aplicación web de Windows de Azure.

az webapp show --name <web_app_name> --resource-group <resource_group_name>

Reemplace <web_app_name> por el nombre de la aplicación web de Windows de Azure y reemplace <resource_group_name> por el nombre del grupo de recursos.

Limpieza de recursos

Cuando ya no necesite los recursos creados a través de Terraform, realice los pasos siguientes:

  1. Ejecute el comando terraform plan y especifique la marca destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    Puntos clave:

    • El comando terraform plan crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales.
    • El parámetro -out opcional permite especificar un archivo de salida para el plan. El uso del parámetro -out garantiza que el plan que ha revisado es exactamente lo que se aplica.
  2. Ejecute terraform apply para aplicar el plan de ejecución.

    terraform apply main.destroy.tfplan
    

Solución de problemas de Terraform en Azure

Solución de problemas comunes al usar Terraform en Azure.

Pasos siguientes