你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 Terraform 预配 Azure Spring Apps

注意

基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告

标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用

本文适用于:❎ 基本计划 ✅ 标准计划 ✅ 企业计划

本快速入门介绍如何使用 Terraform 将 Azure Spring Apps 群集部署到现有虚拟网络中。

借助 Azure Spring Apps,可以轻松地将 Spring 应用程序部署到 Azure,而无需更改代码。 该服务管理 Spring 应用程序的基础结构,让开发人员可以专注于代码。 Azure Spring Apps 可以通过以下方法提供生命周期管理:综合性监视和诊断、配置管理、服务发现、CI/CD 集成、蓝绿部署等。

企业部署计划包括以下 Tanzu 组件:

  • 生成服务
  • 应用程序配置服务
  • 服务注册表
  • Spring Cloud 网关
  • API 门户

通过 AzureRM Terraform 提供程序提供 API 门户组件时,将包含该组件。

如需更多自定义(包括自定义域支持),请参阅 Azure Spring Apps Terraform 提供程序文档。

先决条件

  • Azure 订阅。 如果你没有订阅,请在开始之前创建一个免费帐户
  • Hashicorp Terraform
  • Azure Spring Apps 群集的两个专用子网,一个用于服务运行时,另一个用于 Spring 应用程序。 有关子网和虚拟网络要求,请参阅在虚拟网络中部署 Azure Spring Apps虚拟网络要求部分。
  • 用于 Azure Spring Apps 诊断设置的现有 Log Analytics 工作区,以及一个基于工作区的 Application Insights 资源。 有关详细信息,请参阅使用诊断设置分析日志和指标以及 Azure Spring Apps 中的 Application Insights Java 进程内代理
  • 你已确定供 Azure Spring Apps 群集使用的三个内部无类别域际路由 (CIDR) 范围(每个范围至少为 /16)。 这些 CIDR 范围不可直接路由,只能由 Azure Spring Apps 群集在内部使用。 群集不能将 169.254.0.0/16、172.30.0.0/16、172.31.0.0/16 或 192.0.2.0/24 用于内部 Azure Spring Apps CIDR。 群集也不能使用群集虚拟网络地址范围中包含的任何 IP 范围。
  • 已授予对虚拟网络的服务权限。 Azure Spring Apps 资源提供程序要求对虚拟网络拥有 User Access AdministratorNetwork Contributor 权限,以便为虚拟网络中专用的动态服务主体授予访问权限,从而进行进一步的部署和维护。 有关说明和详细信息,请参阅在虚拟网络中部署 Azure Spring Apps向服务授予虚拟网络权限部分。
  • 如果使用 Azure 防火墙或网络虚拟设备 (NVA),则还需要满足以下先决条件:
  • 如果你是首次在目标订阅中部署 Azure Spring Apps 企业计划实例,请参阅 Azure 市场中的企业计划要求部分。

查看 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            = "S0"
  
  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
    }
  }
}

应用 Terraform 计划

若要应用 Terraform 计划,请执行以下步骤:

  1. 标准计划企业计划的 variables.tf 文件保存到本地,然后在编辑器中打开它。

  2. 编辑该文件,在其中添加以下值:

    • 要部署到的 Azure 帐户的订阅 ID。

    • 提供 Azure Spring Apps 的区域中的一个部署位置,如各区域的产品可用性中所示。 需要以短格式输入位置名称。 若要获取此值,请使用以下命令生成 Azure 位置列表,然后查找所选区域的“名称”值。

      az account list-locations --output table
      
  3. 编辑文件以添加以下新部署信息:

    • 要部署到的资源组的名称。
    • 为 Azure Spring Apps 部署选择的名称。
    • 为 Application Insights 资源选择的名称。
    • 三个 CIDR 范围(至少 /16),用于托管 Azure Spring Apps 后端基础结构。 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 门户来检查已部署的资源,也可以使用 Azure CLI 或 Azure PowerShell 脚本列出已部署的资源。

清理资源

如果打算继续使用后续的快速入门和教程,则可能需要保留这些资源。 如果不再需要本文中创建的资源,请使用以下命令将其删除。

terraform destroy -auto-approve

后续步骤

在本快速入门中,你已使用 Terraform 将 Azure Spring Apps 实例部署到了现有虚拟网络中,然后验证了部署。 若要详细了解 Azure Spring Apps,请继续访问以下资源。