Terraform的个人总结备忘录
Terraform是一个已经确立了作为云基础架构配置管理的事实标准的工具。为了在实际工作中使用它时不会遇到困难,我进行了预习并总结了以下内容。
-
- Terraformの概要
動作イメージ
利用フロー
Terraformの利用
ローカル環境構築
Terraformのディレクトリ・ファイル構成
.tfファイルの記述
主要なterraformコマンド
有用と思われる公式ドキュメント
1. Terraform概述
Terraformは、HashiCorp社(Vagrant, Vault)によってGo言語で開発されたOSSで、Infratructure as Codeを実現するツール。
AWS,GCP,Azureの他、DatadogやHerokuなど様々なクラウドインフラの構成管理ができる。
類似ツールにCloudFormationがあるが、こちらはAWSのインフラリソースのみが対象
ちなみに、クラウドインフラ以外にローカルのDocker環境の構成管理もできる
インフラ構成の定義は、.tfという拡張子のファイルに、各インフラのリソースの定義をコードで記述することによって行う。
具体的には、各インフラの初期化、更新、削除といった内容を記述する。
.tfファイルに記述されたコードに基づいてTerraformが自動でインフラを構築してくれる。
利用者は、インフラリソースの構築・設定順を気にする必要はない。インフラリソース間の依存関係はTerraform側でいい感じに考慮して制御してくれる。
冪等性の担保もしてくれて、コードとして記述している内容が対象のインフラリソースですでに実現されている場合、その構築処理をスキップしてくれる。
Terraformの主な構成要素は、TERRAFORM CORE と TERRAFORM PROVIDERである。
1.1. 运动形象
[.tfファイル]
↓
↓
↓
---------------- Terraform ------------------
[TERRAFORM CORE]
↓
↓(gRPC)
↓
[TERRAFORM PROVIDER]
↓
↓(Golang)
↓
[各社クラウドインフラが提供するSDK(API)]
---------------------------------------------
↓
↓(HTTP(s))
↓
[各社クラウドインフラのリソース]
Terraform 供应商
-
- HassiCorp社とTerraformコミュニティによってGolangで開発されているプラグインである。
Terraform Registyで公開されている
.tfファイルの設定に基づき、各社クラウドから提供されているAPI, SDKを利用していい感じに各社クラウドインフラリソースを操作してくれるものである。
TERRAFORM PROVIDERは、ローカルでgRPCサーバとして動作する。
1.2. 使用流程
利用Terraform进行基础设施资源的构建和配置更新的过程如下:
-
- ①インフラリソースの設定ファイル(.tf)を記述
②設定ファイルの検証
terraform validateコマンドを実行する
③作業用ディレクトリの初期化
terraform initコマンドを実行する
→設定ファイルのインフラリソース定義の反映に必要な分のTERRAFORM PROVIDERがDLされる
④インフラリソースへ設定を適用するための具体的な操作を確認
terraform planコマンドを実行する
→「クラウドリソースに対して、Terraformがこれからどんな操作をするのか?」の内容が表示されるので、問題ないかを確認する
⑤インフラリソースへ設定を適用
teffaform applyコマンドを実行する
2. 使用Terraform
2.1. 本地环境设置
参考公式文档,安装以下内容。
-
- Terraform(※)
- terraformコマンド補完機能
如果您希望在管理Terraform版本的同时使用它,可以通过tfenv来安装并使用。
# tfenvをインストール
brew install tfenv
# バージョン指定してterraformをインストールし、tfenv管理下におく
tfenv install <バージョン>
# 使用するterraformのバージョンを指定する
tfenv use <バージョン>
2.2. Terraform的目录和文件结构
将包含设置文件(.tf 或 .tf.json)的一组文件放在同一个目录中称为模块。
-
- モジュールは、基本的にディレクトリ直下の設定ファイル群のみで構成される。
-
- サブディレクトリは完全に別のモジュールとして扱われる
モジュール呼び出しという仕組みを使わない限り、自動的に読み込まれたりすることはない。

-
- Terraformはモジュールのディレクトリ直下の設定ファイル内の記述すべてを評価し、それが1つの設定ファイルであるかのように動作する。
ブロックを別ファイルにわけるのは、純粋に読む人・メンテナンスする人にとってわかりやすくするためだけで、動作には全く影響しない。
Terraformは単一のルートモジュールを起点として動作する。
Terraform CLIでは、Terraformを起動する作業用ディレクトリ = ルートモジュール。
コマンドライン引数で、別ディレクトリをルートモジュールにすることもできるが、実際にはほぼやらないらしい。
2.3. .tf文件的编写方法
-
- 文字コード: UTF-8
-
- 改行コード: 慣習的にLF(CRLFでも可)
- コメント: #で一行コメントを記述
基础结构、语法和术语
# --- ブロック ----
<ブロックタイプ> "<ラベル>" "<ラベル>" {
# --- ボディ ---
...
# 引数
<引数名> = <値> or <式>
# --- ボディここまで ---
}
# --- ブロックここまで ---
-
- ブロック: 設定内容のコンテナ。ブロックタイプ, 任意の数のラベル, ボディ(任意の数の引数, 他のブロック)から構成される。
-
- 引数: 引数名に「値」もしくは「式」を紐付ける形で記述する。
- 式: 他の値を参照したり、組み合わせたりするもの。
具体来说,形式如下。
resource "aws_vpc" "main" {
cidr_block = var.base_cidr_block
}
块、标签、主体、参数、名称、值
2.3.1. 区块类型
土地整治
在Terraform中进行基本设置的区块。在区块的主体中,写入所需的提供者(required_providers区块)和tfstate的存放位置(backend区块)。
我正在学习中文。
我正在学习中文。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 1.0.4"
}
}
backend "gcs" {
bucket = "tf-state-prod"
prefix = "terraform/state"
}
}
可变的
待办事项
提供者
我需要中文的自然释义
资源
把下面的句子用中文本地化表达, 只需要一个选项 :
待办事项
模块
待办事项
数据
把下面的句子用中文母语进行改写,只需给出一种选项:
TODO
2.4 版本的 Terraform 命令
以下是按照使用Terraform时的主要步骤排序:
terraform validate: .tfファイルの検証
terraform init: .tfファイルに基づくクラウドインフラへの設定反映に必要なPROVIDERのダウンロード
terraform plan: クラウドリソースに対する現設定からの変化点の確認
terraform apply: クラウドリソースに.tfファイルの設定を反映
terraform destory: .tfファイルで定義したクラウドリソースを削除
此外,还有一个名为”terraform fmt”的命令,它可以按照.tf文件内的标准描述格式进行格式化。
关于Terraform plan
差分中出现符号的含义
+: 追加
-: 削除
-/+: 置換 (削除からの追加)
~: 更新 (削除からの追加じゃなくて、単純な更新)
<=: 読み込み? (データリソースへの適用時のみ発生しうるらしい)
tfstate是一个保存Terraform应用基础设施资源状态的文件。
执行terraform plan时,会考虑“实际环境状态”、“以前通过Terraform应用的状态(tfstate)”和“将要应用的内容(.tf)”,然后输出结果显示将会进行哪些更改。
如果手动修改而不通过Terraform进行操作,则会收到以下类似的提示消息。
Terraform detected the following changes made outside of Terraform since the last "terraform apply":
2.5. 公式文件
以下是一些被认为特别有用的文件。
-
- 設定ファイル関連
-
- terraform コマンド関連
- PROVIDER関連
3. 参考 – Can you please provide a little more context or specify what you would like to paraphrase?