Contents

Terraform - 基礎架構即程式碼 (IaC) 入門

近年來 Devops 逐漸成為科技業的新寵兒, 其中 Devops 很火熱的工具之一就是 Terraform 。

在介紹 Terraform 之前, 先來看一下什麼是 Iac ( Infrastructure as Code ) 基礎架構即程式碼,IaC 可讓開發的人員採用部署作業自動化、更快速且可重複的方式,對基礎架構進行編碼,並具備下列優勢 :

  • 加快部署速度 : 自動化會比手動部署更佳快速。
  • 提升可靠性 : 系統龐大手動部署會有人為操作錯誤或是步驟遺漏,透過 IaC 可以更穩定且可靠部署。
  • 測試、開發環境 : 由於 IaC 可以更快速部署,打造測試或是開發環境更加容易。

參考 IBM 何謂基礎架構即程式碼 ?


1. 安裝 Terraform

在 Linux 上安裝 Terraform 有兩種方式,一個透過 Binary 二進位安裝,另一種透過 Linux 套件管理工具安裝, Terraform 官方下載頁面請點我

1.1. Binary 二進位安裝

1
2
3
4
5
6
7
8
[root@workstation ~]# wget -q https://releases.hashicorp.com/terraform/1.1.9/terraform_1.1.9_linux_amd64.zip
[root@workstation ~]# unzip terraform_1.1.9_linux_amd64.zip 
Archive:  terraform_1.1.9_linux_amd64.zip
  inflating: terraform               
[root@workstation ~]# mv terraform /usr/local/bin
[root@workstation ~]# terraform --version
Terraform v1.1.9
on linux_amd64

1.2. 套件管理工具安裝 ( RHEL 系列為例 )

1
2
3
4
5
6
7
8
[root@workstation ~]# yum install -y yum-utils
...
[root@workstation ~]# yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
[root@workstation ~]# yum install -y terraform
...
[root@workstation ~]# terraform --version
Terraform v1.1.9
on linux_amd64

2. Terraform Basics

Terraform 透過不同的 Providers 所提供 API 來達成基礎架構為程式碼的功能,使用 Hashicorp 官方提供的 local_file 建立檔案當作範例 :

2.1. 創建一個檔案為 exmaple.tf

1
2
3
4
5
[root@workstation terraform-exmaple]# cat example.tf 
resource "local_file" "example" {
    filename = "/tmp/example.txt"
    content  = "Created by Terraform\n"
}

2.2. Terraform 初始化

使用 terraform init 會至網路下載所依賴的 Providers。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@workstation terraform-exmaple]# terraform init

Initializing the backend...

Initializing provider plugins...
- Finding latest version of hashicorp/local...
- Installing hashicorp/local v2.2.2...
- Installed hashicorp/local v2.2.2 (signed by HashiCorp)

...

Terraform has been successfully initialized!

...

2.3. Terraform 產生計畫

使用 terraform paln 會看到此次 IaC 有哪些內容異動。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@workstation terraform-exmaple]# terraform plan

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated
with the following symbols:
  + create

Terraform will perform the following actions:

  # local_file.example will be created
  + resource "local_file" "example" {
      + content              = <<-EOT
            Created by Terraform 
        EOT
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "/tmp/example.txt"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

...

2.4 Terraform 執行計畫

使用 terraform apply , 會執行計畫,並會依造內容自動執行要求( 不需告訴 Terraform 執行方式,僅需告訴他要的結果 )。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@workstation terraform-exmaple]# terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated
with the following symbols:
  + create

Terraform will perform the following actions:

  # local_file.example will be created
  + resource "local_file" "example" {
      + content              = <<-EOT
            Created by Terraform 
        EOT
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "/tmp/example.txt"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

local_file.example: Creating...
local_file.example: Creation complete after 0s [id=ea874a7a3b87f4aa75c34c599a75a561909fad5d]

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

查看創建的檔案 :

1
2
[root@workstation terraform-exmaple]# cat /tmp/example.txt 
Created by Terraform

3. 小結

Terraform 是非常強大的工具, 與另外一款 Ansible 相似,不過差別在於 Terraform 擅長於雲端及地端的基礎建設( 不可變動性 ), Ansible 適合環境組態設定及部署。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!