IaC云资源编排-Terraform

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具有无可比拟的优势.

原文地址:https://www.cnblogs.com/chanix/p/11672011.html

时间: 2024-08-30 10:24:01

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

服务器太多了不好管?UCloud基于Terraform的资源编排工具详解

背景 随着用户在 UCloud 上资源用量的指数增长,传统 API/SDK 手动编写脚本的资源管理方式已经无法满足其需要.为此,UCloud 研发团队基于 Terraform 编写了一套自己的资源编排工具,帮助用户降低云上资源的管理成本,为其提供安全可靠.高度一致的产品使用体验,尽可能消除迁移上云时的风险. Terraform 代表了业界前沿的技术和标准,我们基于此,并配合 UCloud CLI 等工具,编写了新一代 UCloud 资源编排工具,进一步拓展 Terraform 的功能,实现基础设

技术培训 | 资源编排,人人都可以成为架构师

今天和大家分享的话题是如何利用青云资源编排服务快速创建批量资源组合.规划和构建系统,同时谈谈资源编排如何帮助我们复制一整套IT环境,以及如何实现跨区做相同架构资源的拷贝. 资源编排到底是什么呢? 大家知道云服务本质上是做 IT 架构软件化和 IT 平台智能化的工作. 传统方式我们构建一个系统,不管是做医疗.教育还是金融.媒体等等,最上层需要部署自身的业务代码: 中间层是业务依赖的专业软件.平台中间件.服务组件等: 下层是部署的硬件系统,包括计算节点.存储资源.网络,然后安装操作系统等等. 中下两

如何实现云上编排系统

随着云计算的普及,在云上的自动化需求是必然的结果.那么作为一个优秀的云平台,如何去实现一个可靠且便捷的编排系统呢?本文就跟大家分享并探讨我们这这方面的实践经验. 一个编排系统的核心就是一个工作流引擎,负责分析各个步骤间的依赖关系,并按照DAG(有向无环图)模型来控制这些流程的执行顺序.而云上的编排,更加的具化,就是按依赖顺序创建各个云服务.算法层面,我们可以称每个云服务为元素.创建各种云服务的过程,就是按顺序创建各个元素的过程. 有向无环图DAG 有向无环图(Directed Acyclic G

战狼2百度云资源Mp4观看【Mp4/2.5G国语BD】战狼2云盘链接迅雷BT下载edk

<战狼2电影>高清完整版点击观看>>http://kanayi.cn<<点击观看 <三生三世电影>高清完整版点击观看>>http://kanayi.cn<<点击观看 战狼2百度云资源Mp4观看[Mp4/1.32G国语BD]战狼2云盘链接迅雷BT下载edk分谨慎的人,既然见到这个有可能克制魂魔的诅咒,自然仔细研究了一番,本想着有朝一日碰到这个诅咒可以破除,不过他自己都没想到,破除的方法没用上,反而是把这诅咒用上了.    而倒霉的被这个

资源编排之自动化运维

资源编排ROS 资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务.用户通过模板描述多个云计算资源的依赖关系.配置等,并自动完成所有资源的创建和配置,以达到自动化部署.运维等目的.编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能. https://www.aliyun.com/product/ros?spm=5176.100239.blogrighta

动态应用分组发布,实现从云资源生产到监控报警配置的全自动化

摘要: 动态应用分组发布,实现从客户云资源生产到监控报警配置的全自动化 现状当前的监控报警体系里,用户生成新的ECS服务器后,需要手工将这些ECS归类到各个应用分组中,才能关联报警规则. 但是随着上云越来越深入,机器的创建次数越来越频繁,单次创建数量越来越多,相应手工操作的时间成本就会越来越高.因此云监控推出了动态配置应用分组的功能,可以在机器创建之初,通过维护好实例名称,自动匹配监控报警. 原理解读首先在创建应用分组时,配置ECS名称的匹配规则.创建机器的时候命名好实例名称,云监控便会按如下流

为跨云管理而生:行云管家助力企业高效管理云资源

随着云成为越来越多企业不可或缺的IT基础设施,为了满足不同的业务需求,许多企业存在多云并存的局面.而多云带来的问题也显而易见,包括多种云平台难以统一管理,资源运维效率大幅降低,企业成本居高不下等. 在这样的环境之下,要想让企业高效管理云计算资源,实现易上云.用好云.管好云的目标,一套运维简单.可一站式管理的跨云管理解决方案就显得尤为重要,由此,行云管家云管平台应运而生. 作为针对跨云管理量身打造的一站式解决方案,行云管家为企业提供了以下功能: 1.多云纳管.混合式管理 支持业界主流的公有云厂商和

Kubernetes之二workload资源编排

资源配置清单用编排yaml的方式来编排Docker,采用RTETful的接口风格,主要的资源对象如下图 自主式Pod资源(不受控制器控制) 资源的清单格式: 一级字段:apiVersion(group/version), kind, metadata(name,namespace,labels,annotations, ...), spec, status(只读) Pod资源: spec.containers <[]object> - name <string> image <

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

百度云是个好东西(现在叫百度网盘不过我还是习惯叫百度云),2个T的免费容量可以存视频.软件包等各式文件,就是下载速度有点让人看不下去,不开会员的话就算你是百兆光纤还是量子通信都是被限速的,做为一个商业公司还是能理解的.前些天有个朋友找我要会员,仿佛我就是大财主了,什么会员都有,虽然我没有会员,但是我有数亿的网友啊,之前在网上碰到过一款可以突破下载速度限制的软件,现在推荐给大家. proxyee-down:让下载速度得到解放 机缘巧合之下在一个帖子上面遇见了这款神器,我是一个喜欢收集软件的人,遇到