適合工程師的預期狀態設定概觀
本文件適合開發人員及作業小組了解 PowerShell 預期狀態設定 (DSC) 的優勢。 如需 DSC 所提供價值的較高層級檢視,請參閱適合決策者的預期狀態設定概觀
預期狀態設定的優勢
DSC 是用來:
- 減少 Windows 中的指令碼複雜度
- 提升反覆運算的速度
「持續部署」的概念越來越重要。 「持續部署」是指頻繁部署的能力,可以在一天內部署多次。 這些部署的目的並非修正某些項目,而是能快速發行某些項目。 透過盡可能以順暢且可靠的方式讓新功能從開發進入作業,將可以減少新商務邏輯創造價值所需的時間。
移至雲端運算,代表需要能運用「宣告式」範本模型的部署解決方案,其中的結束狀態環境會宣告為文字,並發佈至部署引擎。 此部署技術能大規模地做出快速變更,並具備針對失敗風險的恢復力,因為部署可隨時一致地重複以保證結束狀態。 透過自動化建立支援此作業模式的工具和服務,便是針對這些變更的回應。
DSC 是一個可提供宣告式且等冪 (可重複) 部署、設定和一致性的平台。 DSC 平台可讓您確保資料中心的元件具有正確的設定,以避免錯誤並防止耗費成本的部署失敗。 藉由將 DSC 設定當作應用程式程式碼的一部分,DSC 便能提供持續部署的可能性。 DSC 設定應該當作應用程式的一部分更新,以確保部署應用程式所需的知識永遠保持在最新狀態且隨時可用。
「我有 PowerShell,為什麼需要預期狀態設定?」
DSC 設定會區分意圖或「我想要執行的動作」,或「我想要如何執行」。這表示執行邏輯包含在資源內。 當功能的 DSC 資源可用時,使用者並不需要了解實作或部署該功能的方式。 這可讓使用者專注於他們的部署結構。
例如,PowerShell 指令碼看起來應該如下:
# Create a share in Windows Server 8
New-SmbShare -Name MyShare -Path C:\Demo\Temp -FullAccess Alice -ReadAccess Bob
這個指令碼簡單、易懂又直接。 但是,如果您嘗試將該指令碼放入生產環境,您將會遇到幾個問題。 如果該指令碼連續執行兩次,會發生什麼事? 如果 Bob 之前擁有該共用的完整存取權,會發生什麼事?
為了彌補這些問題,指令碼的「實際」版本看起來會更像這樣:
# But actually creating a share in an idempotent way would be
$shareExists = $false
$smbShare = Get-SmbShare -Name $Name -ErrorAction SilentlyContinue
if($smbShare -ne $null)
{
Write-Verbose -Message "Share with name $Name exists"
$shareExists = $true
}
if ($shareExists -eq $false)
{
Write-Verbose "Creating share $Name to ensure it is Present"
New-SmbShare @PSBoundParameters
}
else
{
# Need to call either Set-SmbShare or *ShareAccess cmdlets
if ($PSBoundParameters.ContainsKey("ChangeAccess"))
{
#...etc, etc, etc
}
}
這個指令碼更複雜,含有大量的邏輯及錯誤處理。 因為您已不再是指出要完成的動作,而是「要如何這麼做」 ,使得這個指令碼變得更加複雜。
DSC 可讓您指定要完成的動作,並將基礎邏輯抽象化。
# A configuration is a special kind of PowerShell function
Configuration Sample_Share
{
Import-DSCResource -ModuleName xSmbShare
# Nodes are the endpoint we wish to configure
# A Configuration block can have zero or more Node blocks
Node $NodeName
{
# Next, specify one or more resource blocks
# Resources are simply PowerShell modules that
# implement the logic of "how" to execute a task
xSmbShare MySMBShare
{
Ensure = "Present"
Name = "MyShare"
Path = "C:\Demo\Temp"
ReadAccess = "Bob"
FullAccess = "Alice"
Description = "This is an updated description for this share"
}
}
}
#Run the function to compile the configuration
Sample_Share
#Pass the configuration to the nodes we defined and configure them
Start-DscConfiguration Sample_Share
此指令碼的格式簡潔且容易閱讀。 邏輯路徑和錯誤處理仍然存在於資源的實作中,但指令碼作者看不到。
從結構分隔環境
DevOps 中其中一個常見的模式,是針對部署有多個環境。 例如,可能會有一個可用來快速開發新程式碼原型的「開發」環境。 「開發」環境的程式碼接著會進入「測試」環境,讓其他人員可以確認新的功能。 最後,該程式碼會進入「生產」,也就是即時網站生產環境。
DSC 設定透過使用設定資料來容納這個開發-測試-生產的管線。
這會進一步將設定結構與受管理節點之間的差異抽象化。 例如,您可以定義一個需要 SQL 伺服器、IIS 伺服器以及中介層伺服器的設定。 無論何種節點接收此設定的何種部分,這三個元素將總是會存在。 您可以使用設定資料將所有三個元素指向開發環境的同一部電腦,然後將三個元素分別指向測試環境的三台不同的電腦,並於最後將三個元素指向生產環境的所有生產伺服器。 若要部署至不同環境,您可以叫用 Start-DscConfiguration
並搭配您目標環境的正確設定資料。