什麼是基礎架構即程式碼(IaC)-dev

banq發表於2020-08-26

DevOps的一大優勢是基礎架構即程式碼。這意味著您對待基礎結構的方式與對待應用程式程式碼的方式完全相同。為基礎設施配置實現版本控制,編寫測試,並確保這些配置不會與您在多個環境中的存在差異。
將基礎架構作為程式碼來處理可防止出現意外程式碼更改以及生產和開發等環境之間的配置差異之類的問題。它還可以確保您所做的每個部署都是完全相同的。您無需擔心部署時會發生的怪異差異。
您不需要使用其他程式語言,例如Python或Go。將有一些特定於工具的語言,但是這些語言通常很簡單,並且圍繞它們提供了很好的文件。使用基礎結構作為程式碼所要更改的主要內容是處理系統的方式。
無需登入伺服器並手動進行更改,您將使用開發方法來完成這些任務。這意味著您將不必處理公司中只有一個人知道的許多問題。這樣,每個人都有能力更新和部署對基礎結構的更改,並且保留更改,就像將程式碼提交到版本控制一樣。
雖然將基礎結構作為程式碼在生產中獲取和保持可靠版本的應用程式的許多方面都有幫助,但是當您為其新增自動化時,它確實增加了價值。
 

自動化您的基礎架構
工件是由構建Build程式過程產生的任何可部署元素。例如,當您使用React內建的應用程式時,您知道npm build命令會在專案的根目錄中生成一個構建目錄。該目錄中的所有內容都是部署到伺服器的內容。
在將基礎架構作為程式碼的情況下,工件是諸如Docker映象或VM之類的東西。您必須知道您應該從基礎結構程式碼中獲得什麼工件,因為這些工件將被版本化和測試,就像您的React應用程式一樣。基礎結構工件的一些示例包括OS軟體包,RPM和DEB。
構建工件之後,您需要像使用程式碼一樣對其進行測試。構建完成後,您可以執行單元測試和整合測試。您還可以進行一些安全檢查,以確保在整個過程中不會洩露敏感資訊。
您可能會使用Chef或Ansible編寫一些基礎設施自動化的工具。無需配置整個系統,就可以對這兩種語法進行任何語法錯誤或違反最佳實踐的單元測試。
您可以將它帶入一個新的水平並執行整合測試,以檢視是否正確配置和部署了系統。您將能夠檢查以確保安裝了正確的軟體包,並且所需的服務在正確的埠上執行。
您可以新增到基礎結構程式碼中的另一種測試型別是安全測試。這包括確保您符合行業法規,並確保沒有開啟任何其他埠以使攻擊者有所作為。編寫測試的方式在很大程度上取決於您決定使用的工具我們將在下一部分中介紹其中一些。
測試是將基礎結構自動化為程式碼的重要組成部分,因為它為您節省了許多有關靜默錯誤的除錯時間。當您準備部署基礎結構並使用它來使應用程式更新持續生產時,您將能夠跟蹤並修復可能導致問題的所有內容。
您使用的工具將幫助您構建管道所需的基礎結構程式碼。幾乎可以滿足您的任何基礎架構需求,有許多開源和專有工具。
 

常用工具
一些工具包括:

Chef
Puppet
Terraform
Conducto
CFEngine
AWS CloudFormation
Azure資源管理器
Cloud Deployment Manager
SaltStack
Anisble
Juju
Docker
Vagrant
R?ex
NixOS
 

注意點
部署意味著有一個自動過程來處理伺服器上的部署應用程式和升級應用程式。您會經常聽到的另一個術語是業務流程。編排有助於協調多個系統之間的操作。因此,一旦初始配置完成,業務流程將確保您可以升級並正在執行系統,並且可以控制正在執行的系統。
然後是配置管理。它可以確保根據需要維護和升級應用程式和程式包。在初始配置發生後,這也可以處理對系統配置的更改控制。配置管理中有一些重要規則。

  • 系統應收斂到所需狀態。針對伺服器和針對模型的新版本執行以符合現有模型的系統稱為融合。
  • 系統命令和配置應該是冪等的。這意味著您應該能夠多次執行配置管理過程並以相同的狀態結束。
  • 系統應該是不變的。這意味著在部署之後無法更改部署。因此,如果需要更改,您將需要重新部署整個系統。
  • 系統應該是自助服務。任何使用者都應該能夠在沒有其他任何人幫助的情況下啟動程式。不應只有一個人具有如何配置和部署的魔術知識。

基礎架構越複雜,遵循這些基本規則就越重要。
 
如果您正在考慮使用微服務,那麼Doc​​ker可能是與Kubernetes一起使用以對其進行編排的一個很好的工具。
如果您正在使用巨大的分散式環境(例如具有自定義應用程式的公司網路),則可以考慮使用PuppetConductoChef。如果您的站點的正常執行時間要求很高,則可以使用諸如AnsibleConducto的編排工具。
這些並不是您應該遵循的硬性規則,因為所有這些工具都可以透過多種方式使用。我在這裡提到的用例只是使用程式碼工具的基礎結構的一些常見方式。希望這些用例能使您更好地瞭解基礎結構作為程式碼的實用性。

相關文章