빠른 시작: Terraform을 사용하여 Azure Spring Apps 프로비전

참고 항목

Azure Spring Apps는 Azure Spring Cloud 서비스의 새 이름입니다. 서비스에 새 이름이 지정되었지만, 자산을 업데이트하는 동안 스크린샷, 비디오, 다이어그램과 같은 일부 위치에서는 당분간 이전 이름이 표시됩니다.

이 문서의 적용 대상:❌ 기본 ✔️ 표준 ✔️ Enterprise

이 빠른 시작에서는 Terraform을 사용하여 기존 가상 네트워크에 Azure Spring Apps 클러스터를 배포하는 방법을 설명합니다.

Azure Spring Apps를 사용하면 코드 변경 없이 Spring 애플리케이션을 Azure에 쉽게 배포할 수 있습니다. 이 서비스는 개발자가 코드에 집중할 수 있도록 Spring 애플리케이션의 인프라를 관리합니다. Azure Spring Apps는 포괄적인 모니터링 및 진단, 구성 관리, 서비스 검색, CI/CD 통합, 파란색-녹색 배포 등을 사용하여 수명 주기 관리를 제공합니다.

엔터프라이즈 배포 계획에는 다음과 같은 Tanzu 구성 요소가 포함됩니다.

  • Build Service
  • Application Configuration Service
  • 서비스 레지스트리
  • Spring Cloud Gateway
  • API 포털

API Portal 구성 요소는 AzureRM Terraform 공급자를 통해 사용할 수 있게 되면 포함됩니다.

사용자 지정 도메인 지원을 포함한 자세한 사용자 지정은 Azure Spring Apps Terraform 공급자 설명서를 참조하세요.

필수 구성 요소

Terraform 계획 검토

이 빠른 시작에서 사용되는 구성 파일은 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
}

Terraform 계획 적용

Terraform 계획을 적용하려면 다음 단계를 수행합니다.

  1. 표준 계획 또는 엔터프라이즈 계획에 대한 variables.tf 파일을 로컬로 저장한 다음, 편집기에서 엽니다.

  2. 파일을 편집하여 다음 값을 추가합니다.

    • 배포할 Azure 계정의 구독 ID

    • 지역별 사용 가능한 제품에 표시된 대로 Azure Spring Apps를 사용할 수 있는 지역의 배포 위치 약식 형태의 위치 이름이 필요합니다. 이 값을 얻으려면 다음 명령을 사용하여 Azure 위치 목록을 생성한 다음, 선택한 지역의 이름 값을 조회합니다.

      az account list-locations --output table
      
  3. 파일을 편집하여 다음과 같은 새 배포 정보를 추가합니다.

    • 배포할 리소스 그룹의 이름
    • Azure Spring Apps 배포에 대해 선택한 이름
    • Application Insights 리소스에 대해 선택한 이름
    • Azure Spring Apps 백 엔드 인프라를 호스트하는 데 사용되는 세 개의 CIDR 범위(/16 이상). CIDR 범위는 대상 서브넷의 기존 CIDR 범위와 겹치지 않아야 합니다.
    • 태그를 지원하는 모든 리소스에서 태그로 적용할 키/값 쌍. 자세한 내용은 태그를 사용하여 Azure 리소스 및 관리 계층 구조 구성을 참조하세요.
  4. 파일을 편집하여 다음과 같은 기존 인프라 정보를 추가합니다.

    • 기존 가상 네트워크가 있는 리소스 그룹의 이름
    • 기존 범위 가상 네트워크의 이름
    • Azure Spring Apps 애플리케이션 서비스에서 사용할 기존 서브넷의 이름
    • Azure Spring Apps 런타임 서비스에서 사용할 기존 서브넷의 이름
    • Azure Log Analytics 작업 영역의 이름
  5. 다음 명령을 실행하여 Terraform 모듈을 초기화합니다.

    terraform init
    
  6. 다음 명령을 실행하여 Terraform 배포 계획을 만듭니다.

    terraform plan -out=springcloud.plan
    
  7. 다음 명령을 실행하여 Terraform 배포 계획을 적용합니다.

    terraform apply springcloud.plan
    

배포된 리소스 검토

Azure Portal을 사용하여 배포된 리소스를 확인하거나 Azure CLI 또는 Azure PowerShell 스크립트를 사용하여 배포된 리소스를 나열할 수 있습니다.

리소스 정리

후속 빠른 시작 및 자습서를 계속 사용하려는 경우 이러한 리소스를 그대로 유지할 수 있습니다. 더 이상 필요하지 않은 경우 다음 명령을 실행하여 이 문서에서 만든 리소스를 삭제합니다.

terraform destroy -auto-approve

다음 단계

이 빠른 시작에서는 Terraform을 사용하여 기존 가상 네트워크에 Azure Spring Apps 인스턴스를 배포한 다음, 배포의 유효성을 검사했습니다. Azure Spring Apps에 대해 자세히 알아보려면 아래 리소스를 계속 진행합니다.