更新时间:2024-04-03 GMT+08:00
分享

模板写作指南

CAM基于原生Terraform语法,同时针对以应用为中心的目的,增加了一些约束和规范。

本章通过部署一个简单的CCE镜像Nginx的RF模板作为具体的例子来介绍自定义模板的书写过程,可以下载下面的模板文件后对照阅读。

https://cam-bucket-public-cn-south-1.obs.cn-south-1.myhuaweicloud.com/templates/202212121739/202212121739.zip

模板结构介绍

图1 模板结构
  • environment文件夹是用来存放相关资源开通的描述文件。
    例如:
    • 部署CCE的Nginx镜像所需环境资源:VPC、Subnet、CCE集群、EIP、ServiceStage应用和环境。
    • 环境关联关系:CCE集群、ServiceStage相关资源需要关联同一VPC;EIP绑定CCE Node节点以供外网访问;ServiceStage环境纳管VPC、CCE和EIP;ServiceStage应用部署ServiceStage的组件,这里是要部署Nginx组件。
  • components文件夹用来存放各个组件,可以是函数组件、微服务组件等。各个组件使用单独的子文件夹存放相关资源的描述文件。
    例如:
    • 部署CCE的Nginx镜像所需组件资源:ServiceStage组件以及ServiceStage组件实例。
    • 组件关联关系:ServiceStage组件实例需要关联ServiceStage环境、应用和组件,ServiceStage组件实例通过关联的镜像部署应用。

模板文件介绍

CAM按照Terraform的最佳实践,一组描述文件主要由main.tf、variables.tf和outputs.tf组成。

  • main.tf:是主要描述文件,用来表示需要创建的环境资源或者组件资源。例如创建一个VPC和Subnet的资源。
    图2 创建VPC和Subnet的资源
  • variables.tf:表示main.tf中的变量定义,定义了变量的类型,默认值等属性。CAM针对原生Terraform作了部分扩展。比如description属性是一个变量描述,可以通过定义"{\"label\":xxx}"的方式指定变量在Console展示的名称。
    图3 定义变量的类型

    同时CAM还引入了内置变量的概念,以cam_inner开头的变量作为CAM的内置变量,您只需要在variable.tf文件中写入了这种变量,服务会自动给该变量赋值,并且不会显示在console页面上提供输入,当前CAM支持的内置变量如表1所示。

    表1 内置变量说明

    变量名

    变量描述

    使用示例

    cam_inner_instance_name

    CAM实例的名称

    variable "cam_inner_instance_name" {

    type = string

    description = "{\"label\":\"实例名称\"}"

    }

    cam_inner_project_id

    用户的projectId

    variable "cam_inner_project_id" {

    type = string

    description = "{\"label\":\"projectId\"}"

    }

  • outputs.tf:表示一组描述文件可以输出的参数值,以环境的输出参数值为例,可以供组件中引用。比如RDS输出的IP,可以在微服务组件中引用作为环境变量注入。

    以样例模板展开描述,环境模板中main.tf创建出ServiceStage应用和环境资源,输出相关的id和name。

    图4 outputs.tf文件

    如果组件模板需要引用环境模板的输出,那么nginx文件夹下的variables.tf需要定义与environment文件夹下的output.tf同名的变量。

    图5 variables.tf文件变量定义
    图6 output.tf文件变量定义

    更多相关信息请查看华为云terraform学习文档:https://support.huaweicloud.com/basics-terraform/terraform_0007.html

分享:

    相关文档

    相关产品