Terraform管理金山云资源

最近更新时间:2019-12-04 10:39:57

1. 配置金山云provider文件

【Provider】 是一个与Open API直接交互的后端驱动,Terraform就是通过Provider来完成对基础设施资源的管理的。不同的基础设施提供商都需要提供一个Provider来实现对自家基础设施的统一管理。

登录控制台获取账号ak/sk密钥。

image.png

因为每个Terraform项目都需要一个独立的执行目录,所以我们可以先创建一个新的目录,目录名称Terraform-ksyun。

# mkdir Terraform-ksyun
# cd Terraform-ksyun

image.png

进入新建目录,创建provider配置文件。Terraform在运行时,会读取该目录空间下所有.tf和.tfvars文件。因此,您可以按照实际用途将配置信息写入到不同的文件中。

创建 provider.tf 文件,需要按以下格式配置您的身份认证信息:

# vim provider.tf

provider "ksyun" {
   access_key = "AKLT7Nj7p******"
   secret_key = "OCd8XJrX+******"
   region = "cn-beijing-6" //机房信息
 }

初始化工作目录,检查是否配置正确。

# terraform init

image.png

2. 部署金山云资源

在Terraform中,一个具体的资源或者服务称之为一个resource,比如一台云服务器实例,一个VPC网络,一个EIP实例。每个特定的resource包含了若干可用于描述对应资源或者服务的属性字段,通过这些字段来定义一个完整的资源或者服务。

注意:.tf文件的参数属性请直接参考官网openapi的接口介绍。

OpenAPI文档中参数字段存在大写,但Terraform的.tf文档参数名称仅支持小写,故编写.tf文本时,注意将API参数全部转成小写。

示例一: 创建VPC

创建VPC实例资源文件

VPC OpenAPI官网链接:VPC

# vim VPC.tf

//创建一个VPC实例

resource "ksyun_vpc" "VPC_test01" {
  vpc_name   = "ksyun_vpc_tf"
  cidr_block = "10.0.0.0/16"
}

执行 terraform plan 查看部署计划,

#terraform plan

image.pngimage

执行 terraform apply 进行资源创建

#terraform apply
Enter a value: yes

image.png

控制台查看VPC资源创建成功

image.png

示例二: 创建云服务器

创建云服务器实例资源文件

主机OpenAPI官网链接:云服务器OpenAPI

在Terraform-ksyun目录下创建一个instance.tf文件,编辑文件按照指定格式输入创建云服务器相关的配置参数,注意参数名称小写。

# vim instance.tf

//创建一台通用型N3云服务器

resource "ksyun_instance" "default" {
  image_id      = "48de6f74-e287-45df-b55e-94266d77483f"
  instance_type = "N3.2B"
  system_disk {
    disk_type = "SSD3.0"
    disk_size = 30
  }
  data_disk_gb = 0

  #only support part type
  data_disk {
    type                 = "SSD3.0"
    size                 = 50
    delete_with_instance = true
  }
  subnet_id            = "e9b83973-b6aa-48b3-b400-d45cfdb832a4"
  instance_password    = "Qwer1234"
  keep_image_login     = false
  charge_type          = "Daily"
  purchase_time         = ""
  security_group_id    = ["c628fd6a-c480-41aa-8fad-02879cfe60fb"]
  private_ip_address   = ""
  instance_name        = "xuan-tf-update"
  instance_name_suffix = ""
  sriov_net_support    = false
  project_id           = 0
  data_guard_id        = ""
}

执行 terraform plan 查看部署计划,这里参数前面的+代表新添加的资源,当销毁资源时,参数前面对应的符号会变为-;更改一些参数需要重新部署资源时,该资源前面的符号为-/+。

#terraform plan

image.png

执行 terraform apply 进行资源创建

#terraform apply

image.png

输入 yes ,显示成功创建资源

image.png

控制台查看云服务器资源创建成功

image.png

示例三: 读取资源

对于常用的查询类资源,可以通过Resource Data实时获取,也能在模板中进行引用。Resource Data是只读类型的资源,支持参数过滤,不会改变基础架构状态。以data+产品线命名的文件夹,代表不同资源,可根据配置条件导出全部符合的资源。若配置条件为空,导出全部。

以链路类型为例

创建链路实例资源文件,查找链路类型为BGP的链路ID。

# vim data_lines.tf

//创建一个VPC实例

 data "ksyun_lines" "data_line01" {
    output_file = "output_result"
    line_name   = "BGP"
}

执行 terraform plan 查看返回结果,

image.png

读取output_result文件, 可以查看到 "line_id": "5fc2595f-1bfd-481b-bf64-2d08f116d800"。

cat output_result

[
    {
        "line_id": "5fc2595f-1bfd-481b-bf64-2d08f116d800",
        "line_name": "BGP",
        "line_type": "Public"
    }
]

示例四: 创建子网

创建子网实例资源文件

子网 OpenAPI官网链接:子网

文本中子网关联的VPC后面并没有直接填写具体参数信息,可以通过调用相关资源tf文件中的id字段内容实现具体的资源分配,本次调用VPC.tf文件。

# vim subnet.tf

//创建一个子网

resource "ksyun_subnet" "subnet_test01" {
      subnet_name       = "tf-subnet01"
      cidr_block        = "10.0.1.0/24"
      subnet_type       = "Normal"
      dhcp_ip_from      = "10.0.1.2"
      dhcp_ip_to        = "10.0.1.253"
      vpc_id            = "${ksyun_vpc.VPC_test01.id}"
      gateway_ip        = "10.0.1.1"
      dns1              = "198.18.254.30"
      dns2              = "198.18.254.31"
}

执行 terraform plan 查看部署计划,

#terraform plan

image.png

执行 terraform apply 进行资源创建

#terraform apply
Enter a value: yes

image.png

控制台查看资源创建成功。

image.png

示例五: 创建弹性IP

创建弹性IP资源文件

弹性IP地址 OpenAPI官网链接:EIP

# 查找BGP链路ID
 data "ksyun_lines" "data_line01" {
    output_file = "output_result"
    line_name   = "BGP"
}

# Create an eip
resource "ksyun_eip" "eip_test01" {
  line_id ="${data.ksyun_lines.data_line01.lines.0.line_id}"
  band_width =1
  charge_type = "PostPaidByDay"
  purchase_time =1
  project_id=0
}

执行 terraform plan 查看部署计划,

#terraform plan

image.png

执行 terraform apply 进行资源创建

#terraform apply
Enter a value: yes

image.png

控制台查看资源创建成功。

image.png

金山云,开启您的云计算之旅

注册有礼