乐趣区

关于腾讯云:Terraform系列一腾讯云CVM相关简单创建

背景:
记得 2019 左右就看到过Terraform 系列的文章和书籍,过后所有的业务都上云了治理也很是不便,看了一眼就没有作过多的钻研。但本着对技术倒退的前瞻敏锐性,还是感觉这个货色是会火起来的。刚巧最佳泽阳大佬 devops 训练营https://www.yuque.com/devopsvip 交叉上了Terraform!集体又开始下体验一把了 ……

一、装置 Terraform

1. 包管理器 or 二进制

关上 terraform 官网下载页面 https://www.terraform.io/downloads。抉择装置形式 包管理器 or 二进制形式

2. Terraform Cloud

当然了还有托管形式Terraform Cloud…… 毕竟当初是一个到处 cloud 的时代,疏忽,这里只演示包管理器的装置形式!

3. rocky install terraform

集体的工作环境是一台 rocky linux,抉择了 centos8/rhel 的 yum 装置的形式:

[root@zhangpeng ~]# sudo yum install -y yum-utils
[root@zhangpeng ~]# sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
[root@zhangpeng ~]# sudo yum -y install terraform



查看 Terraform 以后装置版本:

[root@zhangpeng ~]# terraform -version
Terraform v1.1.7
on linux_amd64

二、应用 Terraform 治理腾讯云

参照:

1. 创立帐号并受权:

登陆拜访治理 - 用户 - 用户列表 - 新建用户,依照本人的形式抉择创立用户,我抉择了疾速构建


给了 AdministratorAccess 权限限 …. 测试吧,原本其实我先开一个子项目而后受权?然而这目迷五色的权限配置,无从下手 …… 点击创立用户,生成密钥:


注:生产环境应该尽量正当设置帐号权限边界!

2. 配置 provider 文件 and terraform init

创立一个 terraform 的文件夹并配置 id 密钥,参照:https://cloud.tencent.com/developer/article/1473713

[root@zhangpeng ~]# mkdir terraform 
[root@zhangpeng ~]# cd terraform/
[root@zhangpeng terraform]# vim provider.tf
[root@zhangpeng terraform]# cat provider.tf 
provider "tencentcloud" {
    secret_id  = "xxxxxxxxxxxxxxxxxxxx"
    secret_key = "xxxxxxxxxxxxxxxxxxx"
    region     = "ap-beijing"
}



what 开始没有认真看报错,凭直觉认为是被墙 …. 迷信上网还是如此。google 搜寻:

Could not retrieve the list of available versions for provider hashicorp/tencentcloud: provider registry registry.terraform.io │ does not have a provider named registry.terraform.io/hashicorp/tencentcloud


https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs

不倡议将凭据硬编码到任何 Terraform 配置中,如果此文件已经提交给公共版本控制系统,则存在机密泄露的危险。…… 那还是应用零碎变量吧!
依照提醒:

[root@zhangpeng terraform]# export TENCENTCLOUD_SECRET_ID="xxxxxxxx"
[root@zhangpeng terraform]# export TENCENTCLOUD_SECRET_KEY="xxxxxx"
[root@zhangpeng terraform]# export TENCENTCLOUD_REGION="ap-beijing"
[root@zhangpeng terraform]# terraform plan


还是没有搞起来有点狐疑人生了 …….
谷歌搜了一下最新的 terraform 腾讯云关键词搜寻到聂伟星的博客:_聂伟星_https://www.niewx.cn/2021/09/11/Terraform-orchestrates-Tencent-Cloud-resources/。依照流程走一下:

[root@zhangpeng terraform]# cat provider.tf 
terraform {
  required_providers {
    tencentcloud = {source = "tencentcloudstack/tencentcloud"}
  }
}
provider "tencentcloud" {
    secret_id  = "xxxxxxxxxxx"
    secret_key = "xxxxxxxxxxx"
    region     = "ap-beijing"
}
[root@zhangpeng terraform]# terraform init


ok,int 胜利

3. 编排部署文件

就参照:https://cloud.tencent.com/developer/article/1473713

1. 首先创立一个 vpc

cat vpc.ft

resource "tencentcloud_vpc" "vpc_bj" {
    name = "vpc_bj"
    cidr_block = "10.0.0.0/16"
    is_multicast = false
}

2. 创立一个路由

cat route_table.tf

resource "tencentcloud_route_table" "rtb_vpc_bj" {
  vpc_id = tencentcloud_vpc.vpc_bj.id
  name   = "rtb-vpc-bj"
}

注:后之后觉 route 其实能够不创立的 ….. 毕竟有默认的 default……

3. 创立子网

创立子网 subset,我这里之间创立了 4 个子网 ……. 偷懒了,集体习惯而已 ……
cat subnet.tf

resource "tencentcloud_subnet" "subnet_bj_01" {
    name = "bj-01"
    cidr_block = "10.0.1.0/24"
    availability_zone = "ap-beijing-1" 
    vpc_id = "${tencentcloud_vpc.vpc_bj.id}"
    route_table_id = "${tencentcloud_route_table.rtb_vpc_bj.id}"
}
resource "tencentcloud_subnet" "subnet_bj_02" {
    name = "bj-02"
    cidr_block = "10.0.2.0/24"
    availability_zone = "ap-beijing-2"
    vpc_id = "${tencentcloud_vpc.vpc_bj.id}"
    route_table_id = "${tencentcloud_route_table.rtb_vpc_bj.id}"
}
resource "tencentcloud_subnet" "subnet_bj_03" {
    name = "bj-03"
    cidr_block = "10.0.3.0/24"
    availability_zone = "ap-beijing-3"
    vpc_id = "${tencentcloud_vpc.vpc_bj.id}"
    route_table_id = "${tencentcloud_route_table.rtb_vpc_bj.id}"
}
resource "tencentcloud_subnet" "subnet_bj_04" {
    name = "bj-04"
    cidr_block = "10.0.4.0/24"
    availability_zone = "ap-beijing-4"
    vpc_id = "${tencentcloud_vpc.vpc_bj.id}"
    route_table_id = "${tencentcloud_route_table.rtb_vpc_bj.id}"
}

4. 创立平安组

cat security_group.tf

resource "tencentcloud_security_group" "sg_bj" {name = "sg-bj"}

resource "tencentcloud_security_group_rule" "sg_bj_1" {security_group_id = "${tencentcloud_security_group.sg_bj.id}"
    type = "ingress"
    cidr_ip = "0.0.0.0/0"
    ip_protocol = "tcp"
    port_range = "22,80"
    policy = "accept"
}

5. 创立 cvm

cat cvm.tf

resource "tencentcloud_instance" "cvm_almalinux" {
  instance_name = "cvm-almalinux"
  availability_zone = "ap-beijing-2"
  image_id = "img-q95tlc25"
  instance_type = "S2.MEDIUM2"
  system_disk_type = "CLOUD_PREMIUM"
      
  security_groups = ["${tencentcloud_security_group.sg_bj.id}"
  ]

  vpc_id = "${tencentcloud_vpc.vpc_bj.id}"
  subnet_id = "${tencentcloud_subnet.subnet_bj_02.id}"
  internet_max_bandwidth_out = 10
  count = 1
}

当然了区域镜像都能够本人抉择了 ….. 我 img-q95tlc25 是一个 almalinux 的镜像。新近找腾讯云团队问能不能早点上 rocky 跟 almalinux 的镜像。给我分享了一下正好测试一下!

6 . terraform plan

执行 terraform plan 预览部署打算,

[root@zhangpeng terraform]# terraform plan




7. terraform apply

terraform apply 进行资源部署

[root@zhangpeng terraform]# terraform apply


enter a value 输出 yes 确认。期待资源创立!

4. 验证资源的部署

登陆腾讯云后盾似有网络管理页面:https://console.cloud.tencent.com/vpc/vpc 抉择北京区域。查看新建的 vpc 创立胜利

点开对应 vpc route 发现 route 也创立胜利,默认是有 default 路由的,所以我这里是不是能够不创立路由?

点击子网查看创立的四个 subset 子网:

点击上图 bj-02 子网中的 cvm 查看示例名 镜像 id 规格与配置文件绝对应!

后续:

  1. 给 cvm 绑定公网 ip
  2. 调整硬盘大小,增加数据盘
  3. 给 cvm 绑定 ssh-key

以上都是针对 cvm 的治理,其余的想更进一步体验一下其余服务的治理。比方 数据库 负载平衡 tke 等其余的相干根底服务!
对了删除服务我也体验过了 …… 开始创立有问题删除从新创立的:

terraform show
terraform destroy

另外感觉集体对帐号的权限治理玩的不太好。想深入研究一下腾讯云的 cam 访问控制
特地鸣谢:

  1. 聂伟星的博客 https://registry.terraform.io/providers/tencentcloudstack
  2. 腾讯云生态产品团队:腾讯云 Terraform 利用指南(一)(比拟早的文章了,有点老)
  3. 官网文档:https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs/
退出移动版