Terraform 實踐教程 第1集:基礎設施即代碼 Infrastructure as Code/IaC 簡介 [數據工程師系列]

数据工程师日记
8 位粉絲
23 觀看·2024年2月1日
在這個視頻中,我將介紹Terraform, 一個基礎設施即代碼 Infrastructure as Code/IaC 的工具相關的知識和實踐教程演示。無論你是剛剛入門還是已經有一些經驗,這個視頻都會為你提供有價值的信息。
內容大綱:
- 基礎設施即代碼 Infrastructure as Code/IaC 是什麼?
- Terraform 基礎簡介
如果你對數據領域感興趣,或者想要成為一名數據工程師,這個視頻將為你提供一些指導。
請記得訂閱我的頻道以獲取更多與數據工程相關的資源和教程。
有任何問題或建議,請在評論中留言。謝謝!
Hello,大家好,歡迎來到數據工程師日記,本期視頻我會跟大家介紹Terraform基礎設施及代碼Infrastructure as Code的技術。
首先,什麼是Infrastructure as Code,IAC,這個技術是通過代碼和自動化工具來管理和配置基礎設施的一個方法。
所以,它能使開發人員使用編程語言的思維來實現定義部署和管理基礎設施。
它的重要性是一,它將這個部署自動化,二,它有很強的可重複性和它的可維護性。
因爲整個基本設施的部署都是通過代碼來進行,所以它可以很容易的分享和大家協互的去進行開發,也很簡單的進行version control,就是版本管理。
因爲你能將這個代碼上載到Github,GitLab等等的不同的repository,不同的開發人員都能看得到這些代碼並瞭解在雲端所部署的這個基礎設施有些什麼。
這個Terraform是什麼東西呢?它是由Hashicorp開發的開源基礎設施及代碼工具,它是提供了一種聲明性的配置語言,就是declarative language。
我會在下幾個章會聊到這個東西,它可以允許用戶通過代碼去定義和管理這個infrastructure。
這個Terraform本身的特殊性就是它是多雲支持,它能部署不同的基礎設施到不同的雲端供應商、雲服務供應商,例如AWS、Google Cloud、Azure等等好多不同的供應商。
二,它是一個模塊化,它支持模塊化,可以提高代碼的可重用性和維護性。
第三,它是通過狀態管理去跟蹤當前的基礎設施狀態,英文稱爲state,這可以確保基礎設施的一致性。
那使用Terraform有什麼好處呢?一,它可以提高你的效率和節省時間,因爲它是使用自動化的部署,就是減少了手動的操作,一方面也可以減少手動會造成的錯誤,可以快速可靠的部署這個infrastructure。
四,它也是通過相同的代碼進行部署,確保每個環境的設施都是有一致性的,並減少飄移和錯誤的可能,然後能提供協作和版本控制,就如我剛剛所提起的。
與其他IAC工具對比,例如Ensible Chef Puppet的對比,Terraform是專注於用聲明性decorative的描述去創建基礎設施,相對於配置管理,Terraform更適合用於雲端基礎的編排,通過provider靈活連接不同雲服務的提供商。
那優勢和劣勢呢,優勢是包括畫園支持,模塊畫設計,然後劣勢是稍微複雜一些,可能學習曲線會比其他三個工具稍微複雜一些些。
說到說明性decorative programming的這個優勢呢,它是通過描述做些什麼而不是怎麼做的方式呢,去告訴Terraform說我應該做些什麼。
例如SQL,那你在編寫SQL的時候,你會說select哪一個列,從哪一個表格,然後要執行什麼filter。
那就是你跟SQL說我想要得到的東西是什麼,然後它就會在background進行這個黑箱操作,然後再把資料給你。
那這個Terraform也一樣,你就說我想要部署什麼樣的基礎設施,然後它們就會根據你的定義去部署這個設施,所以這是屬於一個聲明性的描述。
那它有什麼優勢呢,它就是抽象層次更高,它就不需要指定每一個步驟,而是期望更關注於這個最終結果。
然後呢,例如在Terraform中,你就需要定義你所要的這個基礎設施,不需要編寫具體的配置腳本。
然後呢,它更容易理解而維護,因爲它比較靠近人類的這個自然語言,然後就降低了學習和理解的難度。
然後呢,第三呢,它就是它的靈活性和自動化,那因爲這個系統負責執行和優化過程,所以就是說我們不需要擔心要去fine tune,要去調試這個代碼該怎麼執行。
那再就是交給Terraform去負責了。
第三,最後呢,就是它有一個適應的這個變化,因爲它更容易適應於環境和需求的變化,所以不需要好像例如有新的版本,或者是出來的話呢,它們背後在背後進行什麼樣的更改呢,跟我們沒有太大關係,因爲我們的需求我們已經定義在它的configuration file裏面了。
好,那接下來呢,我就先聊一聊這個Terraform的主要組件block,它就算是區塊吧。
然後呢,第一個呢,就是它的配置文件,它是用於定義基礎設施的狀態和資源,那這些文件呢,它都是會以.tf這個extension的文件爲結尾。
那你能看到這個例子當中呢,你會看到main.tf裏面呢,我會說,我想要使用哪一個供應商,我想要使用這個AWS作爲我的雲服務供應商,然後我要在哪一個區域部署我的這些基礎設施。
然後呢,我想要部署什麼東西呢,部署什麼資源呢,就是這個resource block,我就說,我想要部署這個資源呢,它的類型是AWS instance,那基本上就是一個EC2的實例,那這我就會給它一個命名,這是在本地命名這個資源。
那接下來呢,就是我的這個命名呢,就資源過後呢,你就可以提供這個不同的變量,或者是資訊,例如ami,那就是amazon machine image,那就是這個,你這個EC2的實例,你想什麼類型的實例,那你就能在EC2的這個console找到你需要的這個實例類型。
但是這個沒錯的話,應該是一個很基本的Amazon Linux的這個實例類型,那instance type呢,那就是說它的類型大小吧,那這是一個T2 micro的這個類型。
好,接下來呢,第二個主要的文件就是,有主要的組件呢,就是provider和resource,那基本上就是剛剛我們聊到的啦,就是provider,然後resource等等。
好,那這個你也可以選擇不同的provider,例如Azure cloud,Google cloud platform等等的,然後資源方面,那除了EC2,你也可以試試其他的虛擬機,S3儲存桶,或者是數據庫等等的,那它們相對的這個所需要的資料呢,就有所不同,你可以在這個Terraform的這個官方網站呢,就可以找到更多的這個資料。
那另外一個兩個這個區塊呢,就是Terraform變量,那你能在這個文件裏面呢,就是儲存重用詞的這個參數,增加配置的靈活性,例如你能通過variable這個block,來自命名這個region,那你就會說它的類型是一個string文字,然後呢,它的這個default的這個value這個值呢,是什麼東西。
那你就可以在之前我們所提到的其他文件呢,就是使用這個參數。
然後呢,接下來另外一個就是數據塊,就是data block,那這個data block呢,基本上就是從遠端,遠程的這個現有的資源呢,減縮這個數據。
例如呢,我想要我在aw上面有一個vpc,我可以使用就是能到vpc呢,就是截取它的那個id,然後把那個id呢,儲存到這個我們的這個locally,然後並使用在其他不同的模塊。
那接下來呢,就是terraform的這個config block,那基本上這個是屬於在文件當中最大塊的,最最最開端的這個配置塊。
那主要是聲明,哎,我想要需要使用哪一個版本的這個terraform,然後這個terraform的這個雲端呃,雲服務呃,供應商呢,是誰。
然後他們提供的這個版本,我想要使用啊,介於什麼到到什麼的這個版本,你都可以去一個一個的定義。
好,那接下來呢,我想說一說這個terraform主要的命令,那terraform呢,我們基本上使用的時候都是在一個cli或者是terminal那執行這個terraform的命令。
那你執行的這個呃,目錄呢,或directory呢,基本上就是你的.tf file所位於的這個位置。
然後呢,通常呢,這個就是他呃,基本上terraform所有的這個命令吧。
那第一呢,你試試初始化terraform的這個項目,並下載所配置所需要的provider插件。
那你就會通過你terraformconfig的這個呃,區塊呢,去告訴terraform哦,我想要使用aws的這個服務。
那他在這個初始化的時候,他就會到這個terraform的registry的下載這個awsprovider的這個呃,插件。
然後呢,你能進行下一個就是terraform plan,那主要是展示要執行的操作,包括創建,更新,或刪除資源。
然後呢,這個也能同時間能偵查到你的這個呃,你的這個執行的命令呢,是否有錯誤,是否是根據他們的呃,符合他們的呃,是完全正確的。
那當你確定,確認一切都正確的話,你就能進行terraformapply。
那apply呢,就是應用配置文件中定義的變更創建,或更新,或刪除呃,基礎設施。
那就是apply,就是把這些所定義好的東西在選,呃,在選定的這個雲端當中呢,進行呃,就是執行。
那當你呢,呃,一些用完你的資源呢,你決定要進行呃,想消除這個在雲端部署的資源呢,你能進行terraformdestroy。
那它就能銷燬以創建的基本設施。
不過這個小心一點,因爲呃,你會,也許會不小心把一些特別重要的這個呃,基礎設施給,給刪除。
所以在使用之前呢,請,請確認每一個,呃,每一個步驟。
那接下來呢,還有,呃,還有,還有三個這個命令呢,第一個terraformstate。
那通常呢,呃,terraform在部署一個基礎設施過後呢,它都會用一個狀態文件去,去,呃,跟蹤你在雲端部署的這些,呃,呃,呃,的設施。
那這些狀態呢,就是說它們在你能實行terraformstate去了解目前的這個,呃,狀態。
那你每一次進行這個更改的時候呢,它基本上都會比較現在currentstate跟你desirestate,就是你需要你想要達到的這個狀態呢,跟你現在在雲端的部署的狀態有什麼差別。
然後呢,它們會相比較,然後再進行更改。
那接下來呢,terraformfmt,那基本上就是format,是這個,呃,命令,它就是格式化你的配置文件,基本上就是把你,你所打的那個,呃,代碼呢,就是把它格式化,就是比較容易去,呃,閱讀。
還有呢,你呢,也能執行terraformvalidate,那就是驗證你的配置文件的餘法命令是否正確。
好,那最後呢,我想跟大家看一下這個terraform部署的流程。
那第一呢,你就是,身爲一個terraformadmin呢,你就通過你的這個,呃,local,本地的這個,呃,電腦呢,然後使用terraformcli,或者是普通的一個cli,你安裝了terraform。
然後你就,第一,你進行了terraforminit,init呢,就是初始化,你就會跟它,通過,你就會到這個terraform的這個registry下載,你所需要的這個,呃,雲端供應商,就能下載這個provider。
然後呢,你再通過這個,呃,當你已經有了這個terraformavalidateprovider這個區塊過後呢,你就能進行terraformvalidateplan,就是確認你的代碼是否正確。
然後呢,你就能進行plan,就是去看一看,誒,你這個部署呢,會主要會創建刪除或更改,呃,雲端的哪一些資源。
那之後呢,你就能通過,呃,當你確,通過plan呢,你確認了一切東西都已經,呃,都正確了,你就能進行terraformapply,那意思是說,把這些,呃,資源呢,進行,呃,佈置到雲端。
例如這,我就是,呃,佈置了一個,呃,EC2實例,那當你使用完,結束了,呃,使用這些infrastructure後呢,你就能進行terraformdestroy,能把這個資源解決刪除。
然後在terraform進行apply過後呢,你就會產生了一個terraformstatefile,那就是它的狀態文件,然後你就能用來跟蹤這個在雲端的這個資源的這個,呃,狀態。
好,那,呃,說完了這些理論呢,我們接下來就會,呃,通過,呃,進行一個簡單的一個,呃,手動操作,好,那我們待會再見,拜拜。
