빠른 시작: 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 공급자 설명서를 참조하세요.
필수 구성 요소
- Azure 구독 구독이 없는 경우 시작하기 전에 체험 계정을 만드세요.
- Hashicorp Terraform
- Azure Spring Apps 클러스터를 위한 두 개의 전용 서브넷(하나는 서비스 런타임용이고 다른 하나는 Spring 애플리케이션용). 서브넷 및 가상 네트워크 요구 사항은 가상 네트워크에 Azure Spring Apps 배포의 가상 네트워크 요구 사항 섹션을 참조하세요.
- Azure Spring Apps 진단 설정 및 작업 영역 기반 Application Insights 리소스의 기존 Log Analytics 작업 영역. 자세한 내용은 진단 설정을 사용하여 로그 및 메트릭 분석 및 Azure Spring Apps의 Application Insights Java In-Process 에이전트를 참조하세요.
- Azure Spring Apps 클러스터에서 사용하도록 식별된 세 개의 내부 CIDR(Classless Inter-Domain Routing) 범위(각각 /16 이상). 이러한 CIDR 범위는 직접 라우팅할 수 없으며 Azure Spring Apps 클러스터에서 내부적으로만 사용됩니다. 클러스터에서 내부 Azure Spring Apps CIDR에 대해 169.254.0.0/16, 172.30.0.0/16, 172.31.0.0/16 또는 192.0.2.0/24를 사용하지 않을 수 있습니다. 클러스터에서 클러스터 가상 네트워크 주소 범위 내에 포함된 IP 범위를 사용하지 않을 수도 있습니다.
- 가상 네트워크에 부여된 서비스 권한. Azure Spring Apps 리소스 공급자가 추가 배포 및 유지 관리를 위해 가상 네트워크에서 전용 및 동적 서비스 주체를 부여하려면 가상 네트워크에 대한 소유자 권한이 있어야 합니다. 지침 및 자세한 내용은 가상 네트워크에 Azure Spring Apps 배포의 가상 네트워크에 서비스 권한 부여 섹션을 참조하세요.
- Azure Firewall 또는 NVA(네트워크 가상 어플라이언스)를 사용하는 경우 다음 필수 조건도 충족해야 합니다.
- 네트워크 및 FQDN(정규화된 도메인 이름) 규칙. 자세한 내용은 가상 네트워크 요구 사항을 참조하세요.
- 각 서비스 런타임 및 Spring 애플리케이션 서브넷에 적용되는 고유한 UDR(사용자 정의 경로)입니다. UDR에 대한 자세한 내용은 가상 네트워크 트래픽 라우팅을 참조하세요. UDR은 Azure Spring Apps 클러스터를 배포하기 전에 NVA의 대상이 있는 0.0.0.0/0 경로로 구성해야 합니다. 자세한 내용은 가상 네트워크에 Azure Spring Apps 배포의 사용자 고유의 경로 테이블 가져오기 섹션을 참조하세요.
- 대상 구독에서 Azure Spring Apps 엔터프라이즈 플랜 인스턴스를 처음 배포하는 경우 Azure Marketplace의 엔터프라이즈 플랜의 요구 사항 섹션을 참조하세요.
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 계획을 적용하려면 다음 단계를 수행합니다.
표준 계획 또는 엔터프라이즈 계획에 대한 variables.tf 파일을 로컬로 저장한 다음, 편집기에서 엽니다.
파일을 편집하여 다음 값을 추가합니다.
배포할 Azure 계정의 구독 ID
지역별 사용 가능한 제품에 표시된 대로 Azure Spring Apps를 사용할 수 있는 지역의 배포 위치 약식 형태의 위치 이름이 필요합니다. 이 값을 얻으려면 다음 명령을 사용하여 Azure 위치 목록을 생성한 다음, 선택한 지역의 이름 값을 조회합니다.
az account list-locations --output table
파일을 편집하여 다음과 같은 새 배포 정보를 추가합니다.
- 배포할 리소스 그룹의 이름
- Azure Spring Apps 배포에 대해 선택한 이름
- Application Insights 리소스에 대해 선택한 이름
- Azure Spring Apps 백 엔드 인프라를 호스트하는 데 사용되는 세 개의 CIDR 범위(/16 이상). CIDR 범위는 대상 서브넷의 기존 CIDR 범위와 겹치지 않아야 합니다.
- 태그를 지원하는 모든 리소스에서 태그로 적용할 키/값 쌍. 자세한 내용은 태그를 사용하여 Azure 리소스 및 관리 계층 구조 구성을 참조하세요.
파일을 편집하여 다음과 같은 기존 인프라 정보를 추가합니다.
- 기존 가상 네트워크가 있는 리소스 그룹의 이름
- 기존 범위 가상 네트워크의 이름
- Azure Spring Apps 애플리케이션 서비스에서 사용할 기존 서브넷의 이름
- Azure Spring Apps 런타임 서비스에서 사용할 기존 서브넷의 이름
- Azure Log Analytics 작업 영역의 이름
다음 명령을 실행하여 Terraform 모듈을 초기화합니다.
terraform init
다음 명령을 실행하여 Terraform 배포 계획을 만듭니다.
terraform plan -out=springcloud.plan
다음 명령을 실행하여 Terraform 배포 계획을 적용합니다.
terraform apply springcloud.plan
배포된 리소스 검토
Azure Portal을 사용하여 배포된 리소스를 확인하거나 Azure CLI 또는 Azure PowerShell 스크립트를 사용하여 배포된 리소스를 나열할 수 있습니다.
리소스 정리
후속 빠른 시작 및 자습서를 계속 사용하려는 경우 이러한 리소스를 그대로 유지할 수 있습니다. 더 이상 필요하지 않은 경우 다음 명령을 실행하여 이 문서에서 만든 리소스를 삭제합니다.
terraform destroy -auto-approve
다음 단계
이 빠른 시작에서는 Terraform을 사용하여 기존 가상 네트워크에 Azure Spring Apps 인스턴스를 배포한 다음, 배포의 유효성을 검사했습니다. Azure Spring Apps에 대해 자세히 알아보려면 아래 리소스를 계속 진행합니다.
- 아래 위치에서 다음 샘플 애플리케이션 중 하나를 배포합니다.
- Azure Spring Apps에서 사용자 지정 도메인을 사용합니다.
- Azure Application Gateway를 사용하여 Azure Spring Apps의 애플리케이션을 인터넷에 노출합니다. 자세한 내용은 가상 네트워크에서 엔드투엔드 TLS를 사용하여 애플리케이션 노출을 참조하세요.
- Microsoft Azure Well-Architected Framework를 기반으로 하는 안전한 엔드투엔드 Azure Spring Apps 참조 아키텍처를 확인합니다.