腾讯云Terraform应用指南(三)

摘要

上一篇文章开始对Terraform CLI展开细致的介绍,帮助用户实现IaC。

本文将衔接《腾讯云Terraform应用指南(二)》,继续对Terraform中的指令给出详细的使用指南,让用户全面了解Terraform的每一个可用操作,助力腾讯云Terraform应用。

一、Commands Introduction Episode 2


下面将介绍继applyconsoledestroyfmt其他的Terraform指令使用详情,回顾前文请点击这里

1、force-unlock

terraform force-unlock 用于删除当前配置状态上的锁,并不会修改用户的基础设施。配置是否可以进入锁状态取决于后端服务的类型,有关锁定状态的更多信息点击这里

标准语法:terraform force-unlock LOCK_ID [dir]

  • dir用来指定要使用的目录,默认为当前目录
    // Removes the lock on the state for the current configuration
    $ terraform force-unlock LOCK_ID

2、get

terraform get 用于下载和安装配置模块。模块可用于创建轻量级的抽象,这样用户就可以根据模块的体系结构来配置基础资源,有关模块化的更多信息点击这里

标准语法:terraform get [options] [dir]

  • options用来填写get的flags
  • dir用来指定要使用的目录,默认为当前目录

dir

更新用户目录中tencentcloud目录下的模块

    // Sets the path of the root module
    $ terraform get -update ~/tencentcloud

options

  • -update - 将检查已经下载的模块是否有更新,如果有更新,则下载这些更新
    // Modules are downloaded will be checked for updates
    $ terraform get -update

3、graph

terraform graph 用于生成配置或执行计划的可视化依赖关系信息,输出为DOT格式,可以通过GraphViz生成图表。

标准语法:terraform graph [options] [dir]

  • options用来填写graph的flags
  • dir用来指定要输出图表信息的目录,默认为当前目录

输出tencentcloud目录下资源的依赖关系(配置了私有网络与服务器)

    // Output the dependencies of resources in the current directory
    $ terraform graph 
输出的依赖关系

可以看到服务器(CVM)与所属的安全组(security_group)和子网(subnet)的依赖关系

dir

tencentcloud目录下输出test目录中的配置资源依赖关系(test中未配置任何资源)

    // Output the dependencies of resources in the specified directory
    $ terraform graph ./test
test空目录依赖关系

以图形的方式显示依赖关系更为直观,能够读取DOT格式的典型程序是GraphViz,但是也有许多web服务可以应用在这个格式上 。

利用GraphViz对其的支持,可以创建*.svg文件,这里命名为graph

    // Dependency diagram
    $ terraform graph | dot -Tsvg > graph.svg
生成graph.svg

使用浏览器将此文件打开,可以清楚的看到所有资源的拓扑图

graph.svg资源拓扑图

options

  • -draw-cycles - 用颜色标亮依赖中循环的部分,有助于分析循环出现的问题
    // Highlight any cycles in the graph with colored edges
    $ terraform graph -drwa-cycles | dot -Tsvg > graph.svg
  • -module-depth=n 设置输出中模块的深度,默认情况下这是-1,显示所有
    // Specifies the depth of modules to show in the output
    $ terraform graph -module-depth=-1
  • -type=plan 输出依赖图内容的类型,可以指定为planplan-destroyapplyvalidateinputrefresh
    // Sets type of graph to output
    $ terraform graph -type=plan

可以看到不同类型的输出内容有所区别

plan类型的graph输出内容
apply类型的graph输出内容

4、import

terraform import 用于将已有的资源导入到terraform中。

标准语法:terraform import [options] ADDRESS ID

  • options用来填写import的flags
  • ADDRESS用来指定要导入的有效地址,有关此地址的更多信息点击这这里
  • ID用来指点要导入资源的类型,例如腾讯云服务器的ID:ins-1234abcd

options

  • -backup=path - 设置备份现有状态的路径,默认为-state-out的路径,备份为.backup文件,设置为-时不进行备份
    // Sets path to backup the existing state file
    $ terraform import -backup=-
  • -lock=true - 支持锁定状态时,锁定状态文件
    // Lock the state file when locking is supported
    $ terraform import -lock=true

有关import指令的更多信息,请点击这里,后续文章中将详细介绍有关import的使用方式。

5、init

terraform init 用于初始化包含terraform配置文件的工作目录。

标准语法:terraform init [options] [dir]

  • options用来填写init的flags
  • dir用来指定要初始化的目录,默认为当前目录

options

  • -upgrade - 升级模块和加载插件分别作为初始化的一个步骤
  • -lock=false - 禁止使用状态锁

Copy a Source Module

默认情况下,terraform init会假设工作目录已经包含一个配置,并初始化该配置,但是在一个空目录下,执行terraform init时会报错,因为找不到任何配置信息(这里的空目录为test

空目录下初始化失败

用户可以选择对空目录使用-from-module=MODULE-SOURCE选项运行init(等号后面为需要复制的资源地址),在这种情况下,指定的模块将被复制到目标目录中,例如可以将tencentcloud目录下的资源复制到此空目录test中并初始化

    // Copy a Source Module
    $ terraform init -from-module=/home/ubuntu/tencentcloud
复制tencentcloud目录中的资源并初始化

可以看到初始化成功,并把tencentcloud目录中的资源复制过来。这种方式的好处在于用户在新目录下配置资源时不需要将provider的信息二次填写,直接激活凭证,并把之前版本的配置作为新配置的基础。

Plugin Initialization

在初始化的过程中,Terraform会根据provider的信息,加载所需插件,插件加载后的目录为.terraform/

插件所在目录
  • -get-plugins=false 跳过安装插件的步骤,使用插件目录和安装在当前工作目录中的已有插件,如果所安装的插件不足以进行配置,初始化将失败
    // Skips plugin installation
    $ terraform init -get-plugins=false
  • -plugin-dir=PATH 跳过安装插件的步骤,从指定的PATH目录下加载插件
    // Loads plugins from the specified directory
    $ terraform init -plugin-dir=PATH

有关init指令的更多信息,请点击这里

6、output

terraform output 指令用于从状态文件中提取输出变量的值。

标准语法:terraform output [options] [NAME]

  • options用来填写output的flags
  • NAME用来指定要输出的变量的值,默认为根模块的所有输出

配置output.tf文件,设置要输出的内容,案例中设置查看服务器的idavailability_zone两个参数

    // output.tf
    output "cvm_az" {
      value = "${tencentcloud_instance.cvm.availability_zone}"
    }

    output "cvm_id" {
      value = "${tencentcloud_instance.cvm.id}"
    }
配置output.tf文件

执行terraform applyoutput的内容自动显示出来,也可以执行terraform output再次查看全部输出内容

    // View output
    $ terraform output
显示输出内容

NAME

通过terraform output cvm_id单独查看服务器id

    // Output cvm_id
    $ terraform output cvm_id
只查看服务器id

options

  • -json - 设置输出的格式为JSON对象
  • -no-color - 设置后输出内容没有其他颜色标识

有关output指令的更多信息,请点击这里

7、plan

terraform plan 用于创建执行计划,以确定实现配置文件中指定的资源状态所需的操作,是一种让用户可以十分方便的检查一组更改的执行计划是否符合期望的方法,而无需对实际资源或状态进行任何更改。

标准语法:terraform plan [options] [dir]

  • options用来填写plan的flags
  • dir用来指定需要创建计划的目录,默认为当前目录
创建执行计划

options

  • -destroy - 生成一个销毁所有资源的计划
  • -detailed-exitcode - 返回详细的退出代码,每个退出代码对应不同的含义
   `0` = 计划成功,没有更改

   `1` = 错误  

   `2` = 计划成功,有更改
  • -out=path - 设置执行计划保存的路径
  • -refresh=true - 在差异检查之前更新状态
  • -target - 用来将Terraform的注意力集中在资源的一个子集上,例如在cvm.tf文件中设置了count=2,一次创建2个服务器,可以通过索引针对其中一个创建计划

执行terraform plan -target=tencentcloud_instance.cvm[1]对其中一台服务器创建计划

    // Create plan
    $ terraform plan -target=tencentcloud_instance.cvm[1]
对一台服务器创建计划

有关plan指令的更多信息,请点击这里

8、providers

terraform providers 输出关于当前配置中使用的云提供商的信息。

标准语法:terraform providers [config-path]

  • config-path指定配置文件的路径
    // Provider information
    $ terraform providers
显示云供应商信息

二、写在最后


本期的Terraform命令介绍先到这里,后面几篇文章将继续给出其他命令的使用方式。请持续关注腾讯云+社区,生态产品专栏《腾讯云Terraform应用指南》系列,生态产品团队将持续帮助用户快速入门,熟练掌握Terraform应用技巧。

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

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏胡哥有话说

html5手机网站需要加的那些meta/link标签,html5 meta全解

<meta name="viewport" content=""> 说明:屏幕的缩放

10520
来自专栏小白帽学习之路

思路分享 | 从零模拟一次实战记录并成功提权

前天下午,风和日丽,我呆呆的坐在电脑前,思考着我存在的意义。这时,大佬突然走进机房,扔给我了一个靶机,让我搞定它。瑟瑟发抖的我,也不敢问什么,扛着靶机来到了一个...

12330
来自专栏小白帽学习之路

实战 | 记两个实战中遇见的逻辑漏洞

http://***.test.com.cn/*/forgetPassword.html

9120
来自专栏有三AI

【方法杂谈】你真的了解CVPR吗?

我没有参加过CVPR,大部分人这辈子也不可能有机会参加CVPR,不过关注这个领域的仍然会时常从零零碎碎的媒体带来的信息中得知一些消息然后乐于其中。

10950
来自专栏Java技术分享

idea新建springCloud项目(4)- 商品服务

将application.properties修改为application.yml

42020
来自专栏小白帽学习之路

文末有靶机地址 | 从零模拟一次实战记录并成功提权

前天下午,风和日丽,我呆呆的坐在电脑前,思考着我存在的意义。这时,大佬突然走进机房,扔给我了一个靶机,让我搞定它。瑟瑟发抖的我,也不敢问什么,扛着靶机来到了一个...

15210
来自专栏小白帽学习之路

PHP函数基础简章

在 PHP 中,预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。

8720
来自专栏生信小驿站

零代码功能富集分析(DAVID数据库、KOBAS数据库使用教程)

DAVID (the Database for Annotation,Visualization and Integrated Discovery)的网址是ht...

51120
来自专栏小白帽学习之路

Kali Linux Web渗透测试手册(第二版) - 9.2 - 对跨站脚本攻击(xss)进行混淆代码测试

在前面的小节中,我们遇到了一种过滤机制,他会自动删除一些常见的JavaScript标签。

9930
来自专栏小白帽学习之路

Kali Linux Web渗透测试手册(第二版) - 9.6 - 利用HTTP参数污染

当HTTP参数在同一请求中重复多次并且服务器以不同的方式处理每个实例时,会发生HTTP参数污染(HPP)攻击,从而导致应用程序中出现异常行为。

11340

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励