Terraform

2019/10/14 Chenxin 整理

转自: https://cloud.tencent.com/developer/article/1469162

IaC与资源编排

IaC(Infrastructure as Code)这一理念随着云技术的普及以及多云时代的到来而被广泛接受和认可,特别是众多生态工具产品的涌现使得IaC由概念逐渐成为现实。

1.与传统的“ClickOps”管理模式相比,IaC主要可以在以下3方面优势:

提高资源部署的速度和效率

所有的云服务都可以通过代码的方式进行部署、维护和管理,极大地提高了规模部署下的生产效率;

配置的一致性

由于所有的云服务管理都是通过代码的方式实现,因此相关的软件方法论也可以类似的迁移到IaC使用中来,能够提高开发、测试、运维环境的配置一致性,降低人为失误;

节约成本

IaC的引入可以更加高效的应对多云管理,既可以降低Opex,也可以通过多云部署方案降低资源使用成本;

2.目前,常见的IaC工具主要分为两类:

一类是配置管理类,如Chef,Puppet等,该类产品主要优势在于底层的单服务器、单服务的配置管理;

一类是资源编排类,如Terraform、Pulumi等,该类产品主要优势在于更高层面的资源编排,根据资源描述文件创建具有相互依赖关系的云资源或服务并进行配置。

值得注意的是,在Terraform里资源的相互依赖关系并不需要被明确指出,Terraform会根据资源之间的互相引用情况自行判断依赖关系,并据此决定资源的先后创建顺序。

terraform简介

Terraform是由HashiCorp公司在2014年左右推出, 目前几乎所有的主流云服务商都支持Terraform,包括腾讯云、AWS、Azure和GCP等。

Terraform之所以为众多云用户和云服务商青睐,主要是基于:

1.完善的开源生态。只需要一个工具即可完成对多个云厂商的服务进行资源编排;

2.使用声明型语言HCL(HashiCorp Configuration Language)。使用户只关注与自己的需求,而非如何实现;

3.采用客户端单一架构(Client Only),而非CS(Client/Server)架构。降低数据安全风险,同时提高了infrastructure配置的可靠性;

目前大多数云平台的主流产品均已支持Terraform.

部署与安装

使用Terraform前,我们需要首先现下载客户端并配置工作环境。

客户端的安装可以选择本地PC,也可以使用云服务器(CVM),详细内容可以参考terraform官方说明。https://learn.hashicorp.com/terraform/getting-started/install

使用Terraform

下面我们通过一个简单地案例来了解Terraform在资源编排上的强大功能以及优势。

使用Terraform的Scripting、Plan、Apply和Destroy四个步骤即可轻松实现基础架构资源的全生命周期管理。

下面我们以腾讯云的CVM、MySQl、VPC和Security Group服务为例,搭建一个最简单的基础架构,相关Resources的说明参考Tencentcloud Provider。链接https://www.terraform.io/docs/providers/tencentcloud/index.html

1、Scripting 资源声明

使用HashiCorp自己的声明型语言HCL编写资源编排脚本。由于是声明型语言,我们熟悉的过程型语言的一些高级特性,比如“for”循环,HCL是不支持的。

#1、Provider info
provider "tencentcloud" {
secret_id = "AsVv2va1CE5ipdx4"
secret_key = "KQdafafrtJ"
region = "ap-shanghai"
} #2、Create a VPC resource
resource "tencentcloud_vpc" "main" {
name = "demo-VPC"
cidr_block = "10.0.0.0/16"
} #3、Create route tables for web and DB
resource "tencentcloud_route_table" "web" {
name = "demo-rt_web"
vpc_id = "${tencentcloud_vpc.main.id}"
}
resource "tencentcloud_route_table" "db" {
name = "demo-rt_db"
vpc_id = "${tencentcloud_vpc.main.id}"
} #4、CVM instances
resource "tencentcloud_instance" "nginx" {
instance_name = "demo-nginx"
availability_zone = "ap-shanghai-2"
image_id = "img-pi0ii46r"
instance_type = "S4.SMALL2" security_groups = [
"${tencentcloud_security_group.web.id}"
] vpc_id = "${tencentcloud_vpc.main.id}"
subnet_id = "${tencentcloud_subnet.web.id}"
internet_max_bandwidth_out = 10
count = 10
} #5、Mysql instance
resource "tencentcloud_mysql_instance" "demo-mysql" {
instance_name = "demo-mysql"
mem_size = 1000
root_password = "My_demo_mysql0001"
volume_size = 50 availability_zone = "ap-shanghai-2"
engine_version = "5.7"
internet_service = 0
intranet_port = 3306 parameters = {
max_connections = "1000"
} security_groups = [
"${tencentcloud_security_group.db.id}"
] vpc_id = "${tencentcloud_vpc.main.id}"
subnet_id = "${tencentcloud_subnet.db.id}" tags = {
name ="demo-project"
}
} #6、Create subnets within the VPC
resource "tencentcloud_subnet" "web" {
name = "demo-SN_web"
cidr_block = "10.0.1.0/24"
availability_zone = "ap-shanghai-2"
vpc_id = "${tencentcloud_vpc.main.id}"
route_table_id = "${tencentcloud_route_table.web.id}"
}
resource "tencentcloud_subnet" "db" {
name = "demo-SN_db"
cidr_block = "10.0.2.0/24"
availability_zone = "ap-shanghai-2"
vpc_id = "${tencentcloud_vpc.main.id}"
route_table_id = "${tencentcloud_route_table.db.id}"
} #7、Create security groups and rules
resource "tencentcloud_security_group" "web" {
name = "demo-sg_web"
description = "Accessible for both HTTP and SSH"
} resource "tencentcloud_security_group" "db" {
name = "demo-sg_db"
description = "Accessible for both mysql and SSH from web"
} resource "tencentcloud_security_group_rule" "web-from-public" {
security_group_id = "${tencentcloud_security_group.web.id}"
type = "ingress"
cidr_ip = "0.0.0.0/0"
ip_protocol = "tcp"
port_range = "80,22"
policy = "accept"
} resource "tencentcloud_security_group_rule" "web-to-public" {
security_group_id = "${tencentcloud_security_group.web.id}"
type = "egress"
ip_protocol = "tcp"
cidr_ip = "0.0.0.0/0"
port_range = "80,22"
policy = "accept"
} resource "tencentcloud_security_group_rule" "mysql-from-webtier" {
security_group_id = "${tencentcloud_security_group.db.id}"
type = "ingress"
cidr_ip = "10.0.1.0/24"
ip_protocol = "tcp"
port_range = "22,3306"
policy = "accept"
} resource "tencentcloud_security_group_rule" "mysql-to-webtier" {
security_group_id = "${tencentcloud_security_group.db.id}"
type = "egress"
cidr_ip = "0.0.0.0/0"
ip_protocol = "tcp"
port_range = "22,3306"
policy = "accept"
}

2、Plan 资源确认

Terraform Plan功能可以很好的支持Terraform脚本执行前的检查确认工作。Terraform基于脚本、本地状态文件(terraform.tfstate)和云平台三者的一致性来保证执行结果的准确性。

执行命令 terraform plan, 会自动检查.

3、Apply 部署

Terraform apply功能实现基础架构的一键部署。

注意,apply前Terraform还是会强制进行资源的确认工作,即Terraform Plan工作。

Terraform的执行结果会保存在本地状态文件(terraform.tfstate)中。

执行命令 terraform apply

4、Destroy 释放

通过以上简单地三个步骤即可实现复杂的资源部署工作,同样的,仅需要一个简单地命令即可实现资源的快速高效释放。

执行命令 terraform destroy

总结

通过上面的简单案例,我们可以快速的发现相比于传统的Infrastructure管理工作,IaC具有无可比拟的优势.

IaC云资源编排-Terraform的更多相关文章

  1. 开发函数计算的正确姿势 —— 使用 ROS 进行资源编排

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算 ...

  2. 云上自动化 vs 云上编排

    1 摘要 本文介绍了为什么在一个好的公有云或私有云中必须要有一个编排系统来支持云上自动化,以及实现这个编排系统的困难和各家的努力.同时提供了一套实现编排系统的原型,它包括了理论分析及主体插件框架,还给 ...

  3. 使用wget下载百度云资源

    目录 使用wget下载百度云资源 一.材料准备: 二.步骤 三.总结 使用wget下载百度云资源 一.材料准备: [BaiduPan explorer]谷歌插件,可以加载文件的真实下载地址 [Chro ...

  4. 云资源中的低成本战斗机——竞价实例,AWS、阿里云等六家云厂商完全用户使用指南

    云端资源价格 预留实例:长期持有,批发路线,价格最便宜. 按需实例:即买即用,零售路线,价格最贵. 这两种资源,基于不同区域/价格的六家云厂商价格对比,连同原始数据文档我们已经打包成了一份电子文档,有 ...

  5. 大型Kubernetes集群的资源编排优化

    背景 云原生这个词想必大家应该不陌生了,容器是云原生的重要基石,而Kubernetes经过这几年的快速迭代发展已经成为容器编排的事实标准了.越来越多的公司不论是大公司还是中小公司已经在他们的生产环境中 ...

  6. about云资源汇总指引V1.4:包括hadoop,openstack,nosql,虚拟化

    hadoop资料 云端云计算2G基础课程 (Hadoop简介.安装与范例) 炼数成金3G视频分享下载 虚拟机三种网络模式该如何上网指导此为视频 Hadoop传智播客七天hadoop(3800元)视频, ...

  7. 百度云资源下载加速软件推荐:proxyee-down

    百度云是个好东西(现在叫百度网盘不过我还是习惯叫百度云),2个T的免费容量可以存视频.软件包等各式文件,就是下载速度有点让人看不下去,不开会员的话就算你是百兆光纤还是量子通信都是被限速的,做为一个商业 ...

  8. Aria2 - OS X 下载百度云资源神器

    官网介绍: (Aria2 is a light weight multi-protocol & multi-source command-line download utility. It s ...

  9. 避免闲置云资源浪费 | 阿里云轻量级分布式应用服务 SAE 邀您公测

    您是否遇到过: 资源利用率低,多数服务器CPU平均利用率在10%以下,用户需为大量闲置资源买单. 感知 IaaS 购买和集群运维,人员技能要求高,运维效率低. 想拥抱 Kubernetes.微服务架构 ...

随机推荐

  1. monkey测试跑多个apk|monkey命令

    1.如何跑多个apk的monkey? 黑名单:执行除了黑名单中以外的apk: 白名单:只执行在白名单中的apk. 黑名单的设置方法: a.创建一个名称为blacklist的txt文档,在文件中输入应用 ...

  2. 林克的小本本之——HCL网络知识随笔

    单臂路由 单臂路由是一种通过在路由器的一个接口上配置逻辑接口,来实现不同Vlan之间互通的方法. 实例: #配置SW1的VLAN [SW1]vlan 2 #配置端口vlan略 [SW1]int g1/ ...

  3. Pikachu-XSS

    XSS(跨站脚本)概述 Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS.一般XSS可以分为如下几种常见类型: ...

  4. 集合系列 Map(十五):TreeMap

    TreeMap 是 Map 集合的有序实现,其底层是基于红黑树的实现,能够早 log(n) 时间内完成 get.put 和 remove 操作. public class TreeMap<K,V ...

  5. Kafka实战(七) - 优雅地部署 Kafka 集群

    既然是集群,必然有多个Kafka节点,只有单节点构成的Kafka伪集群只能用于日常测试,不可能满足线上生产需求. 真正的线上环境需要考量各种因素,结合自身的业务需求而制定.看一些考虑因素(以下顺序,可 ...

  6. Leetcode题解 - 树、DFS部分简单题目代码+思路(700、671、653、965、547、473、46)

    700. 二叉搜索树中的搜索 - 树 给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. 思路: 二 ...

  7. sleuth和zipkin微服务里的链路跟踪

    分布式链路跟踪介绍 对于一个微服务系统,大多数来自外部的请求都会经过数个服务的互相调用,得到返回的结果,一旦结果回复较慢或者返回了不可用,我们就需要确定是哪个微服务出了问题.于是就有了分布式系统调用跟 ...

  8. 推荐一款好看的Hexo主题Ayer

    介绍 Ayer 是一个干净且优雅的Hexo主题,自带响应式,加载速度很快,该有的功能都有,可配置项也很多,非常适合作为你的博客主题,主题内还附送了6张精美的高清壁纸.欢迎使用和Star支持,如果你在使 ...

  9. Git问题汇总

    1.fatal: refusing to merge unrelated histories $git pull origin master --allow-unrelated-histories 2 ...

  10. 12.2 中的Data Guard Standby 密码文件自动同步 (Doc ID 2307365.1)

    Data Guard Standby Automatic Password file Synchronization in 12.2 (Doc ID 2307365.1) APPLIES TO: Or ...