前言

本文以 Terraform tencentcloud 腾讯云为实践案例,之后会再陆续更新 AWS, Azure, GCP 等

更新历史

2020 年 10 月 10 日 - 初稿

阅读原文 - https://wsgzao.github.io/post/terraform-tencentcloud/


TencentCloud Provider

腾讯云 Terraform 相关 API 都可以通过官网查询,注意版本

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

The TencentCloud provider is used to interact with many resources supported by TencentCloud. The provider needs to be configured with the proper credentials before it can be used.

如果遇到描述不清楚的细节建议回头阅读 腾讯云文档中心

腾讯云创建用户

创建用户步骤

  1. 腾讯云 访问管理 -> 用户 -> 用户列表
  2. 进行新建用户,自定义创建
  3. 对用户进行授权
  4. 创建秘钥

https://console.cloud.tencent.com/cam/capi

配置 provider 环境变量

可以通过创建 main.tf 实现,但建议以临时环境变量加载避免敏感信息泄漏

1
2
3
4
5
provider "tencentcloud" {
secret_id = "your_secret_id"
secret_key = "your_secret_key"
region = "your_region"
}

也可以直接通过环境变量方式

1
2
3
export TENCENTCLOUD_SECRET_ID="your_secret_id"
export TENCENTCLOUD_SECRET_KEY="your_secret_key"
export TENCENTCLOUD_REGION="your_region"

推荐的配置是使用环境变量加载 SECRET_IDSECRET_KEY

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# tencentcloud-sandbox.
export TENCENTCLOUD_SECRET_ID="xxx"
export TENCENTCLOUD_SECRET_KEY="xxx"

# provider.tf
terraform {
required_providers {
tencentcloud = {
source = "tencentcloudstack/tencentcloud"
}
}
required_version = ">= 0.13"
}

# main.tf
provider "tencentcloud" {
region = "ap-chengdu"
}

查询公共资源

把资源依赖的上游资源,先查询出来,便宜后面引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Get availability regions
data "tencentcloud_availability_regions" "default" {
}

# Get availability zones
data "tencentcloud_availability_zones" "default" {
}

# Get availability images
data "tencentcloud_images" "default" {
image_type = ["PUBLIC_IMAGE"]
os_name = "centos"
}

# Get availability instance types
data "tencentcloud_instance_types" "default" {
cpu_core_count = 1
memory_size = 2

filter {
name = "zone"
values = ["${var.availability_zone}"]
}

filter {
name = "instance-family"
values = ["S5"]
}
}

腾讯云资源编排 TIC 实践

TIC(Tencent Cloud Infrastructure as Code)
https://cloud.tencent.com/document/product/1213/45684

腾讯云资源编排 TIC 是腾讯云推出的 IaC 开放平台,融合多种业内优秀的开源技术,通过 IaC 的方式解决您在云基础设施管理中面临的效率、成本和安全问题。

TIC 提供了资源编排、配置管理和合规检查三大功能模块,支持 HCL(Terraform)格式语法编写,同时提供丰富的基于腾讯云最佳实践的公共模板,有效降低您的学习、使用难度。

创建资源参数配置文件。为了与现网真实运营环境保持一致,我们创建了 2 台 CVM 云服务器、1 个 VPC、1 个子网、1 个路由表、1 个安全组、1 个云数据库 MySQL,分别创建了对应的配置文件为:cvm.tf、vpc.tf、subnet.tf、route_table.tf、security_group.tf、mysql.tf,文件的结构如下:

完整 tf 配置文件内容,请下载 tic-demo-config.zip

我对 tic-demo 做了些调整,但核心还是一样的,代码就不展示了

1
2
3
4
5
6
7
8
9
10
11
12
13
tic-demo
├── cvm.tf
├── graph.svg
├── main.tf
├── mysql.tf
├── provider.tf
├── route_table.tf
├── security_group.tf
├── subnet.tf
├── terraform.tfstate
├── terraform.tfstate.backup
├── variable.tf
└── vpc.tf

模板名称 描述
Create a CVM instance Create Cloud Virtual Machine (CVM), Virtual Private Cloud (VPC), Security Group (SG) and Cloud Block Storage (CBS).
Create a MySQL instance Create Cloud Database MySQL (TencentDB for MySQL), Security Group (SG).
Create a Redis instance Create Cloud Database Redis (TencentDB for Redis), Security Group (SG).
Create TKE Cluster Create Tencent Kubernetes Engine (TKE), Security Group (SG).
Create a MongoDB instance Create Cloud Database MongoDB (TencentDB for MongoDB), Security Group (SG).
Create Multiple CBS with CVM Create two Cloud Block Storage (CBS) disks, and bind the Cloud Block Storage to the Cloud Virtual Machine (CVM) instance.
Create Multiple CVM with CLB Create Cloud Cloud Load Balancer (CLB), Cloud Virtual Machine (CVM), Virtual Private Cloud (VPC), Security Group (SG), Cloud Block Storage (CBS), and bind two Cloud Virtual Machine instances at the ba
Create Multiple COS buckets Create two Cloud Object Storage (COS) buckets.

关于模版可以查看公共
https://console.cloud.tencent.com/tic/templates

terraform tencentcloud 腾讯云实践

terraform requirement: (region: sinagpore)

  1. VPC
  2. CVM * 2. CentOS7, 2c2g, 50G+200G disk, no public IP
  3. CVM * 1 same specs with public IP as jumpserver
  4. MYSQL * 1
  5. REDIS * 1
  6. LB * 1, for user access the website externally.
  7. Security GROUP, limited 443, 22,36000, open 80. allow all from internal.
  8. cos bucket * 1
  9. cam user * 1 with api key only, who could only access a sub-folder under the cos bucket in step 7.
  10. Output necessary info without login to console and check

在实践之前需要对腾讯云产品文档有一个清晰的认识

VPC 私有网络

私有网络(Virtual Private Cloud,VPC)是基于腾讯云构建的专属云上网络空间,为您在腾讯云上的资源提供网络服务,不同私有网络间完全逻辑隔离。您可以自定义网络环境、路由表、安全策略等;同时,私有网络支持多种方式连接 Internet、连接其他 VPC、连接您的本地数据中心,助力您轻松部署云上网络。

CVM 云服务器

云服务器(Cloud Virtual Machine,CVM)为您提供安全可靠的弹性计算服务。 只需几分钟,您就可以在云端获取和启用 CVM,用于实现您的计算需求。随着业务需求的变化,您可以实时扩展或缩减计算资源。CVM 支持按实际使用的资源计费,可以为您节约计算成本。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。

CLB 负载均衡

负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台云服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。

Security GROUP 安全组

安全组是一种虚拟防火墙,具备有状态的数据包过滤功能,用于设置云服务器、负载均衡、云数据库等实例的网络访问控制,控制实例级别的出入流量,是重要的网络安全隔离手段。
您可以通过配置安全组规则,允许或禁止安全组内的实例的出流量和入流量。

NAT 网关

NAT 网关(NAT Gateway)是一种支持 IP 地址转换服务,提供 SNAT 和 DNAT 能力,可为私有网络(VPC)内的资源提供安全、高性能的 Internet 访问服务。NAT 网关支持高达 99.99% 的高可用性、5Gbps 的带宽以及 1000 万以上的并发连接数。

COS 对象存储

对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。通过控制台、API、SDK 和工具等多样化方式,用户可简单、快速地接入 COS,进行多格式文件的上传、下载和管理,实现海量数据存储和管理。

云数据库 MySQL

腾讯云数据库 MySQL(TencentDB for MySQL)是一种稳定可靠、可弹性扩展和便于管理的关系型数据库服务。云数据库 MySQL 提供备份恢复、监控、容灾、快速扩容、数据传输等全套解决方案,为您简化数据库运维工作,使您能更加专注于业务发展。

云数据库 Redis

云数据库 Redis(TencentDB for Redis)是基于腾讯云在分布式缓存领域多年技术沉淀,提供的兼容 Redis 协议、高可用、高可靠、高弹性的数据库服务。云数据库 Redis 兼容 Redis 2.8、Redis 4.0、Redis 5.0 版本协议,提供标准和集群两大架构版本。最大支持 4TB 的存储容量,千万级的并发请求,满足业务在缓存、存储、计算等不同场景中的需求。

terraform tencentcloud 部署代码

代码示例和细节解释参考 TencentCloud Provider

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
entry_task
├── README.md
├── clb.tf
├── cos.tf
├── main.tf
├── mysql.tf
├── output.tf
├── provider.tf
├── redis.tf
├── terraform.tfstate
├── terraform.tfstate.backup
├── variables.tf
├── variables_cos.tf
├── variables_mysql.tf
└── variables_redis.tf

0 directories, 14 files

对方正在输入…

参考文章

腾讯云文档中心

巧用 Terraform 完成腾讯云上自动运维

Terraform – Practice on Tencent Cloud

腾讯云 Terraform 应用指南

通过 terraform 快速创建腾讯云基础资源

使用 Terraform 管理 COS

文章目录
  1. 1. 前言
  2. 2. 更新历史
  3. 3. TencentCloud Provider
    1. 3.1. 腾讯云创建用户
    2. 3.2. 配置 provider 环境变量
    3. 3.3. 查询公共资源
  4. 4. 腾讯云资源编排 TIC 实践
  5. 5. terraform tencentcloud 腾讯云实践
    1. 5.1. terraform tencentcloud 部署代码
  6. 6. 参考文章