DevOps課程-IaC with Terraform 4

Resources & Data Sources與apply指令

ZONGRU Li
Feb 8, 2022

上篇內容完成了tf檔案內定義我的AWS帳號的憑證資訊

用以代表我個帳號憑證身分來調用東京的AWSResource

所以接著就要實作Resource調用的部分

Resources:

一般來說Resource名稱格式都是:

#一般來說Resource名稱格式都是:
<provider>_<resourceType>

例如:

實際取用時的Code格式大略如下:

#以aws_vpc為例:
resource "aws_vpc" "{給這個resource的名稱}" {
<可能一個或多個infraStructure Object>}

aws_vpcResourcedoc在:

右邊就有這個Resource內有哪些可以定義的物件像是cide_block(如下圖)

(並且上下查找會有範例):

並且我們知道AWSvpc內包含了"subnet"

所以我們可以另外定義aws_subnet這個Resource

referenceaws_vpc,初步定義如下:

尚有許多Resource內的Object在區塊內沒有定義,通常就會有default

以上即完成一個簡單Resource建立的Terraform專案的程式tf檔撰寫

在執行前先看到當前既有的vpc有:

並確認當前現有的subnet:

接著嘗試執行剛剛完成的Terraform

打開該目錄開啟cmd:

執行以下指令以執行Terraform建立Resource:

#執行指令建立Resource:
terraform apply

實際到web介面去refresh看:

並且由於剛剛建立的subnet依存於我們建立的vpc,所以可以看到:

經由以上的操作得以確認到真的有建立Resources(vpc & subnet)出來

但是其實Terraform本身也可以Query所建立的Resources →Data Sources

Data Sources:

Doc頁面也能看到:

並也有對應範例:

而我們要Query到剛剛建立的Resources則要用到一些條件式:

比如我只想拿到上圖defaulttruevpc, i.e. AWS本身預設給的vpcid

並且在預設vpc中再建立另一個subnet,則可以在家如下的Code

並且要注意,這個subnet的IP範圍要屬於這個default vpc

並且這個subnet的IP範圍跟既有的subnet不可以衝突

所以參照到舊的default vpc對應的既有subnet的IP範圍有:

所以可以寫成:

再次執行:

#執行指令建立Resource:
terraform apply

以上只是基於AWSEC2的範例

但是其他providertf Code架構也是雷同

對應一般程式對應:

provider = import libraryresource/data = function call of libraryarguments = parameters of function

並且如果此時重複執行Terraform的執行指令,會看到:

上面結果又再一次說明了TerraformDeclare

Declare了end result

在執行terraform apply指令時,Terraform就要知道:

current AWS state v.s. configuration (desired) state

例如當有發現跟Code定義一樣的vpc,就知道不用在重複建立

並且這有一個很大的好處,其中一個是 — idempotent(等冪)

這邊使用idempotent這個單字表示

不管我執行terraform apply N百遍同樣的一份tf Code

我仍會得到一樣的infraStruture結果

若有更改到Code,也僅異動有變動的Resource

整理當前完成的main.tf Code如下(當然會隱藏憑證資訊):

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet