对象存储

  • 对象存储 > 产品手册 > 最佳实践 >使用Terraform管理对象存储

    使用Terraform管理对象存储

    最近更新时间:2019-11-26 16:26:59

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

    七牛云Provider 依据标准定义了对象存储的 Resource 和 Data Source,您可以使用 Terraform 来管理七牛云对象存储的资源。

    安装七牛云Provider

    1. Clone repository

    $ git clone git@github.com:qiniu/terraform-provider-qiniu.git --recurse-submodules
    

    2. Build the provider

    $ cd terraform-provider-qiniu
    $ make
    

    3. Install the provider

    mkdir -p ~/.terraform.d/plugins
    mv bin/terraform-provider-qiniu ~/.terraform.d/plugins
    

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

    provider "qiniu" {
      access_key = "<Qiniu Access Key>"
      secret_key = "<Qiniu Secret Key>"
    }
    

    5. 初始化目录

    $ terraform init
    

    使用Terraform管理七牛云对象存储

    Provider安装以后,就可以通过Terraform的操作命令来管理七牛云对象存储了。

    创建Bucket

    resource "qiniu_bucket" "basic_bucket" {
      name      = "basic-test-terraform-1" 
      region_id = "z0"                    
      private   = false                    
    }
    

    参数说明:

    参数 必填 说明
    name 空间名
    region_id 空间所属区域
    private 空间是否为private

    设置空间标签

    七牛云Provider 1.0.2及以上的版本支持。

    resource "qiniu_bucket" "basic_bucket" {
      name      = "basic-test-terraform-1" 
      region_id = "z0"                    
      tagging = {
          env = "test"                       
          kind = "basic"                     
      }
    }
    

    参数说明:

    参数 必填 说明
    name 空间名
    region_id 空间所属区域
    tagging 空间标签,每对标签由一对 key-value 组成;每个空间最多设置10对标签

    开启默认首页功能

    七牛云Provider 1.0.2及以上的版本支持。

    resource "qiniu_bucket" "basic_bucket" {
      name      = "basic-test-terraform-1" 
      region_id = "z0"                    
      index_page_on   = true                    
    }
    

    参数说明:

    参数 必填 说明
    name 空间名
    region_id 空间所属区域
    index_page_on 是否开启默认首页功能;true 表示开启

    设置客户端缓存 maxAge

    七牛云Provider 1.0.2及以上的版本支持。

    resource "qiniu_bucket" "basic_bucket" {
      name      = "basic-test-terraform-1" 
      region_id = "z0"                    
      max_age   = 3600                    
    }
    

    参数说明:

    参数 必填 说明
    name 空间名
    region_id 空间所属区域
    max_age 客户端缓存最大时长,单位秒。不设置时,默认为 31536000。

    设置生命周期规则

    七牛云Provider 1.0.2及以上的版本支持。

    resource "qiniu_bucket" "basic_bucket" {
      name      = "basic-test-terraform-1" 
      region_id = "z0"                    
      lifecycle_rules {
        name = "rule_1"                    
        prefix = "users/"                  
        to_line_after_days = 20            
        delete_after_days = 30             
      }
      lifecycle_rules {                    
        name = "rule_2"                    
        prefix = "admin/"                  
        to_line_after_days = 40            
        delete_after_days = 60             
      }                   
    }
    

    参数说明:

    参数 必填 说明
    name 空间名
    region_id 空间所属区域
    lifecycle_rules 空间的生命周期规则

    lifecycle_rules的配置支持:

    参数 必填 说明
    name 规则名称
    prefix 规则匹配的Objects的前缀;为空时表示整个Bucket生效;前缀为空的规则只能设置一条
    to_line_after_days 设置新创建的文件在指定天数后自动转为低频存储
    delete_after_days 设置新创建的文件在指定天数后自动删除;与to_line_after_days同时设置时,值需要大于to_line_after_days

    设置空间Referer防盗链

    七牛云Provider 1.0.2及以上的版本支持。

    resource "qiniu_bucket" "basic_bucket" {
      name      = "basic-test-terraform-1" 
      region_id = "z0"                    
      anti_leech_mode = "blacklist"                            
      referer_pattern = ["foo.com", "*.bar.com", "sub.foo.com"] 
      allow_empty_referer = true                               
      only_enable_anti_leech_for_cdn = false                   
    }
    

    参数说明:

    参数 必填 说明
    name 空间名
    region_id 空间所属区域
    anti_leech_mode 防盗链模式;支持白名单(whitelist)或黑名单模式(blacklist)
    referer_pattern referer规则;支持多条,以 , 分隔
    only_enable_anti_leech_for_cdn 是否开启源站防盗链;必须设置为 false,表示开启源站防盗链,对空间的所有访问请求均生效
    allow_empty_referer 是否允许空 Referer

    详细配置说明可以参见 设置空间的Referer防盗链规则

    设置跨域访问规则

    七牛云Provider 1.0.2及以上的版本支持。
    不做设置时,默认允许任何跨域访问请求。

    resource "qiniu_bucket" "basic_bucket" {
      name      = "basic-test-terraform-1" 
      region_id = "z0"                    
      cors_rules {
        allowed_origins = ["http://www.test1.com"]    
        allowed_methods = ["GET", "POST"]             
        allowed_headers = ["X-Reqid", "Content-Type"] 
        exposed_headers = ["X-Test-1", "X-Test-2"]    
        max_age = 20                                  
      }
      cors_rules {                                    
        allowed_origins = ["http://www.test2.com"]    
        allowed_methods = ["GET", "POST", "HEAD"]     
      }                 
    }
    

    参数说明:

    参数 必填 说明
    name 空间名
    region_id 空间所属区域
    cors_rules 空间的跨域访问规则;最多10条

    cors_rules的配置支持:

    参数 必填 说明
    allowed_origins 允许的跨域请求的来源
    allowed_methods 允许的跨域请求方法
    allowed_headers 允许的跨域请求的响应头
    exposed_headers 允许用户从应用程序中访问的响应头
    max_age 浏览器对特定资源的预取(OPTIONS)请求返回结果的缓存时间

    详细配置说明可以参见 设置空间的跨域资源共享

    创建Object

    resource "qiniu_bucket_object" "basic_object" {
      bucket    = "basic-test-terraform-1"  
      key       = "qiniu-key"             
      source    = "/path/to/file"
      storage_type    = "infrequent"
    }
    

    参数说明:

    参数 必填 说明
    bucket 空间名
    key Object name
    source 待上传Object的存放路径
    storage_type Object的存储类型;infrequent 表示低频存储类型,为空或不设置表示标准存储类型

    导入已有资源

    可以通过 import 命令导入已有的 Bucket 和 Object。以 Bucket 举例如下:
    首先,配置 Bucket 信息

    resource "qiniu_bucket" "importbucket" {
      name      = "video" 
      region_id = "z0"                                      
    }
    

    然后使用 import 命令导入 video 这个 Bucket

    terraform import qiniu_bucket.importbucket video
    

    七牛云对象存储 Data Source

    qiniu_regions

    data "qiniu_regions" "China" {
        id_regex = "^z"                             
        description_regex = "China"               
    }
    

    参数说明:

    参数 必填 说明
    id_regex 区域id的正则匹配规则
    description_regex 区域描述的正则匹配规则

    qiniu_buckets

    data "qiniu_buckets" "z1" {
      name_regex = "^bucket-"
      region_id = "z1"
    }
    

    参数说明:

    参数 必填 说明
    name_regex 空间名的正则匹配规则
    region_id 空间所属区域

    qiniu_buckets_objects

    data "qiniu_buckets_objects" "all" {
      bucket = "basic-test-terraform-1"
    }
    

    参数说明:

    参数 必填 说明
    bucket 空间名的正则匹配规则
    以上内容是否对您有帮助?
  • Icon helper
    Icon free helper
    Close