基礎架構即代碼允許開發人員生成他們需要的任何基礎架構組件,包括網絡、負載平衡器、數據庫、虛擬機和連接類型。
使用很少或沒有文檔
在配置文件中定義規格和參數。不需要與正在使用的配置不同步的其他文檔。
版本控制所有配置文件
將所有配置文件置于源代碼管理之下。版本控制在管理基礎架構時提供了靈活性和透明度。它還允許您跟蹤、管理和恢復以前的清單。
不斷測試配置
在將任何更改推送到生產環境之前測試和監控環境。為了節省時間,請考慮設置??在配置代碼被修改時運行的自動化測試。
模塊化
將您的基礎架構劃分為多個組件,然后通過自動化將它們組合起來。IaC 分段提供了許多優點。您可以控制誰可以訪問您的代碼的某些部分。您還可以限制可以對清單進行的更改的數量。
基礎設施即代碼工具
IaC 工具可加速和自動化云環境的配置。大多數工具還監視先前創建的系統并回滾對代碼的更改。
雖然它們在功能方面有所不同,但有兩種主要類型的基礎設施即代碼工具:
- 命令式工具
- 聲明性工具
命令式方法工具
具有命令式方法的工具定義了使基礎架構能夠達到所需狀態的命令。工程師創建腳本,一次一步配置基礎設施。由用戶決定最佳的部署過程。
命令式方法也稱為程序方法。
與聲明式方法工具相比,命令式 IaC 需要更多的手動工作。需要執行更多任務才能使腳本保持最新。
命令式工具更適合具有腳本背景的系統管理員。
const aws = require("@pulumi/aws");
let size = "t2.micro";
let ami = "ami-0ff8a91507f77f867"
let group = new aws.ec2.SecurityGroup("webserver-secgrp", {
ingress: [
{protocol: "tcp", fromPort: 22, toPort: 22, cidrBlocks: ["0.0.0.0/0"] },
],
});
let server = new aws.ec2.Instance("webserver-www", {
instanceType: size,
securityGroups: [ group.name ],
ami: ami,
});
exports.publicIp = server.publicIp;
exports.publicHostName= server.publicDns;
命令式 IaC 示例(使用 Pulumi)
聲明式方法工具
聲明性方法描述了基礎設施的期望狀態,而不列出達到該狀態的步驟。IaC 工具處理需求,然后自動配置必要的軟件。
雖然不需要分步說明,但聲明式方法需要熟練的管理員來設置和管理環境。
聲明式工具面向具有強大編程經驗的用戶。
resource "aws_instance" "myEC2" {
ami = "ami-0ff8a91507f77f867"
instance_type = "t2.micro"
security_groups = ["sg-1234567"]
}
聲明性基礎設施即代碼示例(使用 Terraform)
流行的 IaC 工具
市場上使用最廣泛的基礎設施即代碼工具包括:
- Terraform:?這個開源聲明性工具提供了預先編寫的模塊,您可以使用參數填充這些模塊以構建和管理基礎設施。
- Pulumi:Pulumi?的主要優勢在于用戶可以依靠自己喜歡的語言來描述所需的基礎設施。
- Puppet:?使用 Puppet 的基于 Ruby 的 DSL,您可以定義所需的基礎設施狀態,該工具會自動創建環境。
- Ansible:??Ansible 使您能夠通過描述組件和系統如何相互關聯來對基礎架構進行建模。
- Chef:??Chef 是市場上最受歡迎的命令式工具。Chef 允許用戶使用其基于 Ruby 的 DSL 制作“食譜”和“食譜”。這些文件指定了實現所需環境所需的確切步驟。
- SaltStack:??SaltStack 的不同之處在于配置和配置基礎設施組件的簡單性。