Skip to content

qiniu/terraform-module

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

七牛 Terraform 预设模板

基于本地 Terraform 运行

安装 Qiniu Provider

由于当前的七牛 Provider 暂未发布到 registry.terraform.io 平台, 故无法实现在线自动安装,需要手动下载插件二进制并拷贝到指定目录下。

编写本地配置文件,默认配置文件路径在$HOME/.terraformrc

// 全局插件缓存本地目录
plugin_cache_dir = "/home/zzq/.terraform.d/plugin-cache"

provider_installation {
  // 本地文件系统镜像源,qiniu 插件目前需要使用这种方式安装,需要将插件拷贝到指定镜像目录中
  filesystem_mirror {
    path    = "/home/zzq/.terraform.d/plugin-mirror"
    include = ["registry.terraform.io/hashicorp/qiniu"]
  }
  // 官方镜像源,需要排除 qiniu 插件的安装
  direct {
    exclude = ["registry.terraform.io/hashicorp/qiniu"]
  }
}

将插件复制到配置文件中配置的对应目录下,比如一个示例的目录结构如下:

➜  .terraform.d tree
.
├── checkpoint_cache
├── checkpoint_signature
├── plugin-cache
└── plugin-mirror
    └── registry.terraform.io
        └── hashicorp
            └── qiniu
                └── 1.0.0
                    └── linux_amd64
                        └── terraform-provider-qiniu

运行相应的 Terraform Module

设置环境变量

# Qiniu 账户的AK/SK
export QINIU_ACCESS_KEY="QINIU_ACCESS_KEY"
export QINIU_SECRET_KEY="<QINIU_SECRET_KEY>"
# 要操作的资源默认的区域ID
export QINIU_REGION_ID="ap-southeast-1"

一键部署单实例 MySQL 应用

cd mysql/standalone
terraform init
terraform apply
# 之后将要交互式输入各个tf模板参数,绝大部分参数都有默认值,这里只必填一个密码即可

操作界面如下:

➜  standalone git:(main) ✗ terraform apply
var.mysql_password
  MySQL password

  Enter a value:

data.qiniu_compute_images.available_official_images: Reading...
data.qiniu_compute_images.available_official_images: Read complete after 0s

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:

  # qiniu_compute_instance.mysql_primary_node will be created
  + resource "qiniu_compute_instance" "mysql_primary_node" {
      + cost_charge_type     = "PostPaid"
      + cpu                  = (known after apply)
      + created_at           = (known after apply)
      + description          = (known after apply)
      + id                   = (known after apply)
      + image_id             = "68007b52495c899e195a1e15"
      + image_name           = (known after apply)
      + instance_type        = "ecs.t1.c1m2"
      + memory               = (known after apply)
      + name                 = (known after apply)
      + password             = (sensitive value)
      + private_ip_addresses = (known after apply)
      + public_ip_addresses  = (known after apply)
      + region_id            = (known after apply)
      + region_name          = (known after apply)
      + state                = "Running"
      + system_disk_id       = (known after apply)
      + system_disk_size     = 20
      + system_disk_type     = "local.ssd"
      + user_data            = (sensitive value)
    }

  # random_password.mysql_instance_password will be created
  + resource "random_password" "mysql_instance_password" {
      + bcrypt_hash = (sensitive value)
      + id          = (known after apply)
      + length      = 16
      + lower       = true
      + min_lower   = 0
      + min_numeric = 0
      + min_special = 0
      + min_upper   = 0
      + number      = true
      + numeric     = true
      + result      = (sensitive value)
      + special     = true
      + upper       = true
    }

  # random_string.resource_suffix will be created
  + resource "random_string" "resource_suffix" {
      + id          = (known after apply)
      + length      = 6
      + lower       = true
      + min_lower   = 0
      + min_numeric = 0
      + min_special = 0
      + min_upper   = 0
      + number      = true
      + numeric     = true
      + result      = (known after apply)
      + special     = false
      + upper       = false
    }

Plan: 3 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + mysql_primary_endpoint = (known after apply)

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

random_string.resource_suffix: Creating...
random_password.mysql_instance_password: Creating...
random_string.resource_suffix: Creation complete after 0s [id=93wsze]
random_password.mysql_instance_password: Creation complete after 0s [id=none]
qiniu_compute_instance.mysql_primary_node: Creating...
qiniu_compute_instance.mysql_primary_node: Still creating... [00m10s elapsed]
qiniu_compute_instance.mysql_primary_node: Still creating... [00m20s elapsed]
qiniu_compute_instance.mysql_primary_node: Still creating... [00m30s elapsed]
qiniu_compute_instance.mysql_primary_node: Still creating... [00m40s elapsed]
qiniu_compute_instance.mysql_primary_node: Creation complete after 41s [id=i-69281ce0e3108870683f3b35]

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

Outputs:

mysql_primary_endpoint = "10.198.1.44:3306"

Tips: 也可以同目录创建一个 .tfvars.json 后缀结尾的 json 文件,里面放入所有 variables.tf中定义的变量值作为输入,apply 时将自动读取。

其他一些常用操作:

# 销毁所有已创建资源
terraform destroy
# 查看资源变更计划
terraform plan
# 导出资源变更计划文件
terraform plan -out="tfplan"
# 基于资源变更计划文件进行apply变更
terraform apply "tfplan"

基于七牛资源栈在线运行

TODO

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5