iT邦幫忙

0

Terraform覆蓋問題

  • 分享至 

  • xImage

假設A,B都自己從頭寫一份Terraform去雲端平台(假設GCP)新增自己的VM
A先寫完然後Apply上去,現在GCP上有A的VM在上面
後來B寫Apply自己VM,VM名稱不同
A,B兩個人用的credential是同一份

Q1,這樣最後結果會是?
1. A,B的VM都存在在GCP上
2. 只有B的VM在GCP上,A的被B的Terraform蓋掉了

Q2,假設結果是1. 那他是用什麼判斷哪些VM或服務是透過哪份Terraform檔案建置的?

Q3,假設結果是2. 那在B Apply前,是需要執行什麼Terraform指令才能最終結果是A,B的VM都存在?

請大家幫忙解惑,謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
Paul Tung
iT邦新手 4 級 ‧ 2022-06-01 09:51:42
最佳解答

雷神大有針對操作上,給予很好的建議,所以就不再贅述。

這邊想要簡單補充一個個人以為的重點:state file

用同一組 credential 不是問題,它只代表兩人所建的資源會 一起存在於同一個帳號下,而最重要的分水嶺在於:
A 與 B 是在 同一台機器 + 同一目錄下 執行 terraform 嗎?

不是 - 那結果基本上是 A 與 B 所創造的資源會同時存在,並不互相覆蓋,除非該資源有唯一或排他性的限制(如您的比方,就會是兩台不同名的 vm 同時存在)

- 後者執行 apply 時,會看見 terraform 提示資源的異動,包含新增、刪除、替換。(如您的比方,後者執行時會看見 vm 的名稱將被修改的提示)

所以簡化後的答案為:

  • Q1: 1
  • Q2: terrafrom.tfstate
  • Q3: 只要兩人在各自的機器上執行即可達成

以上答案供您參考,我推測您的情況應該 不是 在同一台機器下執行 terraform。
如果您計畫要導入 terraform 並做深度使用,這裡有幾篇官方文件是關於 state file,建議抽空研究看看,應該會有點幫助!(已幫您排好順序,可參考依序閱讀)

更詳細的部份,就有勞站上大神們的補充了~

4
Ray
iT邦大神 1 級 ‧ 2022-05-31 10:17:23

如果你想讓兩組不同的人, 分別部署屬於他們自己的環境, 應該是在雲上開出不同的環境來使用, 例如: GCP 應該給分別開設兩個不同的 Project 給 A/B, 或者 AWS 應該分別開設兩個不同的 VPC 網段給 A/B, 才不會搞不清楚....

把所有部署需求都混在一起, 最後是連維運的人都搞不清楚到底現在是甚麼狀態?
--------- 我是分隔線 ------------

Terraform 在正常部署有以下三個步驟:

Terraform init:
建立他自己的工作環境, 讀取你撰寫的 Config 內容, 這個動作不會影響你正在使用中的生產環境, 可以執行多次也沒關係

Terraform plan:
這個指令會從現有生產環境, 將所有資源全部讀回來, 然後比對你設計的 Config, 看看中間有多少差距要補? 哪些要刪或增? 同時將現有環境跟期望環境的差異, 產出一份執行計畫

Terraform apply:
將 Plan 產生出來的執行計畫, 真實的部署到生產環境中

如果你依序執行以上流程的話, Terraform 預設會先做差異比對之後, 只變更新 config 所期望的差異, 不會碰觸舊環境中與你期望相符的資源, 但是會刪除舊環境中, 你沒有預期存在的資源.

如果這不是你想要的結果, 希望每次部署都全部從頭來過的話, 最前面可以加上:

Terraform destroy:
這個指令會將生產環境內的所有資源全部清空

不懂純推
/images/emoticon/emoticon12.gif

先假設AB都要在同一個Project用自己的Terraform
那最終的結果會是1還是2?

Ray iT邦大神 1 級 ‧ 2022-06-01 00:05:49 檢舉

這個問題答案要取決於:
A or B 有沒有在 config 內, 預先下達 Terraform destroy 指令?
有下 destroy 指令? 誰下了 destroy? 都沒下 destroy? 這三種情境的答案都不同

你再仔細走一次上面寫的流程 (init > plan > apply), 那三個流程的動作說明, 應該就可以讓你推導出結論. (你把自己當成 Terraform 的核心, 去模擬執行他們的指令看看便知)

我要發表回答

立即登入回答