Inicio rápido: Aprovisionamiento de Azure Spring Apps con Terraform

Nota:

Azure Spring Apps es el nuevo nombre del servicio Azure Spring Cloud. Aunque el servicio tiene un nuevo nombre, verá el nombre antiguo en algunos lugares durante un tiempo mientras trabajamos para actualizar recursos, como capturas de pantalla, vídeos y diagramas.

La información de este artículo puede ponerse en práctica en:❌ Básico ✔️ Estándar ✔️ Enterprise

En este inicio rápido se describe cómo usar Terraform para implementar un clúster de Azure Spring Apps en una red virtual existente.

Azure Spring Apps facilita la implementación de aplicaciones de Spring en Azure sin necesidad de realizar cambios en el código. El servicio administra la infraestructura de las aplicaciones de Spring, con el fin de que los desarrolladores puedan centrarse en el código. Azure Spring Apps proporciona administración del ciclo de vida mediante el uso de una supervisión y un diagnóstico completos, administración de la configuración, detección de servicios, integración de CI/CD e implementaciones azul-verde, entre otros.

El plan de implementación Enterprise incluye los siguientes componentes de Tanzu:

  • Servicio de compilación
  • Servicio de configuración de aplicaciones
  • Registro del servicio
  • Spring Cloud Gateway
  • Portal de API

El componente Portal de API se incluirá cuando esté disponible mediante el proveedor de Terraform de AzureRM.

Para más personalización, incluida la compatibilidad con dominios personalizados, consulte la documentación del proveedor de Terraform de Azure Spring Apps.

Requisitos previos

Revisión del plan de Terraform

El archivo de configuración que se usa en este inicio rápido procede de la arquitectura de referencia de Azure Spring Apps.

# Azure provider version 

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "= 3.21.1"
    }
  }
}

provider "azurerm" {
    features {} 
}

### Create Resource group 
resource "azurerm_resource_group" "sc_corp_rg" {
    name      = var.resource_group_name
    location  = var.location
}

### Create Application Insights
resource "azurerm_application_insights" "sc_app_insights" {
  name                = var.app_insights_name
  location            = var.location
  resource_group_name = var.resource_group_name
  application_type    = "web"
  workspace_id        = "/subscriptions/${var.subscription}/resourceGroups/${var.azurespringcloudvnetrg}/providers/Microsoft.OperationalInsights/workspaces/${var.sc_law_id}"
 
  depends_on = [azurerm_resource_group.sc_corp_rg]
}

### Create Spring Cloud Service
resource "azurerm_spring_cloud_service" "sc" {
  name                = var.sc_service_name 
  resource_group_name = var.resource_group_name
  location            = var.location
  sku_name            = "E0" 

  # Tanzu service registry - Set to true if Enterprise Tier
  service_registry_enabled = true
  build_agent_pool_size    = "S1"

  
  network {
    app_subnet_id                   = "/subscriptions/${var.subscription}/resourceGroups/${var.azurespringcloudvnetrg}/providers/Microsoft.Network/virtualNetworks/${var.vnet_spoke_name}/subnets/${var.app_subnet_id}"
    service_runtime_subnet_id       = "/subscriptions/${var.subscription}/resourceGroups/${var.azurespringcloudvnetrg}/providers/Microsoft.Network/virtualNetworks/${var.vnet_spoke_name}/subnets/${var.service_runtime_subnet_id}"
    cidr_ranges                     = var.sc_cidr
  }
  
  timeouts {
      create = "60m"
      delete = "2h"
  }
  
 
  depends_on = [azurerm_resource_group.sc_corp_rg]
  tags = var.tags
  
}

### Update Diags setting for Spring Cloud Service

resource "azurerm_monitor_diagnostic_setting" "sc_diag" {
  name                        = "monitoring"
  target_resource_id          = azurerm_spring_cloud_service.sc.id
  log_analytics_workspace_id = "/subscriptions/${var.subscription}/resourceGroups/${var.azurespringcloudvnetrg}/providers/Microsoft.OperationalInsights/workspaces/${var.sc_law_id}"

  log {
    category = "ApplicationConsole"
    enabled  = true

    retention_policy {
      enabled = false
    }
  }

  metric {
    category = "AllMetrics"

    retention_policy {
      enabled = false
    }
  }
}


# Begin Tanzu Components


resource "azurerm_spring_cloud_build_pack_binding" "appinsights-binding" {
  name                    = "appins-binding"
  spring_cloud_builder_id = "${azurerm_spring_cloud_service.sc.id}/buildServices/default/builders/default"
  binding_type            = "ApplicationInsights"
  launch {
    properties = {
      sampling_percentage = "10"
    }

    secrets = {
      connection-string   = azurerm_application_insights.sc_app_insights.connection_string
    }
  }
}


# Configuration service
resource "azurerm_spring_cloud_configuration_service" "configservice" {
  name                    = "default"
  spring_cloud_service_id = azurerm_spring_cloud_service.sc.id
}

# Gateway
resource "azurerm_spring_cloud_gateway" "scgateway" {
  name                    = "default"
  spring_cloud_service_id = azurerm_spring_cloud_service.sc.id
  instance_count          = 2 
}

resource "azurerm_spring_cloud_api_portal" "apiportal" {
  name                          = "default"
  spring_cloud_service_id       = azurerm_spring_cloud_service.sc.id
  gateway_ids                   = [azurerm_spring_cloud_gateway.scgateway.id]
  https_only_enabled            = false
  public_network_access_enabled = true
  instance_count                = 1
}

Aplicación del plan de Terraform

Para aplicar el plan de Terraform, siga estos pasos:

  1. Guarde el archivo variables.tf del plan Estándar o el plan Enterprise localmente y ábralo en un editor.

  2. Edite el archivo para agregar los siguientes valores:

    • El identificador de suscripción de la cuenta de Azure en la que se va a realizar la implementación.

    • Una ubicación de implementación entre las regiones en las que Azure Spring Apps está disponible, como se muestra en Productos disponibles por región. Necesitará el formato corto del nombre de la ubicación. Para obtener este valor, use el siguiente comando para generar una lista de ubicaciones de Azure y, a continuación, busque el valor Nombre de la región seleccionada.

      az account list-locations --output table
      
  3. Edite el archivo para agregar la siguiente información de implementación nueva:

    • El nombre del grupo de recursos en el que se va a realizar la implementación.
    • Un nombre de su elección para la implementación de Azure Spring Apps.
    • Un nombre de su elección para el recurso de Application Insights.
    • Tres intervalos CIDR (al menos /16) que se usen para hospedar la infraestructura de back-end de Azure Spring Apps. Los intervalos CIDR no se deben superponerse con ningún intervalo CIDR existente en la subred de destino.
    • Los pares clave-valor que se aplicarán como etiquetas en todos los recursos que admiten etiquetas. Para más información, consulte Uso de etiquetas para organizar los recursos de Azure y la jerarquía de administración.
  4. Edite el archivo para agregar la siguiente información de infraestructura existente:

    • El nombre del grupo de recursos donde reside la red virtual existente.
    • El nombre de la red virtual de ámbito existente.
    • El nombre de la subred existente que va a usar el servicio de aplicaciones de Azure Spring Apps.
    • El nombre de la subred existente que va a usar el servicio de entorno en tiempo de ejecución de Azure Spring Apps.
    • El nombre del área de trabajo de Azure Log Analytics.
  5. Ejecute el comando siguiente para inicializar los módulos de Terraform.

    terraform init
    
  6. Ejecute el siguiente comando para crear el plan de implementación de Terraform:

    terraform plan -out=springcloud.plan
    
  7. Ejecute el siguiente comando para aplicar el plan de implementación de Terraform:

    terraform apply springcloud.plan
    

Revisión de los recursos implementados

Puede usar Azure Portal para comprobar los recursos implementados, o bien usar un script de la CLI de Azure o Azure PowerShell script para enumerar los recursos implementados.

Limpieza de recursos

Si planea seguir trabajando en otros inicios rápidos y tutoriales, considere la posibilidad de dejar estos recursos activos. Cuando ya no los necesite, elimine los recursos creados en este artículo mediante el comando siguiente.

terraform destroy -auto-approve

Pasos siguientes

En este inicio rápido, ha implementado una instancia de Azure Spring Apps en una red virtual existente con Terraform y, luego, ha validado la implementación. Para obtener más información sobre Azure Spring Apps, continúe con los artículos siguientes.