基础设施革新, Hashimoto 产品 Terraform 的命令行界面(CLI)

摘要

关于基础设施革新的哈希模子产品Terraform的命令行界面(CLI)。

关于Terraform

请参考下面的文章了解有关Terraform的信息。

ハシモトさんの頭に広がる宇宙 Terraform とは?

Terraform 命令行接口

Terraform 是一个简单的命令行界面工具,每个功能都作为一个子命令来实现。

与一般的命令行界面应用程序类似,如果发生错误,将返回非零状态,并通过 `-h` 或 `–help` 选项显示帮助信息。

只需要一种选项:前提

以 Terraform 在 Heroku 上部署 Ruboty-Gacha 应用程序为例,来解释CLI的使用方式。

关于Ruboty-Gacha,请参考下面的文章。

Sinatra + Heroku で Ruboty の Plugin の中からランダムで1つ選んでツイートする Web アプリケーションを作成 – tbpgr – Qiita

设定的内容使用如下。

    heroku.tf
variable "heroku_email" {}
variable "heroku_api_key" {}

provider "heroku" {
  email = "${var.heroku_email}"
  api_key = "${var.heroku_api_key}"
}

resource "heroku_app" "web" {
  name = "ruboty-gacha"
  region = "us"
  stack = "cedar-14"
  config_vars {
    BUILDPACK_URL="https://github.com/tbpgr/ruboty-gacha.git"
  }
}

output "heroku-name" {
  value = "${heroku_app.web.name}"
}

output "heroku-region" {
  value = "${heroku_app.web.region}"
}

output "heroku-stack" {
  value = "${heroku_app.web.stack}"
}

申请

apply 是一个命令,用于应用所需的设置或预先决定的 terraform plan 的执行计划。

详细信息请参考下方官方文件。

apply – COMMANDS(CLI) – Docs – Terraform

試行 – 试验

以下的內容將在Heroku上為新應用程序建立環境。

% terraform apply \
    -var heroku_email=$HEROKU_EMAIL \
    -var heroku_api_key=$HEROKU_API_KEY
heroku_app.web: Creating...
  all_config_vars.#:           "" => "<computed>"
  config_vars.#:               "" => "1"
  config_vars.0.#:             "" => "1"
  config_vars.0.BUILDPACK_URL: "" => "https://github.com/tbpgr/ruboty-gacha.git"
  git_url:                     "" => "<computed>"
  heroku_hostname:             "" => "<computed>"
  name:                        "" => "ruboty-gacha"
  region:                      "" => "us"
  stack:                       "" => "cedar-14"
  web_url:                     "" => "<computed>"
heroku_app.web: Creation complete


Outputs:

  heroku-name   = ruboty-gacha
  heroku-region = us
  heroku-stack  = cedar-14

毁灭

destroy 将删除由 Terraform 管理的基础架构。

请参考下面的官方文件获取详细信息。

destroy – COMMANDS(CLI) – Docs – Terraform

试行

在运行时以对话方式进行

    • 実行有無

 

    • heroku api key

 

    heroku に登録している email address

被确认。

% terraform destroy
Do you really want to destroy?
  Terraform will delete all your managed infrastructure.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: <input yes>

var.heroku_api_key
  Enter a value: <input your api key>

var.heroku_email
  Enter a value: <input your email>

heroku_app.web: Refreshing state... (ID: ruboty-gacha)
heroku_app.web: Destroying...
heroku_app.web: Destruction complete

Apply complete! Resources: 0 added, 0 changed, 1 destroyed.

取得

获取会得到最新的模块。
已获取的模块将保存在./.terraform中。

请参阅下面的官方文件以获取详细信息。

get – COMMANDS(CLI) – Docs – Terraform

试一试

    Terraform 設定ファイルに 以下の設定を追記
module "consul" {
    source = "github.com/hashicorp/consul/terraform/aws"
    servers = 3
}
    get を実行
% terraform get
Get: git::https://github.com/hashicorp/consul.git

图表。

用图表将执行计划可视化。
输出结果为 Graphviz 的 DOT 文件格式。

graph – COMMANDS(CLI) – Docs – Terraform

试验

% terraform graph > graph.dot
% cat graph.dot
digraph {
        compound = "true"
        newrank = "true"
        subgraph "root" {
                "[root] heroku_app.web" [label = "heroku_app.web", shape = "box"]
                "[root] provider.heroku" [label = "provider.heroku", shape = "diamond"]
                "[root] heroku_app.web" -> "[root] provider.heroku"
        }
}

使用 dot 命令生成 png 文件。

使用 graphviz 的 dot 命令,可以从 dot 文件生成图片。

% dot -Tpng -o ruboty-gacha_graph.png graph.dot
ruboty-gacha_graph.png

开始

使用其他模块作为骨架,初始化Terraform的配置。

init – COMMANDS(CLI) – Docs – Terraform

尝试执行

% terraform init github.com/hashicorp/terraform/examples/aws-two-tier
% tree
.
├── main.tf
├── outputs.tf
├── README.md
└── variables.tf

0 directories, 4 files

输出

从 state 文件的 output 获取值。

state 文件的 output 通过 Terraform 文件中的 output 语法进行输出。

output – COMMANDS(CLI) – Docs – Terraform

进行实验

% terraform output heroku-name
ruboty-gacha
% terraform output heroku-region
us
% terraform output heroku-stack
cedar-14

计划

我会制定一个执行计划。

plan – COMMANDS(CLI) – Docs – Terraform

试验

% terraform plan \
    -var heroku_email=$HEROKU_EMAIL \
    -var heroku_api_key=$HEROKU_API_KEY
Refreshing Terraform state prior to plan...


The Terraform execution plan has been generated and is shown below.
Resources are shown in alphabetical order for quick scanning. Green resources
will be created (or destroyed and then created if an existing resource
exists), yellow resources are being changed in-place, and red resources
will be destroyed.

Note: You didn't specify an "-out" parameter to save this plan, so when
"apply" is called, Terraform can't guarantee this is what will execute.

+ heroku_app.web
    all_config_vars.#:           "" => "<computed>"
    config_vars.#:               "" => "1"
    config_vars.0.#:             "" => "1"
    config_vars.0.BUILDPACK_URL: "" => "https://github.com/tbpgr/ruboty-gacha.git"
    git_url:                     "" => "<computed>"
    heroku_hostname:             "" => "<computed>"
    name:                        "" => "ruboty-gacha"
    region:                      "" => "us"
    stack:                       "" => "cedar-14"
    web_url:                     "" => "<computed>"

将Terraform配置文件上传至Atras。

push – COMMANDS(CLI) – Docs – Terraform

刷新

更新文件。

refresh – COMMANDS(CLI) – Docs – Terraform

有关文件,请参考下面的说明。

State – Docs – Terraform

试行

% terraform refresh \
    -var heroku_email=$HEROKU_EMAIL \
    -var heroku_api_key=$HEROKU_API_KEY
heroku_app.web: Refreshing state... (ID: ruboty-gacha)

远程

与远程有关的操作。
包含config、pull和push的子命令。

请参考以下链接以获取更详细的信息。

remote – COMMANDS(CLI) – Docs – Terraform

展示

从状态或计划文件中,以人类能够读懂的形式显示内容。

show – COMMANDS(CLI) – Docs – Terraform

尝试

% terraform show
heroku_app.web:
  id = ruboty-gacha
  all_config_vars.# = 1
  all_config_vars.BUILDPACK_URL = https://github.com/tbpgr/ruboty-gacha.git
  config_vars.# = 1
  config_vars.0.# = 1
  config_vars.0.BUILDPACK_URL = https://github.com/tbpgr/ruboty-gacha.git
  git_url = git@heroku.com:ruboty-gacha.git
  heroku_hostname = ruboty-gacha.herokuapp.com
  name = ruboty-gacha
  region = us
  stack = cedar-14
  web_url = https://ruboty-gacha.herokuapp.com/


Outputs:

heroku-name = ruboty-gacha
heroku-region = us
heroku-stack = cedar-14

玷污

请查阅以下链接以获取详细信息。

taint – COMMANDS(CLI) – Docs – Terraform

以下是一种可能的中文释义:

版式

展示版本

试验

% terraform version
Terraform v0.5.2

其他

请查阅官方网站的文件以获取更详细的信息。

TERRAFORM COMMANDS (CLI) – Docs – Terraform

广告
将在 10 秒后关闭
bannerAds