文档

使用Terraform管理ASM实例

更新时间:

Terraform是HashiCorp公司提供的一种开源的云上资源编排工具,用于安全高效地预览,配置和管理云基础架构和资源,帮助开发者自动化地创建、更新阿里云基础设施资源。本文介绍如何使用Terraform创建和删除ASM实例。

前提条件

  • 已在本地安装和配置Terraform。具体操作,请参见在本地安装和配置Terraform

  • 已配置阿里云账号信息。创建环境变量,用于存放身份认证和地域信息。

    export ALICLOUD_ACCESS_KEY="************" #替换为您的AccessKey ID信息。
    export ALICLOUD_SECRET_KEY="************" #替换为您的AccessKey Secret信息。
    export ALICLOUD_REGION="cn-beijing"    #替换为您的地域ID。
    说明

    为提高权限管理的灵活性和安全性,建议您创建名为Terraform的RAM用户,并为该RAM用户创建AccessKey和授权。具体操作,请参见创建RAM用户为RAM用户授权

背景信息

关于Terraform的详细介绍,请参见terraform

创建ASM实例

  1. 在本地创建名为main.tf的配置文件。

    • 若您没有专有网络和虚拟交换机,您需要使用以下内容创建main.tf文件。

      terraform {
        required_providers {
          alicloud = {
            source = "aliyun/alicloud"
            version = "1.186.0"
          }
        }
      }
      
      variable "k8s_name_prefix" {
        description = "The name prefix used to create Service Mesh (ASM)."
        default     = "tf-asm"
      }
      
      resource "random_uuid" "this" {}
      
      # 默认的资源名称及配置。
      locals {
        # 服务网格名称。
        mesh_name = substr(join("-", [var.k8s_name_prefix, random_uuid.this.result]), 0, 63)
        # 服务网格的规格,可以选择三种规格:standard: 标准版(免费),enterprise:企业版,ultimate:旗舰版。
        mesh_spec = "enterprise"
        # 专有网络名称。
        new_vpc_name = "vpc-for-${local.mesh_name}"
        # 虚拟交换机名称。
        new_vsw_name = "vsw-for-${local.mesh_name}"
      }
      
      # 可以创建虚拟交换机的AZ。
      data "alicloud_zones" "default" {
        available_resource_creation = "VSwitch"
      }
      # 专有网络。
      resource "alicloud_vpc" "default" {
        vpc_name = local.new_vpc_name
      }
      # 虚拟交换机。
      resource "alicloud_vswitch" "default" {
        vpc_id       = alicloud_vpc.default.id
        cidr_block   = cidrsubnet(alicloud_vpc.default.cidr_block, 8, 2)
        zone_id      = data.alicloud_zones.default.zones.0.id
        vswitch_name = local.new_vsw_name
      }
      # 查询可以创建的服务网格版本。
      data "alicloud_service_mesh_versions" "default" {
        edition = local.mesh_spec == "standard" ? "Default" : "Pro"
      }
      # 选择可创建的第一个版本作为创建新服务网格使用的版本。
      locals {
        mesh_version = split(":", data.alicloud_service_mesh_versions.default.ids[0])[1]
      }
      # 服务网格ASM实例。
      resource "alicloud_service_mesh_service_mesh" "default" {
        # 服务网格名称。
        service_mesh_name = local.mesh_name
        # 服务网格的网络配置。
        network {
          # 专有网络ID。
          vpc_id        = alicloud_vpc.default.id
          # 虚拟交换机ID。
          vswitche_list = [alicloud_vswitch.default.id]
        }
        # 服务网格的版本。
        version = local.mesh_version
        # 服务网格的API Server和Pilot负载均衡配置。
        load_balancer {
          # 是否使用eip暴露服务网格API Server负载均衡。
          api_server_public_eip = true
        }
      
        # 服务网格的实例配置Mesh Config。
        mesh_config {
          # 将访问日志采集到阿里云日志服务。
          access_log {
            enabled = true
          }
      
          # 启用控制面日志采集,需开通阿里云日志服务。
          control_plane_log {
            enabled = true
          }
      
          # 启用ARMS链路追踪。
          tracing = true
      
          # 如果启用链路追踪,设置采样百分比。
          pilot {
            trace_sampling = 100
          }
      
          # 开启采集Prometheus监控指标。
          telemetry = true
      
          # 启用网格拓扑(需要开启Prometheus)。
          kiali {
            enabled = true
          }
      
          # 启用网格审计,需要开通阿里云日志服务。
          audit {
            enabled = true
          }
        }
        # 服务网格的规格,可以选择三种规格:standard: 标准版(免费),enterprise:企业版,ultimate:旗舰版。
        cluster_spec = local.mesh_spec
      }

      在main.tf文件中根据实际情况自定义以下参数,其他参数值会使用OpenAPI自动拉取获取。

      参数

      描述

      mesh_name

      自定义服务网格名称。

      mesh_spec

      设置服务网格规格,可选:

      • standard:标准版(免费)。

      • enterprise:企业版。

      • ultimate:旗舰版。

      new_vpc_name

      自定义专有网络名称。

      new_vsw_name

      自定义虚拟交换机名称。

      api_server_public_eip

      是否使用EIP暴露服务网格API Server负载均衡,可选:

      • true:使用EIP暴露服务网格API Server负载均衡。

      • false:不使用EIP暴露服务网格API Server负载均衡。

    • 若您已有专有网络和虚拟交换机,您需要使用以下内容创建main.tf文件。

      重要

      专有网络、虚拟交换机需要和Terraform的身份认证信息处于同一地域,否则将识别不到专有网络和虚拟交换机。

      terraform {
        required_providers {
          alicloud = {
            source = "aliyun/alicloud"
            version = "1.186.0"
          }
        }
      }
      
      variable "asm_name_prefix" {
        description = "The name prefix used to create Service Mesh (ASM)."
        default     = "tf-asm"
      }
      
      resource "random_uuid" "this" {}
      
      # 默认的资源名称及配置。
      locals {
        # 服务网格名称。
        mesh_name = substr(join("-", [var.asm_name_prefix, random_uuid.this.result]), 0, 63)
        # 服务网格的规格,可以选择三种规格:standard: 标准版(免费),enterprise:企业版,ultimate:旗舰版。
        mesh_spec = "enterprise"
        # 已有专有网络名称。
        vpc_name = "vpc-luying-hangzhou1"
        # 已有虚拟交换机名称。
        vsw_name = "vsw-luying-hangzhou1"
      }
      
      # 专有网络。
      data "alicloud_vpcs" "default" {
        name_regex = local.vpc_name # 已经存在的vpc名称。
      }
      # 虚拟交换机。
      data "alicloud_vswitches" "default" {
        vpc_id = data.alicloud_vpcs.default.ids[0]
      }
      locals {
        exist_vswitch_ids = [for vsw in data.alicloud_vswitches.default.vswitches : vsw.id if vsw.name == local.vsw_name]
      }
      # 查询可以创建的服务网格版本。
      data "alicloud_service_mesh_versions" "default" {
        edition = local.mesh_spec == "standard" ? "Default" : "Pro"
      }
      # 选择可创建的第一个版本作为创建新服务网格使用的版本。
      locals {
        mesh_version = split(":", data.alicloud_service_mesh_versions.default.ids[0])[1]
      }
      # 服务网格ASM实例。
      resource "alicloud_service_mesh_service_mesh" "default" {
        # 服务网格名称。
        service_mesh_name = local.mesh_name
        # 服务网格的网络配置。
        network {
          # 专有网络ID。
          vpc_id        =  data.alicloud_vpcs.default.ids[0]
          # 虚拟交换机ID。
          vswitche_list = [local.exist_vswitch_ids[0]]
        }
        # 服务网格的版本。
        version = local.mesh_version
        # 服务网格的API Server和Pilot负载均衡配置。
        load_balancer {
          # 是否使用eip暴露服务网格API Server负载均衡。
          api_server_public_eip = true
        }
      
        # 服务网格的实例配置Mesh Config。
        mesh_config {
          # 将访问日志采集到阿里云日志服务。
          access_log {
            enabled = true
          }
      
          # 启用控制面日志采集,需开通阿里云日志服务。
          control_plane_log {
            enabled = true
          }
      
          # 启用ARMS链路追踪。
          tracing = true
      
          # 如果启用链路追踪,设置采样百分比。
          pilot {
            trace_sampling = 100
          }
      
          # 开启采集Prometheus监控指标。
          telemetry = true
      
          # 启用网格拓扑(需要开启Prometheus)。
          kiali {
            enabled = true
          }
      
          # 启用网格审计,需要开通阿里云日志服务。
          audit {
            enabled = true
          }
        }
        # 服务网格的规格,可以选择三种规格:standard: 标准版(免费),enterprise:企业版,ultimate:旗舰版。
        cluster_spec = local.mesh_spec
      }

      在main.tf文件中根据实际情况自定义以下参数,其他参数值会使用OpenAPI自动拉取获取。

      参数

      描述

      mesh_name

      自定义服务网格名称。

      mesh_spec

      设置服务网格规格,可选:

      • standard:标准版(免费)。

      • enterprise:企业版。

      • ultimate:旗舰版。

      vpc_name

      输入已有专有网络名称。

      vsw_name

      输入已有虚拟交换机名称。

      api_server_public_eip

      是否使用EIP暴露服务网格API Server负载均衡,可选:

      • true:使用EIP暴露服务网格API Server负载均衡。

      • false:不使用EIP暴露服务网格API Server负载均衡。

  2. 执行以下命令,初始化Terraform运行环境。

    terraform init

    预期输出:

    Initializing the backend...
    
    Initializing provider plugins...
    - Finding aliyun/alicloud versions matching "1.166.0"...
    - Finding latest version of hashicorp/random...
    ...
    
    Terraform has been successfully initialized!
    
    You may now begin working with Terraform. Try running "terraform plan" to see
    any changes that are required for your infrastructure. All Terraform commands
    should now work.
    
    If you ever set or change modules or backend configuration for Terraform,
    rerun this command to reinitialize your working directory. If you forget, other
    commands will detect it and remind you to do so if necessary.
  3. 执行以下命令,生成Terraform资源规划。

    terraform plan

    预期输出:

    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
      + create
    
    Terraform will perform the following actions:
    ...
    Plan: 2 to add, 0 to change, 0 to destroy.
  4. 执行以下命令,使用main.tf文件创建ASM实例。

    terraform apply

    预期输出:

    alicloud_service_mesh_service_mesh.example: Refreshing state...
    ...
    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
    
      Enter a value:                    

    Enter a value参数右侧输入yes,预期返回以下内容:

    ...
    alicloud_service_mesh_service_mesh.default: Creating...
    alicloud_service_mesh_service_mesh.default: Still creating... [10s elapsed]
    ...
    alicloud_service_mesh_service_mesh.example: Creation complete after 2m42s [id=**********]
    
    Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

删除ASM实例

使用Terraform删除指定ASM实例时,您必须进入到与main.tf文件相同的目录下后,才能执行命令删除该实例。

进入与main.tf文件相同的目录下,执行以下命令,删除ASM实例。

terraform destroy

预期输出:

...
Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: 

Enter a value参数右侧输入yes,预期返回以下内容:

...
Destroy complete! Resources: 2 destroyed.

Terraform管理的ASM资源

ASM支持通过Terraform管理以下Resource和Data Source:

类型

名称

描述

Resources

alicloud_service_mesh_service_mesh

管理ASM实例。

alicloud_service_mesh_user_permission

配置ASM实例权限。

Data Sources

alicloud_service_mesh_service_meshes

列举所有的ASM实例。

alicloud_service_mesh_versions

列举所有可用的服务网格版本。

  • 本页导读 (1)
文档反馈