Démarrage rapide : Approvisionner Azure Spring Apps avec Terraform

Notes

Azure Spring Apps est le nouveau nom du service Azure Spring Cloud. Bien que le service ait un nouveau nom, vous verrez l’ancien nom à divers endroits pendant un certain temps, car nous travaillons à mettre à jour les ressources telles que les captures d’écran, les vidéos et les diagrammes.

Cet article s’applique à : ❌ De base ✔️ Standard ✔️ Entreprise

Ce guide de démarrage rapide explique comment utiliser Terraform pour déployer un cluster Azure Spring Apps dans un réseau virtuel existant.

Azure Spring Apps permet de déployer facilement des applications Spring dans Azure, sans aucune modification du code. Le service gère l’infrastructure des applications Spring, ce qui permet aux développeurs de se concentrer sur leur code. Azure Spring Apps assure la gestion du cycle de vie en utilisant des outils complets, tels que la supervision et les diagnostics, la gestion des configurations, la découverte de services, l’intégration CI/CD, les déploiements bleus-verts, etc.

Le plan de déploiement Enterprise comprend les composants Tanzu suivants :

  • Service de build
  • Service de configuration des applications
  • Registre de service
  • Spring Cloud Gateway
  • Portail des API

Le composant Portail des API sera inclus lorsqu’il sera disponible via le fournisseur AzureRM Terraform.

Pour une meilleure personnalisation, notamment la prise en charge du domaine personnalisé, consultez la documentation du fournisseur Terraform Azure Spring Apps.

Prérequis

  • Un abonnement Azure. Si vous n’avez pas d’abonnement, créez un compte gratuit avant de commencer.
  • HashiCorp Terraform
  • Deux sous-réseaux dédiés pour le cluster Azure Spring Apps, l’un pour le runtime du service et l’autre pour les applications Spring. Pour connaître la configuration requise pour le sous-réseau et le réseau virtuel, consultez la section Conditions requises pour le réseau virtuel de l’article Déployer Azure Spring Apps dans un réseau virtuel.
  • Un espace de travail Log Analytics existant pour les paramètres de diagnostic d’Azure Spring Apps et une ressource Application Insights basée sur un espace de travail. Pour plus d’informations, consultez Analyser les journaux et les métriques avec les paramètres de diagnostic et Agent in-process Java Application Insights dans Azure Spring Apps.
  • Trois plages de routage CIDR (Classless InterDomain Routing) internes (au moins /16 chacune) que vous avez identifiées pour une utilisation par le cluster Azure Spring Apps. Ces plages CIDR ne sont pas directement routables. Elles ne sont utilisées qu’en interne par le cluster Azure Spring Apps. Les clusters ne peuvent pas utiliser 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16 ou 192.0.2.0/24 pour le routage CIDR (Classless InterDomain routing) Azure Spring Apps interne. Les clusters ne peuvent pas non plus utiliser des plages d’adresses IP incluses dans la plage d’adresses du réseau virtuel du cluster.
  • Autorisation de service accordée au réseau virtuel. Le fournisseur de ressources Azure Spring Apps nécessite une autorisation Propriétaire sur votre réseau virtuel pour accorder un principal de service dédié et dynamique sur le réseau virtuel en vue d’un déploiement et d’une maintenance supplémentaires. Pour obtenir des instructions et plus d’informations, consultez la section Accorder l’autorisation du service au réseau virtuel de l’article Déployer Azure Spring Apps dans un réseau virtuel.
  • Si vous utilisez un pare-feu Azure ou une appliance virtuelle réseau, vous devez également répondre aux conditions préalables suivantes :
  • Si vous déployez une instance du plan Entreprise Azure Spring Apps pour la première fois dans l’abonnement cible, consultez la section Exigences du Plan Entreprise dans la Place de marché Azure.

Passer en revue le plan Terraform

Le fichier de configuration utilisé dans ce démarrage rapide provient de l’architecture de référence 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
}

Appliquer le plan Terraform

Pour appliquer le plan Terraform, procédez comme suit :

  1. Enregistrez localement le fichier variables.tf pour le plan Standard ou le plan Entreprise, puis ouvrez-le dans un éditeur.

  2. Modifiez le fichier, puis ajoutez les valeurs suivantes :

    • ID d’abonnement du compte Azure sur lequel vous allez effectuer le déploiement.

    • Un emplacement de déploiement dans les régions où Azure Spring Apps est disponible, comme indiqué dans Disponibilité des produits par région. Vous aurez besoin de la forme abrégée du nom de l’emplacement. Pour obtenir cette valeur, utilisez la commande suivante pour générer une liste d’emplacements Azure, puis recherchez la valeur Nom pour la région que vous avez sélectionnée.

      az account list-locations --output table
      
  3. Modifiez le fichier pour ajouter les nouvelles informations de déploiement suivantes :

    • Nom du groupe de ressources sur lequel vous allez effectuer le déploiement.
    • Nom de votre choix pour le déploiement Azure Spring Apps.
    • Nom de votre choix pour la ressource Application Insights.
    • Trois plages CIDR (au moins /16) utilisées pour héberger l’infrastructure back-end Azure Spring Apps. Les plages CIDR ne doivent pas chevaucher les plages CIDR existantes dans le sous-réseau cible
    • Les paires clé/valeur à appliquer comme étiquettes à toutes les ressources qui prennent en charge les étiquettes. Pour plus d’informations, consultez Utiliser des étiquettes pour organiser vos ressources Azure et votre hiérarchie de gestion
  4. Modifiez le fichier pour ajouter les informations d’infrastructure existantes suivantes :

    • Nom du groupe de ressources dans lequel réside le réseau virtuel existant.
    • Nom du réseau virtuel d’étendue existante.
    • Nom du sous-réseau existant à utiliser par le service d’application Azure Spring Apps.
    • Nom du sous-réseau existant à utiliser par le service de runtime Azure Spring Apps.
    • Le nom de l’espace de travail d’Azure Log Analytics.
  5. Exécutez la commande ci-dessous pour initialiser les modules de Terraform :

    terraform init
    
  6. Exécutez la commande suivante pour créer le plan de déploiement Terraform :

    terraform plan -out=springcloud.plan
    
  7. Exécutez la commande suivante pour appliquer le plan de déploiement Terraform :

    terraform apply springcloud.plan
    

Vérifier les ressources déployées

Vous pouvez utiliser le portail Azure pour vérifier les ressources déployées, ou Azure CLI ou un script Azure PowerShell pour lister les ressources déployées.

Nettoyer les ressources

Si vous prévoyez d’utiliser d’autres guides de démarrage rapide et tutoriels, vous pouvez conserver ces ressources. Quand vous n’en avez plus besoin, supprimez les ressources créées dans cet article en utilisant la commande suivante.

terraform destroy -auto-approve

Étapes suivantes

Dans ce guide de démarrage rapide, vous avez déployé une instance Azure Spring Apps dans un réseau virtuel existant à l’aide de Terraform, puis vous avez validé le déploiement. Pour plus d’informations sur Azure Spring Apps, accédez aux ressources ci-dessous.