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)的一组文件放在同一个目录中称为模块。

    • モジュールは、基本的にディレクトリ直下の設定ファイル群のみで構成される。

 

    • サブディレクトリは完全に別のモジュールとして扱われる

モジュール呼び出しという仕組みを使わない限り、自動的に読み込まれたりすることはない。

サブディレクトリの扱い.drawio.png
    • 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?

 

广告
将在 10 秒后关闭
bannerAds