前言
最近在研究terraform,采了一圈坑,记录一下
什么是terraform
terraform 通过代码配置实现物理机等一些资源的分配。简单说就是,写一个配置文件,启动,就能帮你购买一台云的机器,或者说申请到oss的资源,或者是别的什么。具体功能见官网。
https://www.terraform.io/docs/index.html
名词解释:provider你可以把它看做各个厂商对terraform提供的插件,terraform可以调用这些插件从而实现对资源的操作管理。
terraform流程:init -> plan -> apply -> destroy
对应为:初始化,计划验证,实际应用,销毁
最小demo
我将用一个最小的demo来演示它怎么干活的:通过terraform来创建一个阿里云的oss
(以下没有利益相关)只是因为阿里云我有账号而已,其他供应商也有。
我的本地环境:macOS
步骤1 下载相关资源
下载对应的客户端:https://www.terraform.io/downloads.html
下载解压后得到:terraform的客户端,将它复制到 /usr/local/bin
目录下
$ terraform -version
Terraform v0.12.13
验证一下,输出版本正常的话就好了
下载阿里云对应provider:https://releases.hashicorp.com/terraform-provider-alicloud/1.60.0/
我下载的版本为:terraform-provider-alicloud_1.60.0_darwin_amd64.zip
放置到一个你喜欢的目录下,我这边为/Users/LinkinStar/Documents/tf-plugin
步骤2 申请阿里云相关资源
创建你的阿里云账号,这个不多说了。然后需要创建一个ram用户
https://ram.console.aliyun.com/
用户管理 -> 新建用户 -> 保存好AccessKey和Secret
注意!这里还需要对用户进行授权,点击授权给到相关权限就行,我给了全部,方便测试
步骤3 编写文件
随便创建一个工作目录,然后创建一个tf文件main.tf
# Configure the Alicloud Provider
provider "alicloud" {
access_key = "LTAIaskjfhadsklfhklasdjfhdsakjlfhdask"
secret_key = "6GPashfjksladfhdjskafhdsklajfdhaljfhajfl"
region = "cn-beijing"
}
resource "alicloud_oss_bucket" "bucket-acl" {
bucket = "bucket-123456654321-acl"
acl = "private"
}
其中 access_key 和 secret_key 为你刚才申请ram的信息
bucket 的名称你随便取一个
步骤4 运行命令
init
以下命令均在tf文件当前目录下运行
terraform init -plugin-dir=/Users/LinkinStar/Documents/tf-plugin
注意后面的目录是我们刚才下载的provider的目录
出现 Terraform has been successfully initialized! 为成功
plan
然后使用命令 terraform plan
出现以下信息
# alicloud_oss_bucket.bucket-acl will be created
+ resource "alicloud_oss_bucket" "bucket-acl" {
+ acl = "private"
+ bucket = "bucket-123456654321-acl"
+ creation_date = (known after apply)
+ extranet_endpoint = (known after apply)
+ force_destroy = false
+ id = (known after apply)
+ intranet_endpoint = (known after apply)
+ location = (known after apply)
+ owner = (known after apply)
+ storage_class = "Standard"
}
Plan: 1 to add, 0 to change, 0 to destroy.
apply
运行命令 terraform apply
过程中需要输出yes确认
出现以下信息就证明成功了:
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
你可以到:https://oss.console.aliyun.com/overview
查看OSS是否已经被创建
destroy
最后运行命令 terraform destroy
过程中需要输出yes确认
刚才创建的OSS资源就会被销毁,你可以再在网上刷新一下查看
以上就是通过terraform进行的资源操作,同样的,你可以修改tf文件进行更多资源的操作
对ECS进行操作
# Configure the Alicloud Provider
provider "alicloud" {
access_key = "LTAIaskjfhadsklfhklasdjfhdsakjlfhdask"
secret_key = "6GPashfjksladfhdjskafhdsklajfdhaljfhajfl"
region = "cn-hangzhou"
}
# Create a new ECS instance for a VPC
resource "alicloud_security_group" "group" {
name = "tf_test_foo"
description = "foo"
vpc_id = "${alicloud_vpc.vpc.id}"
}
resource "alicloud_vpc" "vpc" {
name = "tf_test_foo"
cidr_block = "172.16.0.0/12"
}
resource "alicloud_vswitch" "vswitch" {
vpc_id = "${alicloud_vpc.vpc.id}"
cidr_block = "172.16.0.0/21"
availability_zone = "cn-hangzhou-i"
}
resource "alicloud_instance" "instance" {
availability_zone = "cn-hangzhou-i"
security_groups = "${alicloud_security_group.group.*.id}"
instance_type = "ecs.t6-c2m1.large"
system_disk_category = "cloud_efficiency"
image_id = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
instance_name = "test_foo"
vswitch_id = "${alicloud_vswitch.vswitch.id}"
internet_max_bandwidth_out = 0
}
需要注意的是你的账户余额必须>100块,否则会提示余额不足,我这边tf里面写的是非常便宜几分钱一个小时的机器,所以问题不大,你要是害怕你可以不测(再说一遍本文没有利益相关)
相关资源总结
provider下载地址:https://releases.hashicorp.com/
provider相关文档:https://www.terraform.io/docs/providers/index.html
坑点
- 国内的墙导致直接执行init是不可以的,它会去官方拉取provider但是会报错,必须手动下载provider并指定-plugin-dir,呼吸不到外面的新鲜空气有点难受。
- terraform的文档都是英文的并且provider给到的参数选项不全,不知道该填什么。
- 阿里云创建的ram用户默认没有权限。
- 阿里云需要100块?!我充10块钱不行吗?我又花不了那么多,弄得我晚饭都吃不起了。
- 阿里云很多地区是没有便宜的机器卖的,一直提示我机器没有,很难受。
PS: 以上TF文件均用来测试,所以一些变量没有做抽离,实际使用一些变量如key等会抽离成别的文件统一管理,别被我带跑偏了。
总结
总的来说使用tf对于资源的申请还是非常方便的,一个文件就可以搞定,可以做到随时使用随时销毁,同时也支持多次apply对资源进行更新和操作。它不仅可以对服务器进行操作,还有很多公有云的资源如dns等进行操作,并且现在provider支持的厂商很多。