使用Terraform管理KS3

最近更新时间:2020-01-22 22:29:48

目录

1. 简介

1.1 概览

HashiCorp Terraform 是一个开源的自动化的资源编排工具,可以用代码来管理维护 IT 资源。Terraform 的命令行接口(CLI) 提供一种简单机制,用于将配置文件部署到云上,并对其进行版本控制。它编写了描述云资源拓扑的配置文件中的基础结构,例如虚拟机、存储帐户和网络接口。Terraform 是一个高度可扩展的工具,通过 Provider 来支持新的基础架构,通过resource支持不同的资源的创建、更新、读取、删除。

1.2 优势

  • 将基础结构部署到多个云: Terraform适用于多云方案,将相类似的基础结构部署到金山云、其他云提供商或者本地数据中心。开发人员能够使用相同的工具和相似的配置文件同时管理不同云提供商的资源。

  • 自动化管理基础结构: Terraform能够创建配置文件的模板,以可重复、可预测的方式定义、预配和配置云服务器资源,减少因人为因素导致的部署和管理错误。能够多次部署同一模板,创建相同的开发、测试和生产环境。

  • 基础架构即代码(Infrastructure as Code): 可以用代码来管理维护资源。允许保存基础设施状态,从而使您能够跟踪对系统(基础设施即代码)中不同组件所做的更改,并与其他人共享这些配置 。

  • 降低开发成本: 您通过按需创建开发和部署环境来降低成本。并且,您可以在系统更改之前进行评估。

1.3 KS3支持Terraform

用户可以使用 Terraform 来创建、修改或删除 KS3资源。KS3的 Terraform Module 需要支持以下的功能:

  • 创建 Bucket
  • 设置 Bucket ACL
  • 设置 Bucket CORS
  • 设置 Bucket Logging

2.使用说明

2.1 Terraform与相关插件下载

  1. 前往Terraform官网下载适用于您操作系统的程序包
  2. 为可执行文件设置环境变量,以Linux为例:将程序包解压到/usr/local/bin。
  3. 下载金山云provider插件。插件下载地址:https://github.com/KscSDK/terraform-provider-ksyun/tree/master/bin (按OS版本下载)
  4. 运行terraform验证路径配置。将显示可用的Terraform选项的列表、类似如下所示。
    username:~$ terraform
    Usage: terraform [-version] [-help] <command> [args]
  5. 将插件放置到插件目录。Windows:%APPDATA%\terraform.d\plugins 其它:~/.terraform.d/plugins (首次使用需自行创建文件夹)。插件位置说明:https://www.terraform.io/docs/configuration/providers.html#third-party-plugins
  6. (可选)配置环境变量
    $ cd $GOPATH/src/github.com/terraform-providers/terraform-provider-ksyun
    $ export KSYUN_ACCESS_KEY=xxx
    $ export KSYUN_SECRET_KEY=xxx
    $ export KSYUN_REGION=xxx
    $ export TF_LOG=DEBUG
    $ export TF_LOG_PATH=/var/log/terraform.log
    $ export OS_DEBUG=1

2.2 Terraform的使用(以Linux为例)

1.创建测试目录。每个Terraform项目都需要创建一个独立的执行目录。

[root@test bin]# mkdir terraform-test

2.进入 terraform-test 目录。

[root@test bin]# cd terraform-test

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

provider.tf           -- provider 配置
terraform.tfvars      -- 配置 provider 要用到的变量
varable.tf            -- 通用变量
resource.tf           -- 资源定义
data.tf               -- 包文件定义
output.tf             -- 输出

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

provider "ksyun" {
    region = "ks3-cn-beijing.ksyun.com"
    access_key = "ak"
    secret_key = "sk"
}

可以在配置文件中指定,也可以在环境变量中配置,若两处都配置,以配置文件为主。

5.初始化工作目录

[root@test terraform-test]# terraform init

6.用.tf表示资源编排的结果,使用下述命令完成资源编排

命令 说明
terraform init erraform初始化:会加载插件、检查.tf合法性、生成./.terraform隐藏文件夹
terraform plan 预览功能,允许在正式执行之前查看将要执行那些操作:检查.tf合法性,与历史操作比较差异从而只执行差异部分(但不执行变更)
terraform apply 根据.tf文件执行资源变更
terraform destory 删除通过Terraform创建的空的Bucket。
terraform import 导入Bucket:若 Bucket 不是通过 Terraform 创建,可通过命令导入现有的 Bucket。例如:

[root@test terraform-test]# vim main.tf

resource "ksyun_ks3" "bucket" {
  bucket = "test-hangzhou-2025"
  acl = "private"
}
[root@test terraform-test]# terraform import ksyun_ks3.bucket test-hangzhou-2025

2.3 Bucket相关操作

Bucket相关操作 .tf文件 说明
Bucket创建 resource "ksyun_ks3" "bucket-create" {
bucket = "terraform-191128-create"
acl = "private"
}
bucket长度限制3~63
默认为非存档类型{type:"NORMAL"},暂不支持修改
Bucket修改ACL resource "ksyun_ks3" "bucket-acl" {
bucket = "terraform-191128-acl"
acl = "public-read"
}
acl可选项:
private
public-read
public-write
Bucket Logging resource "ksyun_ks3" "bucket-target" {
bucket = "terraform-191128-target"
acl = "public-read"
}

resource "ksyun_ks3" "bucket-logging" {
bucket = "terraform-191128-logging"

logging
{
target_bucket="${ksyun_ks3.bucket-target.id}"
}
}
bucket-target:日志存储位置
bucket-logging:要记录日志的Bucket
注:子用户的权限不支持对Logging的设置
Bucket CORS resource "ksyun_ks3" "bucket-cors" {
bucket = "terraform-191128-cors"
acl = "public-read"

cors_rule {
allowed_header = [""]
allowed_method = ["PUT", "POST"]
allowed_origin = ["https://www.baidu.com"]
expose_header = ["ETag"]
max_age_seconds = 3000
}

cors_rule {
allowed_header = ["
"]
allowed_method = ["PUT", "POST","DELETE"]
allowed_origin = ["https://github.com"]
expose_header = ["x-kss-server-side-encryption"]
max_age_seconds = 3000
}
}
可设置多个cors_rule

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

注册有礼