クイックスタート: Terraform を使用して Azure Spring Apps をプロビジョニングする

注意

Azure Spring Apps は、Azure Spring Cloud サービスの新しい名前です。 サービスの名前は新しくなりましたが、スクリーンショット、ビデオ、図などの資産の更新に取り組んでいる間、場所によってはしばらく古い名前が表示されます。

この記事の適用対象:❌ Basic ✔️ Standard ✔️ Enterprise

このクイックスタートでは、Terraform を使用して Azure Spring Apps クラスターを既存の仮想ネットワークにデプロイする方法について説明します。

Azure Spring Apps では、コードを変更せずに、Spring アプリケーションを Azure に簡単にデプロイできます。 Spring アプリケーションのインフラストラクチャはこのサービスによって管理されるため、開発者はコードに専念できます。 Azure Spring Apps では、包括的な監視と診断、構成管理、サービス検出、CI/CD 統合、ブルー/グリーン デプロイなどを使用して、ライフサイクルを管理できます。

Enterprise デプロイ プランには、次の Tanzu コンポーネントが含まれます。

  • ビルド サービス
  • アプリケーション構成サービス
  • サービス レジストリ
  • Spring Cloud Gateway
  • API ポータル

API ポータル コンポーネントは、AzureRM Terraform プロバイダーを介して使用できるようになった場合に含まれます。

カスタム ドメイン サポートを含むカスタマイズの詳細については、Azure Spring Apps Terraform プロバイダーのドキュメントを参照してください。

前提条件

  • Azure サブスクリプション。 サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
  • Hashicorp Terraform
  • Azure Spring Apps クラスター用の 2 つの専用サブネット (1 つはサービス ランタイム用、もう 1 つは Spring アプリケーション用)。 サブネットと仮想ネットワークの要件については、「仮想ネットワークに Azure Spring Apps をデプロイする」の「仮想ネットワークの要件」セクションを参照してください。
  • Azure Spring Apps の診断設定用の既存の Log Analytics ワークスペースと、ワークスペースベースの Application Insights リソース。 詳細については、「診断設定でログとメトリックを分析する」と「Azure Spring Apps での Application Insights Java In-Process Agent」を参照してください。
  • Azure Spring Apps クラスターに使用するために指定した 3 つの内部クラスレス ドメイン間ルーティング (CIDR) の範囲 (それぞれ少なくとも /16)。 これらの CIDR の範囲は直接ルーティング可能ではなく、Azure Spring Apps クラスターによって内部的にのみ使用されます。 クラスターは、内部 Azure Spring Apps の CIDR に 169.254.0.0/16172.30.0.0/16172.31.0.0/16192.0.2.0/24 を使用することはできません。 また、クラスターは、クラスターの仮想ネットワーク アドレス範囲に含まれる IP 範囲を使用することもできません。
  • 仮想ネットワークに付与されたサービスのアクセス許可。 仮想ネットワーク上の専用かつ動的なサービス プリンシパルにさらに高度なデプロイやメンテナンスの権限を付与するには、Azure Spring Apps リソース プロバイダーに仮想ネットワークの所有者としてのアクセス許可が必要です。 手順と詳細については、「仮想ネットワークに Azure Spring Apps をデプロイする」の「仮想ネットワークにサービス アクセス許可を付与する」セクションを参照してください。
  • Azure Firewall またはネットワーク仮想アプライアンス (NVA) を使用している場合は、次の前提条件も満たす必要があります。
  • ターゲット サブスクリプションで初めて Azure Spring Apps Enterprise プラン インスタンスをデプロイする場合は、「Azure Marketplace の Enterprise プラン」の「要件」セクションを参照してください。

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. Standard プランまたは Enterprise プランvariables.tf ファイルをローカルに保存し、エディターで開きます。

  2. ファイルを編集して、次の値を追加します。

    • デプロイ先の Azure アカウントのサブスクリプション ID。

    • リージョン別の利用可能な製品」で示されている、Azure Spring Apps が利用可能なリージョンからのデプロイの場所。 場所名の短い形式が必要です。 この値を取得するには、次のコマンドを使用して Azure の場所の一覧を生成し、選択したリージョンの [名前] の値を検索します。

      az account list-locations --output table
      
  3. ファイルを編集して、次の新しいデプロイ情報を追加します。

    • デプロイ先のリソース グループの名前。
    • Azure Spring Apps のデプロイで選択した名前。
    • Application Insights リソースに対して選択した名前。
    • Azure Spring Apps バックエンド インフラストラクチャをホストするために使用される 3 つの 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 の詳細については、以下のリソースに進んでください。