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

腾讯云Terraform应用指南(三)

原创
作者头像
生态产品团队
修改2019-08-07 21:22:03
5.2K0
修改2019-08-07 21:22:03
举报
文章被收录于专栏:生态产品生态产品

摘要

上一篇文章开始对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用来指定要使用的目录,默认为当前目录
代码语言:txt
复制
    // 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目录下的模块

代码语言:txt
复制
    // Sets the path of the root module
    $ terraform get -update ~/tencentcloud

options

  • -update - 将检查已经下载的模块是否有更新,如果有更新,则下载这些更新
代码语言:txt
复制
    // 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目录下资源的依赖关系(配置了私有网络与服务器)

代码语言:txt
复制
    // Output the dependencies of resources in the current directory
    $ terraform graph 
输出的依赖关系
输出的依赖关系

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

dir

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

代码语言:txt
复制
    // Output the dependencies of resources in the specified directory
    $ terraform graph ./test
test空目录依赖关系
test空目录依赖关系

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

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

代码语言:txt
复制
    // Dependency diagram
    $ terraform graph | dot -Tsvg > graph.svg
生成graph.svg
生成graph.svg

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

graph.svg资源拓扑图
graph.svg资源拓扑图

options

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

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

plan类型的graph输出内容
plan类型的graph输出内容
apply类型的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文件,设置为-时不进行备份
代码语言:txt
复制
    // Sets path to backup the existing state file
    $ terraform import -backup=-
  • -lock=true - 支持锁定状态时,锁定状态文件
代码语言:txt
复制
    // 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中并初始化

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

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

Plugin Initialization

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

插件所在目录
插件所在目录
  • -get-plugins=false 跳过安装插件的步骤,使用插件目录和安装在当前工作目录中的已有插件,如果所安装的插件不足以进行配置,初始化将失败
代码语言:txt
复制
    // Skips plugin installation
    $ terraform init -get-plugins=false
  • -plugin-dir=PATH 跳过安装插件的步骤,从指定的PATH目录下加载插件
代码语言:txt
复制
    // 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两个参数

代码语言:txt
复制
    // output.tf
    output "cvm_az" {
      value = "${tencentcloud_instance.cvm.availability_zone}"
    }

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

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

代码语言:txt
复制
    // View output
    $ terraform output
显示输出内容
显示输出内容

NAME

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

代码语言:txt
复制
    // Output cvm_id
    $ terraform output cvm_id
只查看服务器id
只查看服务器id

options

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

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

7、plan

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

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

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

options

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

   `1` = 错误  

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

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

代码语言:txt
复制
    // Create plan
    $ terraform plan -target=tencentcloud_instance.cvm[1]
对一台服务器创建计划
对一台服务器创建计划

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

8、providers

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

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

  • config-path指定配置文件的路径
代码语言:txt
复制
    // Provider information
    $ terraform providers
显示云供应商信息
显示云供应商信息

二、写在最后


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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 摘要
  • 一、Commands Introduction Episode 2
    • 1、force-unlock
      • 2、get
        • dir
        • options
      • 3、graph
        • dir
        • options
      • 4、import
        • options
      • 5、init
        • options
        • Copy a Source Module
        • Plugin Initialization
      • 6、output
        • NAME
        • options
      • 7、plan
        • options
      • 8、providers
      • 二、写在最后
      相关产品与服务
      云服务器
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档