前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >通过terraform快速创建腾讯云基础资源

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

原创
作者头像
Vicwan
修改于 2020-04-09 03:57:55
修改于 2020-04-09 03:57:55
8.2K0
举报

一、什么是terraform

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

同时,Terraform是一个高度可扩展的工具,通过Provider来支持新的基础架构。用户可以使用Terraform来创建、修改、删除CVM、VPC、CDB、CLB等多种资源。

二、TIC产品简介

腾讯云TIC全称是Tencent Infrastructure as Code,通过与业界领先的开源技术集成,并支持HCL(Terraform)、JSON和YAML语法,来更好的进行云上资源编排、配置管理和符合性检查,另外为了简化用户使用,它还提供了许多遵循腾讯云最佳实践创建的terraform公共模板。

三、功能优势

1、将基础结构部署到多个云

Terraform适用于多云方案,将相类似的基础结构部署到腾讯云、其他云提供商或者本地数据中心。开发人员能够使用相同的工具和相似的配置文件同时管理不同云提供商的资源。

2、自动化管理基础结构

Terraform能够创建配置文件的模板,以可重复、可预测的方式定义和预配CVM资源,减少人为因素导致的部署和管理错误。能够多次部署同一模板,创建相同的开发、测试和生产环境。

3、基础架构即代码(Infrastructure as Code)

可以用代码来管理维护资源。允许保存基础设施状态,从而使用户能够跟踪对系统(基础设施即代码)中不同组件所做的更改,并与其他人共享这些配置。

4、降低开发成本

用户通过按需创建开发和部署环境来降低成本。并且,可以在系统更改之前进行评估。

四、需求和目标

基于一般用户在云上的部署规划需求,下面介绍如何通过TIC来快速创建腾讯云基础资源,并提供terraform代码模板示例。

五、场景说明

绝大部分用户在云上的网络规划,业务划分都基本一致,本文提供的terraform代码模板能够实现的场景如下:</br>

1、在同一个地域创建2个VPC,一个生产环境,一个QA环境,相互隔离</br>

2、生产环境VPC划分3个子网,分别是线上APP环境,数据库及中间件,大数据,QA环境VPC划分1个子网,为QA测试环境</br>

3、线上APP环境,数据库环境,大数据环境,QA测试环境,CLB分别设置相应的安全组策略</br>

4、线上环境创建2台CVM+1台mysql+1台redis+1个EIP+1个CLB实例,QA环境创建2台CVM+1台mysql+1台redis,实例命名以name+序号递增</br>

5、将公网CLB绑定应用环境其中一台CVM上,端口80</br>

6、将EIP绑定到其中一台CVM上,用于跳板机</br>

六、基于腾讯云TIC系统创建云上资源步骤

1、配置API KEY以授权TIC

Settings – API Credentials – New,新建一个授权,填写即将要购买资源的云账号对应的Secret ID与Secret Key

2、编写terraform代码

(1)选择“Templates”,并新建template

(2)根据需求编写terraform代码(在以下第四章节也会提供terraform代码模板)

3、执行terraform代码

(1)新建一个资源栈,选择目 标“Region”(注意region需要跟以下tf文件中availability_zone在同一个地域,比如region选shanghai,availability_zone配置为ap-shanghai-4),点选“Private templates”选择已经编写好的terraform代码

(2)确认代码后,点击Next 进入下一个步骤

(3)执行Plan

(4)执行apply

七、terraform代码模板说明

1、模板中tf文件说明

推荐按照不同的resource来划分单独的tf文件,这样便于阅读、以及后续修改

代码语言:txt
AI代码解释
复制
global_variables.tf             #全局变量,定义可用区、所属项目等
variables.tf                    #变量,定义所用到的变量
vpc.tf                          #定义vpc相关配置
subnet.tf                       #定义subnet相关配置
APP_cvm_security_group.tf       #定义生产环境cvm安全组策略
cvm_instance.tf                 #定义cvm相关配置
eip.tf                          #定义eip相关配置
eip_association.tf              #定义eip绑定到cvm相关配置
mysql_instance.tf               #定义mysql相关配置
clb_instance.tf                 #定义clb相关配置
clb_listener.tf                 #定义clb监听器相关配置
clb_attachment.tf               #定义clb绑定到cvm相关配置
redis_instance.tf               #定义redis相关配置
BIGDATA_cvm_security_group.tf   #定义大数据环境cvm安全组策略
QA_cvm_security_group.tf        #定义QA环境cvm安全组策略
APP_DB_security_group.tf        #定义生产环境DB安全组策略
QA_DB_security_group.tf         #定义QA环境DB安全组策略
clb_security_group.tf           #定义clb安全组策略

2、具体的terraform代码模板

global_variables.tf代码如下:

代码语言:txt
AI代码解释
复制
# 这里指定可用区为上海4区,用户可以根据需求修改
variable "availability_zone" {
  default = "ap-shanghai-4"
}
 variable "project_id" {
  default = 0
}

variables.tf代码如下:

代码语言:txt
AI代码解释
复制
/*APP VPC variables*/
# ---------------------------------------------------------------------------------------------------------------------
# REQUIRED PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
variable "vpc_name" { default = "shanghai_vpc_APP" } 
variable "vpc_cidr" { default = "10.178.0.0/16" }
# ---------------------------------------------------------------------------------------------------------------------
# OPTIONAL PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
variable "vpc_dns_servers" { default = ["119.29.29.29", "8.8.8.8"] } 
variable "vpc_is_multicast" { default = false }


/*QA VPC variables*/
# ---------------------------------------------------------------------------------------------------------------------
# REQUIRED PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
variable "QA_vpc_name" { default = "shanghai_vpc_QA" } 
variable "QA_vpc_cidr" { default = "10.179.0.0/16" }
# ---------------------------------------------------------------------------------------------------------------------
# OPTIONAL PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
variable "QA_vpc_dns_servers" { default = ["119.29.29.29", "8.8.8.8"] } 
variable "QA_vpc_is_multicast" { default = false }

/* subnet variables*/
# ---------------------------------------------------------------------------------------------------------------------
# REQUIRED PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
variable "subnet_cidr_1" {
  default = "10.178.10.0/24"
}
variable "subnet_name_1"  { default = "APP_subnet"} 

variable "subnet_cidr_2" {
  default = "10.178.40.0/24"
}
variable "subnet_name_2"  { default = "DB_subnet"} 

variable "subnet_cidr_3" {
  default = "10.178.100.0/24"
}
variable "subnet_name_3"  { default = "BIGDATA_subnet"} 

variable "subnet_cidr_4" {
  default = "10.179.10.0/24"
}
variable "subnet_name_4"  { default = "QA_subnet"} 
# ---------------------------------------------------------------------------------------------------------------------
# OPTIONAL PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "subnet_is_multicast" { default = true }
 

 /* APP cvm instance variables*/
# ---------------------------------------------------------------------------------------------------------------------
# OPTIONAL PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "APP_cvm_instance_name" {
  default = "myapp"
}
 variable "APP_cvm_instance_type" {
  default = "S5.SMALL2"
}
 variable "APP_cvm_system_disk_type" {
  default = "CLOUD_PREMIUM"
}
 variable "APP_cvm_system_disk_size" {
  default = 50
}
 variable "APP_cvm_hostname" {
  default = "myapp"
}
 variable "APP_cvm_data_disk_type" {
  default = "CLOUD_PREMIUM"
}
 variable "APP_cvm_data_disk_size" {
  default = 50
}
 variable "APP_cvm_password" {
  default = "password"
}
 variable "APP_cvm_count" {
  default = 2
}
variable "APP_cvm_instance_charge_type" {
  default = "POSTPAID_BY_HOUR"
}


 /* BIGDATA cvm instance variables*/
# ---------------------------------------------------------------------------------------------------------------------
# OPTIONAL PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "BIGDATA_cvm_instance_name" {
  default = "hadoop"
}
 variable "BIGDATA_cvm_instance_type" {
  default = "D2.2XLARGE32"
}
 variable "BIGDATA_cvm_system_disk_type" {
  default = "CLOUD_PREMIUM"
}
 variable "BIGDATA_cvm_system_disk_size" {
  default = 50
}
 variable "BIGDATA_cvm_hostname" {
  default = "hadoop"
}
# variable "BIGDATA_cvm_data_disk_type" {
#  default = "LOCAL_BASIC"
#}
# variable "BIGDATA_cvm_data_disk_size" {
#  default = 1176
#}
 variable "BIGDATA_cvm_password" {
  default = "password"
}
 variable "BIGDATA_cvm_count" {
  default = 2
}
variable "BIGDATA_cvm_instance_charge_type" {
  default = "POSTPAID_BY_HOUR"
}

 /* QA cvm instance variables*/
# ---------------------------------------------------------------------------------------------------------------------
# OPTIONAL PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "QA_cvm_instance_name" {
  default = "QA"
}
 variable "QA_cvm_instance_type" {
  default = "S5.SMALL2"
}
 variable "QA_cvm_system_disk_type" {
  default = "CLOUD_PREMIUM"
}
 variable "QA_cvm_system_disk_size" {
  default = 50
}
 variable "QA_cvm_hostname" {
  default = "QA"
}
 variable "QA_cvm_data_disk_type" {
  default = "CLOUD_PREMIUM"
}
 variable "QA_cvm_data_disk_size" {
  default = 50
}
 variable "QA_cvm_password" {
  default = "password"
}
 variable "QA_cvm_count" {
  default = 2
}
variable "QA_cvm_instance_charge_type" {
  default = "POSTPAID_BY_HOUR"
}

/* eip variables*/
# ---------------------------------------------------------------------------------------------------------------------
# OPTIONAL PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "eip_name" {
  default = "eip_1"
}
 variable "eip_internet_max_bandwidth_out" {
  default = 5
}
 variable "eip_internet_service_provider" {
  default = "BGP"
}
variable "eip_type" {
  default = "EIP"
}
variable "eip_internet_charge_type" {
  default = "TRAFFIC_POSTPAID_BY_HOUR"
}


/* APP mysql variables*/
# ---------------------------------------------------------------------------------------------------------------------
# REQUIRED PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "APP_mysql_instance_name" {
  default = "APP_mysql_1"
}
 variable "APP_mysql_mem_size" {
  default = "2000"
}
 variable "APP_mysql_root_password" {
  default = "password"
}
variable "APP_mysql_volume_size" {
  default = "25"
  }

# ---------------------------------------------------------------------------------------------------------------------
# OPTIONAL PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "APP_mysql_engine_version" {
  default = "5.7"
}
 variable "APP_mysql_intranet_port" {
  default = 3306
}


/* QA mysql variables*/
# ---------------------------------------------------------------------------------------------------------------------
# REQUIRED PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "QA_mysql_instance_name" {
  default = "QA_mysql_1"
}
 variable "QA_mysql_mem_size" {
  default = "2000"
}
 variable "QA_mysql_root_password" {
  default = "password"
}
variable "QA_mysql_volume_size" {
  default = "25"
  }

# ---------------------------------------------------------------------------------------------------------------------
# OPTIONAL PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "QA_mysql_engine_version" {
  default = "5.7"
}
 variable "QA_mysql_intranet_port" {
  default = 3306
}

/* clb variables*/
# ---------------------------------------------------------------------------------------------------------------------
# REQUIRED PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "clb_name" {
  default = "myclb"
}
 variable "clb_network_type" {
  default = "OPEN"
}

/* APP Redis variables*/
# ---------------------------------------------------------------------------------------------------------------------
# REQUIRED PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "APP_redis_mem_size" {
  default = 8192
}
 variable "APP_redis_password" {
  default = "password"
}

# ---------------------------------------------------------------------------------------------------------------------
# OPTIONAL PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "APP_redis_name" {
  default = "APP_redis_1"
}
 variable "APP_redis_type" {
  default = "master_slave_redis"
}
 variable "APP_redis_port" {
  default = 6379
}


/* QA Redis variables*/
# ---------------------------------------------------------------------------------------------------------------------
# REQUIRED PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "QA_redis_mem_size" {
  default = 8192
}
 variable "QA_redis_password" {
  default = "password"
}

# ---------------------------------------------------------------------------------------------------------------------
# OPTIONAL PARAMETERS
# ---------------------------------------------------------------------------------------------------------------------
 variable "QA_redis_name" {
  default = "QA_redis_1"
}
 variable "QA_redis_type" {
  default = "master_slave_redis"
}
 variable "QA_redis_port" {
  default = 6379
}

vpc.tf代码如下:

代码语言:txt
AI代码解释
复制
# Create  a VPC resource for app
resource "tencentcloud_vpc" "my_vpc" {
  name         = var.vpc_name
  cidr_block   = var.vpc_cidr
  dns_servers  = var.vpc_dns_servers
  is_multicast = var.vpc_is_multicast
}

# Create  a VPC resource for QA
resource "tencentcloud_vpc" "QA_vpc" {
  name         = var.QA_vpc_name
  cidr_block   = var.QA_vpc_cidr
  dns_servers  = var.QA_vpc_dns_servers
  is_multicast = var.QA_vpc_is_multicast
}

subnet.tf代码如下:

代码语言:txt
AI代码解释
复制
# Create 4 subnet resource for live app,DB,BIGDATA,and QA environment
resource "tencentcloud_subnet" "APP_subnet" {
  availability_zone = var.availability_zone
  cidr_block = var.subnet_cidr_1
  name = var.subnet_name_1
  vpc_id = tencentcloud_vpc.my_vpc.id
}

resource "tencentcloud_subnet" "DB_subnet" {
  availability_zone = var.availability_zone
  cidr_block = var.subnet_cidr_2
  name = var.subnet_name_2
  vpc_id = tencentcloud_vpc.my_vpc.id
}

resource "tencentcloud_subnet" "BIGDATA_subnet" {
  availability_zone = var.availability_zone
  cidr_block = var.subnet_cidr_3
  name = var.subnet_name_3
  vpc_id = tencentcloud_vpc.my_vpc.id
}

resource "tencentcloud_subnet" "QA_subnet" {
  availability_zone = var.availability_zone
  cidr_block = var.subnet_cidr_4
  name = var.subnet_name_4
  vpc_id = tencentcloud_vpc.QA_vpc.id
}

APP_cvm_security_group.tf代码如下:

代码语言:txt
AI代码解释
复制
# Create security group with 3 rules for APP cvm instance
resource "tencentcloud_security_group" "APP_cvm_rules" {
  name        = "web accessibility"
  description = "make it accessible"
}

resource "tencentcloud_security_group_rule" "APP_web" {
  security_group_id = tencentcloud_security_group.APP_cvm_rules.id
  type              = "ingress"
  cidr_ip           = "0.0.0.0/0"
  ip_protocol       = "tcp"
  port_range        = "80,8080"
  policy            = "accept"
}

resource "tencentcloud_security_group_rule" "APP_ssh" {
  security_group_id = tencentcloud_security_group.APP_cvm_rules.id
  type              = "ingress"
  cidr_ip           = "0.0.0.0/0"
  ip_protocol       = "tcp"
  port_range        = "22"
  policy            = "accept"
}

resource "tencentcloud_security_group_rule" "APP_icmp" {
  security_group_id = tencentcloud_security_group.APP_cvm_rules.id
  type              = "ingress"
  cidr_ip           = "0.0.0.0/0"
  ip_protocol       = "icmp"
  policy            = "accept"
}

cvm_instance.tf代码如下:

代码语言:txt
AI代码解释
复制
# Use this data source to query images
data "tencentcloud_images" "my_favorite_image" {
  image_type = ["PUBLIC_IMAGE"]
  os_name    = "centos 7.5"
}

# Create APP CVMs instance 
resource "tencentcloud_instance" "APP_cvm_instance" {
  instance_name              = join("-", [var.APP_cvm_instance_name, count.index])
  availability_zone          = var.availability_zone
  image_id                   = data.tencentcloud_images.my_favorite_image.images.0.image_id
  instance_type              = var.APP_cvm_instance_type
  system_disk_type           = var.APP_cvm_system_disk_type
  system_disk_size           = var.APP_cvm_system_disk_size
  hostname                   = join("-", [var.APP_cvm_hostname, count.index])
  project_id                 = var.project_id
  vpc_id                     = tencentcloud_vpc.my_vpc.id
  subnet_id                  = tencentcloud_subnet.APP_subnet.id
  security_groups            = [tencentcloud_security_group.APP_cvm_rules.id]
  password                   = var.APP_cvm_password
  count                      = var.APP_cvm_count
  instance_charge_type       = var.APP_cvm_instance_charge_type

  data_disks {
    data_disk_type = var.APP_cvm_data_disk_type
    data_disk_size = var.APP_cvm_data_disk_size
  }
}


# Create BIGDATA CVMs instance 
resource "tencentcloud_instance" "BIGDATA_cvm_instance" {
  instance_name              = join("-", [var.BIGDATA_cvm_instance_name, count.index])
  availability_zone          = var.availability_zone
  image_id                   = data.tencentcloud_images.my_favorite_image.images.0.image_id
  instance_type              = var.BIGDATA_cvm_instance_type
  system_disk_type           = var.BIGDATA_cvm_system_disk_type
  system_disk_size           = var.BIGDATA_cvm_system_disk_size
  hostname                   = join("-", [var.BIGDATA_cvm_hostname, count.index])
  project_id                 = var.project_id
  vpc_id                     = tencentcloud_vpc.my_vpc.id
  subnet_id                  = tencentcloud_subnet.BIGDATA_subnet.id
  security_groups            = [tencentcloud_security_group.BIGDATA_cvm_rules.id]
  password                   = var.BIGDATA_cvm_password
  count                      = var.BIGDATA_cvm_count
  instance_charge_type       = var.BIGDATA_cvm_instance_charge_type

#  data_disks {
#    data_disk_type = var.BIGDATA_cvm_data_disk_type
#    data_disk_size = var.BIGDATA_cvm_data_disk_size
#  }
}


# Create QA CVMs instance 
resource "tencentcloud_instance" "QA_cvm_instance" {
  instance_name              = join("-", [var.QA_cvm_instance_name, count.index])
  availability_zone          = var.availability_zone
  image_id                   = data.tencentcloud_images.my_favorite_image.images.0.image_id
  instance_type              = var.QA_cvm_instance_type
  system_disk_type           = var.QA_cvm_system_disk_type
  system_disk_size           = var.QA_cvm_system_disk_size
  hostname                   = join("-", [var.QA_cvm_hostname, count.index])
  project_id                 = var.project_id
  vpc_id                     = tencentcloud_vpc.QA_vpc.id
  subnet_id                  = tencentcloud_subnet.QA_subnet.id
  security_groups            = [tencentcloud_security_group.QA_cvm_rules.id]
  password                   = var.QA_cvm_password
  count                      = var.QA_cvm_count
  instance_charge_type       = var.QA_cvm_instance_charge_type

  data_disks {
    data_disk_type = var.QA_cvm_data_disk_type
    data_disk_size = var.QA_cvm_data_disk_size
  }
}

eip.tf代码如下:

代码语言:txt
AI代码解释
复制
# Create an EIP resource
resource "tencentcloud_eip" "my_eip" {
  name                       = var.eip_name
  internet_max_bandwidth_out = var.eip_internet_max_bandwidth_out
  internet_service_provider  = var.eip_internet_service_provider
  type                       = var.eip_type
  internet_charge_type       = var.eip_internet_charge_type
}

eip_association.tf代码如下:

代码语言:txt
AI代码解释
复制
# Provides an eip resource associated with  CVM
resource "tencentcloud_eip_association" "my_eip_association" {
  eip_id      = tencentcloud_eip.my_eip.id
  instance_id = tencentcloud_instance.APP_cvm_instance.0.id
}

mysql_instance.tf代码如下:

代码语言:txt
AI代码解释
复制
# Create mysql_instance resource for APP 
resource tencentcloud_mysql_instance "APP_mysql_instance" {
  engine_version    = var.APP_mysql_engine_version
  availability_zone = var.availability_zone
  instance_name     = var.APP_mysql_instance_name
  mem_size          = var.APP_mysql_mem_size
  root_password     = var.APP_mysql_root_password
  subnet_id         = tencentcloud_subnet.DB_subnet.id
  volume_size       = var.APP_mysql_volume_size
  vpc_id            = tencentcloud_vpc.my_vpc.id
  intranet_port     = var.APP_mysql_intranet_port
  project_id        = var.project_id
  security_groups   = [tencentcloud_security_group.APP_DB_rules.id]
}


# Create  mysql_instance resource for QA
resource tencentcloud_mysql_instance "QA_mysql_instance" {
  engine_version    = var.QA_mysql_engine_version
  availability_zone = var.availability_zone
  instance_name     = var.QA_mysql_instance_name
  mem_size          = var.QA_mysql_mem_size
  root_password     = var.QA_mysql_root_password
  subnet_id         = tencentcloud_subnet.QA_subnet.id
  volume_size       = var.QA_mysql_volume_size
  vpc_id            = tencentcloud_vpc.QA_vpc.id
  intranet_port     = var.QA_mysql_intranet_port
  project_id        = var.project_id
  security_groups   = [tencentcloud_security_group.QA_DB_rules.id]
}

clb_instance.tf代码如下:

代码语言:txt
AI代码解释
复制
# create an OPEN CLB resource
resource tencentcloud_clb_instance "open_clb_instance" {
  clb_name        = var.clb_name
  network_type    = var.clb_network_type
  vpc_id          = tencentcloud_vpc.my_vpc.id
  project_id      = var.project_id
  security_groups = [tencentcloud_security_group.CLB_rules.id]
}

clb_listener.tf代码如下:

代码语言:txt
AI代码解释
复制
# create a TCP Listener
resource "tencentcloud_clb_listener" "TCP_listener" {
  clb_id                     = tencentcloud_clb_instance.open_clb_instance.id
  listener_name              = "appweb_listener"
  port                       = 80
  protocol                   = "TCP"
  health_check_switch        = true
  health_check_time_out      = 2
  health_check_interval_time = 5
  health_check_health_num    = 3
  health_check_unhealth_num  = 3
  session_expire_time        = 30
  scheduler                  = "WRR"
}

clb_attachment.tf代码如下:

代码语言:txt
AI代码解释
复制
# Provides a resource to a CLB attachment
resource "tencentcloud_clb_attachment" "foo" {
  clb_id      = tencentcloud_clb_instance.open_clb_instance.id
  listener_id = tencentcloud_clb_listener.TCP_listener.id

  targets {
    instance_id = tencentcloud_instance.APP_cvm_instance.1.id
    port        = 80
    weight      = 10
  }
}

redis_instance.tf代码如下:

代码语言:txt
AI代码解释
复制
# Create Redis instance for APP 
resource "tencentcloud_redis_instance" "APP_redis_instance" {
  availability_zone = var.availability_zone
  type              = var.APP_redis_type
  password          = var.APP_redis_password
  mem_size          = var.APP_redis_mem_size
  name              = var.APP_redis_name
  port              = var.APP_redis_port
  subnet_id         = tencentcloud_subnet.DB_subnet.id
  vpc_id            = tencentcloud_vpc.my_vpc.id
  project_id        = var.project_id
  security_groups   = [tencentcloud_security_group.APP_DB_rules.id]
}


# Create  Redis instance for QA 
resource "tencentcloud_redis_instance" "QA_redis_instance" {
  availability_zone = var.availability_zone
  type              = var.QA_redis_type
  password          = var.QA_redis_password
  mem_size          = var.QA_redis_mem_size
  name              = var.QA_redis_name
  port              = var.QA_redis_port
  subnet_id         = tencentcloud_subnet.QA_subnet.id
  vpc_id            = tencentcloud_vpc.QA_vpc.id
  project_id        = var.project_id
  security_groups   = [tencentcloud_security_group.QA_DB_rules.id]
}

BIGDATA_cvm_security_group.tf代码如下:

代码语言:txt
AI代码解释
复制
# Create security group with 2 rules for BIGDATA cvm instance
resource "tencentcloud_security_group" "BIGDATA_cvm_rules" {
  name        = "BIGDATA accessibility"
  description = "make it accessible"
}


resource "tencentcloud_security_group_rule" "BIGDATA_ssh" {
  security_group_id = tencentcloud_security_group.BIGDATA_cvm_rules.id
  type              = "ingress"
  cidr_ip           = "10.178.0.0/16"
  ip_protocol       = "tcp"
  port_range        = "22"
  policy            = "accept"
}

resource "tencentcloud_security_group_rule" "BIGDATA_icmp" {
  security_group_id = tencentcloud_security_group.BIGDATA_cvm_rules.id
  type              = "ingress"
  cidr_ip           = "0.0.0.0/0"
  ip_protocol       = "icmp"
  policy            = "accept"
}

QA_cvm_security_group.tf代码如下:

代码语言:txt
AI代码解释
复制
# Create security group with 2 rules for QA cvm instance
resource "tencentcloud_security_group" "QA_cvm_rules" {
  name        = "QA accessibility"
  description = "make it accessible"
}


resource "tencentcloud_security_group_rule" "QA_ssh" {
  security_group_id = tencentcloud_security_group.QA_cvm_rules.id
  type              = "ingress"
  cidr_ip           = "0.0.0.0/0"
  ip_protocol       = "tcp"
  port_range        = "22"
  policy            = "accept"
}

resource "tencentcloud_security_group_rule" "QA_icmp" {
  security_group_id = tencentcloud_security_group.QA_cvm_rules.id
  type              = "ingress"
  cidr_ip           = "0.0.0.0/0"
  ip_protocol       = "icmp"
  policy            = "accept"
}

APP_DB_security_group.tf代码如下:

代码语言:txt
AI代码解释
复制
# Create security group with 2 rules for APP DB 
resource "tencentcloud_security_group" "APP_DB_rules" {
  name        = "APP DB accessibility"
  description = "make it accessible"
}


resource "tencentcloud_security_group_rule" "APP_mysql" {
  security_group_id = tencentcloud_security_group.APP_DB_rules.id
  type              = "ingress"
  cidr_ip           = "10.178.0.0/16"
  ip_protocol       = "tcp"
  port_range        = "3306"
  policy            = "accept"
}

resource "tencentcloud_security_group_rule" "APP_redis" {
  security_group_id = tencentcloud_security_group.APP_DB_rules.id
  type              = "ingress"
  cidr_ip           = "10.178.0.0/16"
  ip_protocol       = "tcp"
  port_range        = "6379"
  policy            = "accept"
}

QA_DB_security_group.tf代码如下:

代码语言:txt
AI代码解释
复制
# Create security group with 2 rules for QA DB 
resource "tencentcloud_security_group" "QA_DB_rules" {
  name        = "QA DB accessibility"
  description = "make it accessible"
}


resource "tencentcloud_security_group_rule" "QA_mysql" {
  security_group_id = tencentcloud_security_group.QA_DB_rules.id
  type              = "ingress"
  cidr_ip           = "10.179.0.0/16"
  ip_protocol       = "tcp"
  port_range        = "3306"
  policy            = "accept"
}

resource "tencentcloud_security_group_rule" "QA_redis" {
  security_group_id = tencentcloud_security_group.QA_DB_rules.id
  type              = "ingress"
  cidr_ip           = "10.179.0.0/16"
  ip_protocol       = "tcp"
  port_range        = "6379"
  policy            = "accept"
}

clb_security_group.tf代码如下:

代码语言:txt
AI代码解释
复制
# Create security group  for CLB
resource "tencentcloud_security_group" "CLB_rules" {
  name        = "CLB accessibility"
  description = "make it accessible"
}


resource "tencentcloud_security_group_rule" "CLB_web" {
  security_group_id = tencentcloud_security_group.CLB_rules.id
  type              = "ingress"
  cidr_ip           = "0.0.0.0/0"
  ip_protocol       = "tcp"
  port_range        = "80,8080"
  policy            = "accept"
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
国内首家!腾讯云正式成为 FinOps 基金会顶级会员
11月24日,腾讯云正式宣布加入FinOps基金会,作为国内首家FinOps基金会顶级会员,腾讯云将联合FinOps基金会,全面推进对FinOps标准和最佳实践的贡献,为企业提供云财务管理的最佳解决方案。
腾讯云原生
2021/11/24
1.3K1
腾讯推出国内首个云原生成本优化开源项目 Crane
一 云资源管理现状 设想你是一个应用开发人员,编写业务代码是你的主业,应用需要多少资源,往往通过压测决定,这导致非业务高峰期时段巨大的资源浪费。正好,社区和公司都在积极推动云原生,声称可以利用其强大的调度和弹性解决资源浪费问题。你兴致勃勃的拥抱云原生,但最终发现,云原生业务的资源配置,同样还是需要压测这种传统而手工的方式。 又比如你是一个平台侧运维人员,你背负着提升平台资源利用率的 KPI。集群内运行着众多负载规律波动的应用,你惊喜的发现,Kubernetes 提供了自动扩容能力,你很想试试看。但真正使用
腾源会
2022/03/24
1.4K0
年终大禧 | 腾讯云 Crane 国内首批通过云原生混部技术评估
2023 年 1 月 9 日云原生产业联盟(CNIA)举办 2022 年度线上年会,中国信通院云大所云计算发布了云原生系列测评成果,腾讯云主导开源的云原生成本优化项目 Crane 首批通过“云原生混部”项目评估。 Crane 是国内第一个基于云原生技术的成本优化开源项目,遵循 FinOps 标准,旨在为云原生用户提供云成本优化一站式解决方案。 技术方面,Crane 基于两级调度能力,实现高优先级延迟敏感业务和低优先级高吞吐业务在相同节点上的混合运行。 一级调度能力,确保应用的高效调度,实现真正的“用多少占多
腾讯云原生
2023/01/30
1.3K0
年终大禧 | 腾讯云 Crane 国内首批通过云原生混部技术评估
在线业务极致伸缩、CPU 利用率达 60%,涂鸦的云原生资源优化实践
在容器化的基础上,我们已经通过一些手段,比如监控分析、弹性伸缩等降低了 k8s 集群的成本,取得了一定的成效。
深度学习与Python
2024/01/11
4461
在线业务极致伸缩、CPU 利用率达 60%,涂鸦的云原生资源优化实践
【腾讯云Finops Crane集训营】降本增效神器Crane实战记录
这段时间有幸参与了一下腾讯Finops Crane集训营的Crane公开体验训练营。
程序员洲洲
2024/06/07
2700
【腾讯云Finops Crane集训营】降本增效神器Crane实战记录
Crane 发布国内首个云原生应用碳排放计算优化器
孟凡杰,腾讯云容器技术专家,FinOps产品研发负责人。 为了共同应对气候变化挑战,减缓全球变暖趋势,2015 年 12 月,近 200 个缔约方共同通过了《巴黎协定》(The Paris Agreement),对 2020 年后全球如何应对气候变化做出了行动安排。为实现这一目标,全球多个国家宣布要实现碳中和。 全球气候行动峰会发布的《指数气候行动路线图》显示,数字科技在能源、制造业、农业、建筑、交通等领域的解决方案,可以帮助全球减少 15% 的碳排放,是实现碳减排的关键技术因素。云计算平台是数据中心基础设
腾讯云原生
2022/12/15
2.2K1
Crane 发布国内首个云原生应用碳排放计算优化器
成本最高降低70%,腾讯大规模业务集群的云原生成本优化实践!
唐聪,腾讯云容器技术专家,极客时间专栏《etcd实战课》作者,开源项目kstone和crane内部雏形版 founder,etcd活跃贡献者,主要负责腾讯云大规模k8s和etcd平台稳定性和性能优化、业务集群成本优化、有状态服务容器化等产品研发设计工作。 背景 2021年下半年以来,在新冠疫情和互联网政策的冲击之下,各大互联网公司都在进行降本增效。降本增效的一大核心手段就是优化计算资源成本,本文将以腾讯某内部 Kubernetes/TKE 业务为案例,详细阐述如何从 0到1(成本数据采集与分析、优化措施、行
腾讯云原生
2022/07/01
3K0
成本最高降低70%,腾讯大规模业务集群的云原生成本优化实践!
无处不在的离线算力-Crane 基于 Virtual Kubelet 的实践
陈凯悦,腾讯云高级开发工程师,Crane和SuperEdge项目核心开发。专注于大规模离在线混部和资源调度,目前负责Crane离在线混部和调度相关工作。 孟凡杰,腾讯云容器专家工程师,Crane项目发起人,致力于云原生成本优化,腾讯云降本产品研发负责人。 背景 用户使用云时,为不同特征的业务完成精确的资源配置不是一件容易的事情。FinOps 时代如何玩转应用资源配置 提供了诸多最佳实践。我们再来借助下图的单节点资源使用情况探讨一下资源合理利用的挑战,为简化问题,我们只关注核心资源 CPU。 假设该节点总计
腾讯云原生
2023/05/04
9990
无处不在的离线算力-Crane 基于 Virtual Kubelet 的实践
【愚公系列】深入探索《2023腾讯云容器和函数计算技术实践精选集》:案例解析与实用建议
在当今快速演进的技术景观中,云原生架构已经成为推动企业创新和敏捷性的主要力量。核心技术如Docker容器、Serverless计算、微服务架构,不仅重塑了软件开发和部署的方式,而且也重新定义了如何构建、运行和维护现代应用程序。这篇文章以《2023腾讯云容器和函数计算技术实践精选集》为例深入探讨这些技术如何协同工作,以及它们如何共同构成了一个强大、灵活且可扩展的云原生生态系统。
愚公搬代码
2024/04/01
2110
全球首家!Crane成FinOps首个认证降本增效开源方案
喜讯 刚刚,腾讯云开源项目Crane (Cloud Resource Analytics and Economics)正式成为 FinOps 认证解决方案(FinOps Certified Solutions)。作为全球范围内首个开源的 FinOps 认证解决方案,Crane 能够助力云原生用户充分发挥云上资源的最大价值,帮助企业降本增效。 为推进云原生用户在确保业务稳定性的基础上做到真正的极致降本,腾讯云率先在国内推出了第一个基于云原生技术的成本优化开源项目 Crane。Crane 遵循 FinOps
腾讯云原生
2022/11/29
1.6K0
全球首家!Crane成FinOps首个认证降本增效开源方案
【腾讯云 Finops Crane 集训营】安装使用及EHPA弹性演示
随着时间的推移,降本增效成为了企业界和组织中的一个新口号。在2023年,这个口号进一步获得了广泛的认可和重要性,成为了许多组织在业务运营中的关键目标。在2023年,许多组织开始将降本增效作为战略性目标,并将其融入到整个组织的文化和运营流程中。这需要组织内部的各个部门和团队共同努力,从高层管理层到基层员工,都需要意识到降本增效的重要性,并为之努力。 降本增效的方法多种多样,其中一个关键领域是技术和数字化转型。组织通过采用新技术、数字化工具和自动化流程来改进业务流程和运营效率。例如,采用先进的数据分析和人工智能技术,组织可以更好地理解和优化成本结构,找到潜在的成本节约机会。同时,云计算和容器化技术如Kubernetes等的应用,也为降本增效提供了新的机会,通过资源优化和自动化管理来降低成本并提高效率。 那么今天就为大家介绍Crane
指剑
2023/05/31
5740
【腾讯云 Finops Crane 集训营】安装使用及EHPA弹性演示
Crane如何做到利用率提升3倍稳定性还不受损?
陈凯悦,腾讯云高级开发工程师,Crane和SuperEdge项目核心开发。专注于大规模离在线混部和资源调度,目前负责Crane离在线混部和调度相关工作。 颜卫,腾讯高级开发工程师,Crane项目核心开发。专注于Kubernetes大规模集群管理和成本优化,丰富的超大规模集群管理和混部经验。目前负责Crane离在线混部和资源优化相关工作。 作为云平台用户,我们都希望购买的服务器物尽其用,能够达到最大利用率。然而要达到理论上的节点负载目标是很难的,计算节点总是存在一些装箱碎片和低负载导致的闲置资源。下图展示了
腾讯云原生
2022/12/08
1.1K0
Crane如何做到利用率提升3倍稳定性还不受损?
【腾讯云 FinOps Crane 集训营】Crane平台介绍与实践
Crane是一个开源的容器编排工具 ,Crane提供了一种简单而灵活的方式来管理容器应用程序的生命周期,包括构建、部署、运行和维护。它支持多个容器编排引擎,如Docker Compose、Kubernetes和Mesos等。
知识浅谈
2023/05/10
1K0
【腾讯云 FinOps Crane 集训营】Crane平台介绍与实践
腾讯云原生成本优化平台FinOps Crane荣获国家级大奖!
8月2日,云计算中心科技奖办公室公布2022“云计算中心科技奖”获奖名单,腾讯云原生成本优化平台FinOps Crane荣获“云计算中心科技奖卓越奖”,这也是国内首个云原生工具获得此殊荣奖项!
腾讯云原生
2022/08/08
1.2K0
腾讯云原生成本优化平台FinOps Crane荣获国家级大奖!
赢麻了!Crane 摘得「年度开源影响力项目奖」!
在 CSDN 2022 IT 技术影响力年度榜单评选中,FinOps Crane 荣获「2022 中国开发者影响力榜单  年度开源影响力项目」! “CSDN 2022 IT 技术影响力年度榜单”, 由 CSDN 、《新程序员》主办,面向企业、产品、个人评选出产业奖项、合作伙伴奖项和 CSDN 社区奖项等。 为推进云原生用户在确保业务稳定性的基础上做到真正的极致降本,腾讯云推出了国内首个基于云原生技术的成本优化开源项目——Crane(Cloud Resource Analytics and Economic
腾讯云原生
2023/01/30
4900
赢麻了!Crane 摘得「年度开源影响力项目奖」!
【喜报】Crane 获得“数博会领先科技成果优秀项目奖”
5月26号,以“数实相融 算启未来”为主题的2023中国国际大数据产业博览会在贵阳举行,会上发布了面向全球广泛征集的数博会领先科技成果奖以及优秀项目奖。
腾讯云原生
2023/06/09
3791
【喜报】Crane 获得“数博会领先科技成果优秀项目奖”
【腾讯云 Finops Crane集训营】Finops Crane究竟能为我们带来什么价值和思考?深入探究Crane
最近报名参加了腾讯大型开源项目Finops Crane的集训营,深入了解并实践运用了关于Crane的一系列功能。云计算以及云平台是未来服务部署的主流趋势,可以在成本条件限制下极大节省运行部署成本。因此关于云计算平台的一系列计算我都十分感兴趣,而Crane能够在云原生发展火热的状态下作为大型开源项目,提供学习渠道以及实践,是一件十分有意义的事情。本篇文章将带大家了解Crane以及了解Crane能够帮助我们在哪些业务场景下解决困难,以及我们该如何使用Crane和部署服务。
fanstuck
2025/01/21
2550
【腾讯云 Finops Crane集训营】Finops Crane究竟能为我们带来什么价值和思考?深入探究Crane
【腾讯云 findops Crane集训营】深入了解 Crane 开源项目之实验操作指南
随着云原生技术的发展,越来越多的公司正在选择将应用运行在云上或者自建的 Kubernetes 集群上,但是许多机构的调研发现,绝大多数的用户集群资源利用率并不高,浪费严重。本次训练营将会演示如何快速搭建一个 Kubernetes+Crane 环境,以及如何基于 Crane 优化你的集群和应用。
用户10216580
2023/10/16
3250
【腾讯云 findops Crane集训营】深入了解 Crane 开源项目之实验操作指南
腾讯云Crane成FinOps全球首个认证降本增效开源方案
作者 | Tina 刚刚,腾讯云开源项目 Crane(Cloud Resource Analytics and Economics) 正式成为 FinOps 认证解决方案(FinOps Certified Solutions)。作为全球范围内首个开源的 FinOps 认证解决方案,Crane 能够助力云原生用户充分发挥云上资源的最大价值,帮助企业降本增效。 据了解,为推进云原生用户在确保业务稳定性的基础上做到真正的极致降本,腾讯云率先在国内推出了第一个基于云原生技术的成本优化开源项目 Crane。Cra
深度学习与Python
2023/03/29
7930
腾讯云Crane成FinOps全球首个认证降本增效开源方案
【腾讯云 Finops Crane 集训营】深入了解 Crane 开源项目,集训营实验操作指南,体验过程总结
最近有幸参与了腾讯云举办的Finops Crane的集训营。在这个过程中,老师认真指导,让我受益非浅,也让我真正理解了这一产品所带来的意义。
拿我格子衫来
2023/08/24
5820
【腾讯云 Finops Crane 集训营】深入了解 Crane 开源项目,集训营实验操作指南,体验过程总结
推荐阅读
国内首家!腾讯云正式成为 FinOps 基金会顶级会员
1.3K1
腾讯推出国内首个云原生成本优化开源项目 Crane
1.4K0
年终大禧 | 腾讯云 Crane 国内首批通过云原生混部技术评估
1.3K0
在线业务极致伸缩、CPU 利用率达 60%,涂鸦的云原生资源优化实践
4461
【腾讯云Finops Crane集训营】降本增效神器Crane实战记录
2700
Crane 发布国内首个云原生应用碳排放计算优化器
2.2K1
成本最高降低70%,腾讯大规模业务集群的云原生成本优化实践!
3K0
无处不在的离线算力-Crane 基于 Virtual Kubelet 的实践
9990
【愚公系列】深入探索《2023腾讯云容器和函数计算技术实践精选集》:案例解析与实用建议
2110
全球首家!Crane成FinOps首个认证降本增效开源方案
1.6K0
【腾讯云 Finops Crane 集训营】安装使用及EHPA弹性演示
5740
Crane如何做到利用率提升3倍稳定性还不受损?
1.1K0
【腾讯云 FinOps Crane 集训营】Crane平台介绍与实践
1K0
腾讯云原生成本优化平台FinOps Crane荣获国家级大奖!
1.2K0
赢麻了!Crane 摘得「年度开源影响力项目奖」!
4900
【喜报】Crane 获得“数博会领先科技成果优秀项目奖”
3791
【腾讯云 Finops Crane集训营】Finops Crane究竟能为我们带来什么价值和思考?深入探究Crane
2550
【腾讯云 findops Crane集训营】深入了解 Crane 开源项目之实验操作指南
3250
腾讯云Crane成FinOps全球首个认证降本增效开源方案
7930
【腾讯云 Finops Crane 集训营】深入了解 Crane 开源项目,集训营实验操作指南,体验过程总结
5820
相关推荐
国内首家!腾讯云正式成为 FinOps 基金会顶级会员
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档