Snabbstart: Etablera Azure Spring Apps med Terraform

Kommentar

Azure Spring Apps är det nya namnet på Azure Spring Cloud-tjänsten. Även om tjänsten har ett nytt namn ser du det gamla namnet på vissa platser ett tag medan vi arbetar med att uppdatera tillgångar som skärmbilder, videor och diagram.

Den här artikeln gäller för:❌ Basic ✔️ Standard ✔️ Enterprise

Den här snabbstarten beskriver hur du använder Terraform för att distribuera ett Azure Spring Apps-kluster till ett befintligt virtuellt nätverk.

Azure Spring Apps gör det enkelt att distribuera Spring-program till Azure utan några kodändringar. Tjänsten hanterar infrastrukturen för Spring-program så att utvecklare kan fokusera på sin kod. Azure Spring Apps tillhandahåller livscykelhantering med omfattande övervakning och diagnostik, konfigurationshantering, tjänstidentifiering, CI/CD-integrering, blågröna distributioner med mera.

Enterprise-distributionsplanen innehåller följande Tanzu-komponenter:

  • Byggtjänst
  • Programkonfigurationstjänst
  • Tjänstregister
  • Spring Cloud Gateway
  • API-portalen

API Portal-komponenten inkluderas när den blir tillgänglig via AzureRM Terraform-providern.

Mer anpassning, inklusive stöd för anpassade domäner, finns i dokumentationen för Terraform-providern för Azure Spring Apps.

Förutsättningar

  • En Azure-prenumeration. Om du inte har någon prenumeration skapar du ett kostnadsfritt konto innan du börjar.
  • Hashicorp Terraform
  • Två dedikerade undernät för Azure Spring Apps-klustret, ett för tjänstkörningen och ett annat för Spring-programmen. För krav för undernät och virtuella nätverk, se avsnittet Krav för virtuellt nätverk i Distribuera Azure Spring Apps i ett virtuellt nätverk.
  • En befintlig Log Analytics-arbetsyta för Diagnostikinställningar för Azure Spring Apps och en arbetsytebaserad Application Insights-resurs. Mer information finns i Analysera loggar och mått med diagnostikinställningar och Application Insights Java In-Process Agent i Azure Spring Apps.
  • Tre interna CIDR-intervall (Classless Inter-Domain Routing) (minst /16 vardera) som du har identifierat för användning av Azure Spring Apps-klustret. Dessa CIDR-intervall kan inte dirigeras direkt och används endast internt av Azure Spring Apps-klustret. Kluster får inte använda 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16 eller 192.0.2.0/24 för den interna Azure Spring Apps CIDR. Kluster får inte heller använda några IP-intervall som ingår i klustrets adressintervall för virtuella nätverk.
  • Tjänstbehörighet som beviljats det virtuella nätverket. Azure Spring Apps-resursprovidern kräver ägarbehörighet till ditt virtuella nätverk för att bevilja ett dedikerat och dynamiskt huvudnamn för tjänsten i det virtuella nätverket för ytterligare distribution och underhåll. Anvisningar och mer information finns i avsnittet Bevilja tjänstbehörighet till det virtuella nätverket i Distribuera Azure Spring Apps i ett virtuellt nätverk.
  • Om du använder Azure Firewall eller en virtuell nätverksinstallation (NVA) måste du också uppfylla följande krav:
    • Regler för nätverk och fullständigt kvalificerade domännamn (FQDN). Mer information finns i Krav för virtuellt nätverk.
    • En unik användardefinierad väg (UDR) som tillämpas på vart och ett av tjänstkörnings- och Spring-programundernäten. Mer information om UDR finns i Trafikdirigering för virtuella nätverk. UDR ska konfigureras med en väg för 0.0.0.0/0 med ett mål för din NVA innan du distribuerar Azure Spring Apps-klustret. Mer information finns i avsnittet Bring your own route table (Ta med din egen routningstabell) i Distribuera Azure Spring Apps i ett virtuellt nätverk.
  • Om du distribuerar en Azure Spring Apps Enterprise-planinstans för första gången i målprenumerationen läser du avsnittet Krav i Enterprise-plan på Azure Marketplace.

Granska Terraform-planen

Konfigurationsfilen som används i den här snabbstarten kommer från referensarkitekturen för 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
}

Tillämpa Terraform-planen

Följ dessa steg för att tillämpa Terraform-planen:

  1. Spara filen variables.tf för Standard-planen eller Enterprise-planen lokalt och öppna den sedan i ett redigeringsprogram.

  2. Redigera filen för att lägga till följande värden:

    • Prenumerations-ID för det Azure-konto som du ska distribuera till.

    • En distributionsplats från de regioner där Azure Spring Apps är tillgängligt, enligt vad som visas i Produkter som är tillgängliga per region. Du behöver den korta formen av platsnamnet. Om du vill hämta det här värdet använder du följande kommando för att generera en lista över Azure-platser och letar sedan upp värdet Namn för den region som du har valt.

      az account list-locations --output table
      
  3. Redigera filen för att lägga till följande nya distributionsinformation:

    • Namnet på den resursgrupp som du ska distribuera till.
    • Ett valfritt namn för Azure Spring Apps-distributionen.
    • Ett valfritt namn för Application Insights-resursen.
    • Tre CIDR-intervall (minst /16) som används som värd för Azure Spring Apps-serverdelsinfrastrukturen. CIDR-intervallen får inte överlappa med befintliga CIDR-intervall i målundernätet
    • Nyckel/värde-par som ska användas som taggar på alla resurser som stöder taggar. Mer information finns i Använda taggar för att organisera dina Azure-resurser och hanteringshierarki
  4. Redigera filen för att lägga till följande befintlig infrastrukturinformation:

    • Namnet på resursgruppen där det befintliga virtuella nätverket finns.
    • Namnet på det befintliga virtuella omfångsnätverket.
    • Namnet på det befintliga undernätet som ska användas av Azure Spring Apps Application Service.
    • Namnet på det befintliga undernät som ska användas av Azure Spring Apps Runtime Service.
    • Namnet på Azure Log Analytics-arbetsytan.
  5. Kör följande kommando för att initiera Terraform-modulerna:

    terraform init
    
  6. Kör följande kommando för att skapa Terraform-distributionsplanen:

    terraform plan -out=springcloud.plan
    
  7. Kör följande kommando för att tillämpa Terraform-distributionsplanen:

    terraform apply springcloud.plan
    

Granska distribuerade resurser

Du kan antingen använda Azure-portalen för att kontrollera de distribuerade resurserna eller använda Azure CLI- eller Azure PowerShell-skript för att lista de distribuerade resurserna.

Rensa resurser

Om du planerar att fortsätta arbeta med efterföljande snabbstarter och självstudier kanske du vill lämna dessa resurser på plats. När de inte längre behövs tar du bort resurserna som skapats i den här artikeln med hjälp av följande kommando.

terraform destroy -auto-approve

Nästa steg

I den här snabbstarten distribuerade du en Azure Spring Apps-instans till ett befintligt virtuellt nätverk med Terraform och verifierade sedan distributionen. Om du vill veta mer om Azure Spring Apps fortsätter du till resurserna nedan.