前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >腾讯云Terraform应用指南(一)

腾讯云Terraform应用指南(一)

原创
作者头像
生态产品团队
修改于 2019-08-02 03:47:01
修改于 2019-08-02 03:47:01
19.7K0
举报
文章被收录于专栏:生态产品生态产品

摘要

《腾讯云Terraform应用指南》系列文章旨在帮助腾讯云用户借助Terraform,轻松使用简单模板语言来定义、预览和部署云基础结构,让用户通过IaC,基于腾讯云的OpenAPI一键创建或销毁多路资源。利用Terraform这把利器,帮助用户节约资源开销,提高从部署到运维的自动化生产力。

作为该系列的第一篇文章,本文将介绍使用 Terraform 管理腾讯云资源的必要步骤。

一、 安装Terraform


NOTES 由于Terraform使用的过程中需要对文件进行添加、改写或删除等操作,为了保证安全及部署过程的鲁棒,我们建议开发者避免在本地使用Terraform对腾讯云资源进行管理,转而在腾讯云服务器进行相关操作更为便捷和可靠,实现业务百分百上云,享受腾讯云给您带来的优质体验。

下面是在腾讯云服务器上配置安装Terraform的详细步骤:

1、 下载Terraform

官方提供了最新版本的Terraform可用下载,用户可以选择适合自己开发环境的下载包。若要安装其它的Terraform版本,请自行更改下载链接。

输入下载及安装命令行

代码语言:txt
AI代码解释
复制
    // download terraform
    $ wget https://releases.hashicorp.com/terraform/0.12.5/terraform_0.12.5_linux_amd64.zip
下载Terraform
下载Terraform
代码语言:txt
AI代码解释
复制
    // Install terraform
    $ unzip terraform_0.12.5_linux_amd64.zip
安装Terraform
安装Terraform

2、 配置环境变量

新建目录downloads,将安装好的terraform文件保存在该目录下

代码语言:txt
AI代码解释
复制
    // Move terraform
    $ mkdir downloads
    $ mv terraform downloads/
将Terraform保存在自定义目录下
将Terraform保存在自定义目录下

进入配置文件~/.profile添加Terraform的环境变量

代码语言:txt
AI代码解释
复制
    $ vim ~/.profile

    // Add terraform PATH
    export PATH="$PATH:~/downloads"
添加环境变量
添加环境变量

重新加载~/.profile文件

代码语言:txt
AI代码解释
复制
    $ source ~/.profile

查看Terraform当前版本

代码语言:txt
AI代码解释
复制
    $ terraform -version
完成环境变量的配置
完成环境变量的配置

有关如何在 Windows 上设置环境变量的说明,请这点击这里

二、 使用Terraform管理腾讯云


下面是Terraform管理腾讯云资源的具体方法:

1、 Terraform工作流程

利用Terraform部署腾讯云资源的结构简图

腾讯云Terraform工作流简图
腾讯云Terraform工作流简图

① 一次性配置 provider 文件以支持Tencent Cloud的OpenAPI

② 使用Terraform配置语法生成 .tf 资源文件

③ 使用CLI实现腾讯云资源的管理

Terraform会将整个资源部署情况更新在 *.tf.state 文件中,让用户在前端控制台和后端平台都清晰的把控自己的云资源。

2、 配置腾讯云provider文件

登录腾讯云,在访问管理中选择API秘钥管理

腾讯云控制台
腾讯云控制台

新建秘钥,获得Secret_Id和Secret_Key

新建秘钥
新建秘钥

在新目录下创建 provider.tf 文件,填入秘钥和区域信息

代码语言:txt
AI代码解释
复制
    $ vim provider.tf
    
    //provider.tf
    provider "tencentcloud" {
        secret_id  = "AKID****************"
        secret_key = "QdcM***************"
        region     = "ap-hongkong"
    }
provider.tf
provider.tf

保存该文件,执行 terraform init 初始化Terraform。此步骤,Terraform会自动检测 provider.tf 文件中的 provider 字段,发送请求到Terraform官方GitHub下载最新版本腾讯云资源的模块和插件,初始化成功时当前脚本的版本信息也会显示出来。

代码语言:txt
AI代码解释
复制
    // Initialize
    $ terraform init
初始化成功
初始化成功

当腾讯云脚本有新的版本发布时,可以通过 terraform init -upgrade 指令更新脚本,获取最新的应用。

同时,可以通过 terraform plan 预览将要完成的操作,准备好创建资源后,可以通过 terraform apply 进行资源部署,更多有关Terraform CLI的信息请点击这里

NOTES 将秘钥直接填入到.tf文件中是十分不安全的,在多用户共同管理资源时,不建议把腾讯云API 的秘钥直接写到源代码里,以免一不小心更新到公开的版本中,造成安全风险。

腾讯云提供了另一种更为安全可靠的方式,把秘钥信息放在环境变量中配置

代码语言:txt
AI代码解释
复制
    // Configure the secret key in the environment path
    $ export TENCENTCLOUD_SECRET_ID="your_fancy_accessid"
    $ export TENCENTCLOUD_SECRET_KEY="your_fancy_accesskey"
    $ export TENCENTCLOUD_REGION="ap-hongkong"

这样在 provider.tf 文件中就可以省略掉相关信息

代码语言:txt
AI代码解释
复制
    $ vim provider.tf
    
    // provider.tf
    provider "tencentcloud" {}

对于秘钥信息的配置,腾讯云会持续更新更加安全可靠的方法,致力于保护腾讯云用户的隐私安全。

3、 部署腾讯云资源

这里提供一个在私有网络(VPC)下创建腾讯云服务器(CVM)的简单用例

创建服务器实例资源文件

代码语言:txt
AI代码解释
复制
    $ vim cvm.tf
    
    // Create a cvm
    resource "tencentcloud_instance" "cvm_test" {
        instance_name = "cvm-test"
        availability_zone = "ap-hongkong-1"
        image_id = "img-pi0ii46r"
        instance_type = "S2.SMALL1"
        system_disk_type = "CLOUD_PREMIUM"
      
        security_groups = [
            "${tencentcloud_security_group.sg_test.id}"
        ]

        vpc_id = "${tencentcloud_vpc.vpc_test.id"
        subnet_id = "${tencentcloud_subnet.subnet_test.id}"
        internet_max_bandwidth_out = 10
        count = 1
    }
cvm.tf
cvm.tf

这里可以看到,该服务器关联的安全组、私有网络和子网后面并没有直接填写具体参数信息,可以通过调用相关资源tf文件中的 id 字段内容实现具体的资源分配。本例中调用的就是安全组tf文件: sg_test ,私有网络tf文件: vpc_test路由表tf文件: route_table.tf和子网tf文件: subnet_test ,具体内容分别如下

创建私有网络资源文件

代码语言:txt
AI代码解释
复制
    $ vim vpc.tf
    
    // Create a vpc
    resource "tencentcloud_vpc" "vpc_test" {
        name = "vpc-test"
        cidr_block = "10.0.0.0/16"
    }

创建子网资源文件

代码语言:txt
AI代码解释
复制
    $ vim subnet.tf
    
    // Create a subnet
    resource "tencentcloud_subnet" "subnet_test" {
        name = "subnet-test"
        cidr_block = "10.0.1.0/24"
        availability_zone = "ap-hongkong-1"
        vpc_id = "${tencentcloud_vpc.vpc_test.id}"
        route_table_id = "${tencentcloud_route_table.rtb_test.id}"
    }

创建路由表资源文件

代码语言:txt
AI代码解释
复制
    $ vim route_table.tf
     
    // Create a route table
    resource "tencentcloud_route_table" "rtb_test" {
        name = "rtb-test"
        vpc_id = "${tencentcloud_vpc.vpc_test.id}"
    }

创建安全组和安全规则资源文件

代码语言:txt
AI代码解释
复制
    $ vim security_group.tf
    
    // Create a security group and rule
    resource "tencentcloud_security_group" "sg_test" {
        name = "sg-test"    
    }

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

执行 terraform plan 查看部署计划,一共有6个资源计划创建

terraform plan
terraform plan

这里参数前面的+代表新添加的资源,当销毁资源时,参数前面对应的符号会变为-;更改一些参数需要重新部署资源时,该资源前面的符号为-/+;在旧参数和新参数内容之间有符号标识

资源更改
资源更改

执行 terraform apply 进行资源创建

询问是否创建资源
询问是否创建资源

输入 yes ,显示成功创建资源

创建资源成功
创建资源成功

回到控制台,可以看到刚刚部署的资源已经生效

控制台同步创建操作
控制台同步创建操作

执行 terraform destroy 进行资源销毁

询问是否销毁资源
询问是否销毁资源

输入 yes ,显示成功销毁资源

销毁资源成功
销毁资源成功

控制台中也同步了销毁操作

控制台同步销毁操作
控制台同步销毁操作

三、 写在最后


至此,使用Terraform管理腾讯云的准备工作都已完成,请持续关注腾讯云+社区,生态产品专栏《腾讯云Terraform应用指南》系列,生态产品团队将持续帮助用户快速入门,熟练掌握Terraform应用技巧。

“Write, Plan, and create Infrastructure as Code" 让每一个腾讯云用户高效、快捷的部署资源。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
【网络】五种IO模型&&多路转接select/poll/epoll&&Reactor反应堆模式
如果内核还未将数据准备好,系统调用仍然会直接返回,并且返回 EWOULDBLOCK 错误码
用户10925563
2024/12/22
1740
【网络】五种IO模型&&多路转接select/poll/epoll&&Reactor反应堆模式
一文读懂 Linux epoll 实现原理
如下的代码中,先用 epoll_create 创建一个 epoll 文件描述符 epfd,再通过 epoll_ctl 将需要监听的 socket 添加到 epfd 中,最后调用 epoll_wait 等待数据。
恋喵大鲤鱼
2024/05/24
1.3K0
一文读懂 Linux epoll 实现原理
深入了解epoll模型 -- 开卷有益
上网一搜epoll,基本是这样的结果出来:《多路转接I/O – epoll模型》,万变不离这个标题。 但是呢,不变的事物,我们就更应该抓出其中的重点了。 多路、转接、I/O、模型。 别急,先记住这几个词,我比较喜欢你们看我文章的时候带着问题。
看、未来
2022/05/06
7370
深入了解epoll模型 -- 开卷有益
【i.MX6ULL】驱动开发10——阻塞&非阻塞式按键读取
上篇文章:【i.MX6ULL】驱动开发9——Linux IO模型分析,介绍了linux中的五种I/O模型,本篇,就来使用阻塞式I/O和非用阻塞式I/O两种方式进行按键的读取实验,并对比之前使用输入捕获和中断法检测的按键程序,查看CPU的使用率是否降低。
xxpcb
2021/12/09
5980
【i.MX6ULL】驱动开发10——阻塞&非阻塞式按键读取
韦东山:Linux驱动基石之POLL机制
妈妈怎么知道卧室里小孩醒了? ① 时不时进房间看一下:查询方式 简单,但是累 ② 进去房间陪小孩一起睡觉,小孩醒了会吵醒她:休眠-唤醒 不累,但是妈妈干不了活了 ③ 妈妈要干很多活,但是可以陪小孩睡一会,定个闹钟:poll方式 要浪费点时间,但是可以继续干活。 妈妈要么是被小孩吵醒,要么是被闹钟吵醒。 ④ 妈妈在客厅干活,小孩醒了他会自己走出房门告诉妈妈:异步通知 妈妈、小孩互不耽误
韦东山
2020/09/30
9.2K1
韦东山:Linux驱动基石之POLL机制
你真的懂Linux内核中的阻塞和异步通知机制吗?(花了五天整理,墙裂推荐!)
  阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足。而非阻塞操作的进程在不能进行设备操作时,并不挂起,它要么放弃,要么不停地查询,直至可以进行操作为止。
嵌入式与Linux那些事
2021/05/20
1.2K0
你真的懂Linux内核中的阻塞和异步通知机制吗?
阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足。而非阻塞操作的进程在不能进行设备操作时,并不挂起,它要么放弃,要么不停地查询,直至可以进行操作为止。
用户8639654
2021/08/27
1.6K0
一种理解同步/异步,阻塞/非阻塞,Linux IO 模型,select /poll /epoll 的方法
吕力
2017/07/24
7K4
一种理解同步/异步,阻塞/非阻塞,Linux IO 模型,select /poll /epoll 的方法
提升性能的必备技术:Linux网络IO与select详解
IO 即“Input”和“Output”的组合,即输入/输出,IO用来处理设备之间的数据传输。socket/fd也是一种IO。
Lion Long
2024/08/10
1640
提升性能的必备技术:Linux网络IO与select详解
彻底搞定select、poll、epoll
上一篇文章以近乎啰嗦的方式详细描述了BIO与非阻塞IO的各种细节。如果各位还没有读过这篇文章,强烈建议先阅读一下,然后再来看本篇,因为逻辑关系是层层递进的。
蝉沐风
2023/02/01
1.9K0
彻底搞定select、poll、epoll
深入学习IO多路复用select/poll/epoll实现原理
Linux 服务器处理网络请求有三种机制,select、poll、epoll,本文打算深入学习下其实现原理。
涂明光
2022/11/27
1.8K2
【专业技术】Linux设备驱动第七篇:高级字符驱动操作之阻塞IO
我们之前介绍过简单的read,write操作,那么会有一个问题:当驱动无法立即响应请求该怎么办?比如一个进程调用read读取数据,当没有数据可读时该怎么办,是立即返回还是等到有数据的时候;另一种情况是进程调用write向设备写数据,如果缓冲区满了或者设备正忙的时候怎么办,是立即返回还是继续等待直到设备可写?这种情况下,一般的缺省做法是使进程睡眠直到请求可以满足为止。本篇就介绍遇到这类问题驱动的处理方法。 睡眠 什么是睡眠?一个进程睡眠意味着它暂时放弃了CPU的运行权,直到某个条件发生后才可再次被系统调度。
程序员互动联盟
2018/03/13
1.4K0
Linux select poll源码剖析
poll机制是所有多路转接的共性;调用控制块(struct poll_wqueues)与监听事件项(struct poll_table_entry)是select()与poll()的共性;事件描述集(fdset)与事件描述符(struct pollfd)是select()与poll()的特性。
233333
2022/05/09
3.2K0
高级IO之非阻塞IO和阻塞IO
非阻塞 I/O(Input/Output)是一种在进行文件和套接字操作时不阻塞进程的机制。在 Linux 中,非阻塞 I/O 可以通过设置文件描述符(File Descriptor)为非阻塞模式来实现。
Linux兵工厂
2024/02/27
3050
高级IO之非阻塞IO和阻塞IO
从内核看eventfd的实现(基于5.9.9)
前言:eventfd是一种进程/线程通信的机制,他类似信号,不过eventfd只是一种通知机制,无法承载数据(eventfd承载的数据是8个字节),他的好处是简单并且只消耗一个fd。
theanarkh
2021/07/08
8130
从内核看eventfd的实现(基于5.9.9)
理解epoll(上)(基于linux2.6.12.1)
epoll在现在的软件中占据了很大的分量,nginx,libuv等单线程事件循环的软件都使用了epoll。之前分析过select,今天分析一下epoll。
theanarkh
2020/04/01
1.1K0
理解epoll(上)(基于linux2.6.12.1)
09.字符设备驱动
  1.写出最底层Led_Open(),Led_Write(),Led_Read()   2.如何让内核知道下面有我们写好的操作硬件的函数呢?定义一个file_operations结构体(指向Led_Open等底层函数)。使用函数regsiter_chrdev(major,”first_drv”,&first_drv_fops)注册告诉内核(通过major索引)。   3.regsiter_chrdev被谁调用?被驱动入口函数调用。first_drv_init()   4.如何知道调用first_drv_init(),还是其他的函数呢?利用宏module_init(first_drv_init)定义一个结构体,结构体中有函数指针,指向入口函数。   5.出口函数first_drv_exit。卸载驱动unregsiter_chrdev(major,”first_drv”,&first_drv_fops)。如何知道何时来调用first_drv_exit?module_init(first_drv_exit)定义一个结构体,结构体中有函数指针,指向入口函数。
嵌入式与Linux那些事
2021/05/20
2.2K0
从内核看epoll的实现(基于5.9.9)
前言:epoll是现代服务器的基石,也是高效处理大量请求的利器,从设计上来看,epoll的设计思想也是非常优秀的,本文介绍epoll的实现,从中我们不仅看到epoll的实现原理和机制,同时也能领略到其中优秀的设计思想。
theanarkh
2021/07/08
6710
从内核看epoll的实现(基于5.9.9)
IO复用 知识点梳理
readfds、writefds、exceptfds这三个数组既是输入参数,也是输出参数。 它们也用于内核空间想用户空间传递就绪的文件描述符。
windealli
2019/11/01
7900
Linux笔记(12)| 几种并发式IO的实现方法
今天分享的是几种实现并发式IO的方法。什么是并发式IO呢?可以简单理解为比如要同时读取几个文件的数据,但是这些文件什么时候可以读取是不确定的,要实现当某个文件可以读取的时候就立马去读取,这就是并发式。
飞哥
2020/07/31
7060
推荐阅读
相关推荐
【网络】五种IO模型&&多路转接select/poll/epoll&&Reactor反应堆模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档