本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立執行的關聯 Chef recipes
您可以建立 State Manager 執行的關聯 Chef 配方。 AWS-ApplyChefRecipes
SSMState Manager 是 的功能 AWS Systems Manager。您可以使用 AWS-ApplyChefRecipes
SSM 文件鎖定 Linux 型 Systems Manager 受管節點。本文件提供下列執行 的好處 Chef 配方:
-
支援多個 版本 Chef (Chef 11 至 Chef 18)。
-
自動安裝 Chef 目標節點上的用戶端軟體。
-
在目標節點上選用地執行 Systems Manager 合規檢查,並將合規檢查的結果存放在 Amazon Simple Storage Service (Amazon S3) 儲存貯體中。
-
在單一文件執行中執行多個食譜和配方。
-
選用地在
why-run
模式下執行配方,以顯示哪些配方會對目標節點進行變更,而無須實際進行變更。 -
選擇性地將自訂JSON屬性套用至
chef-client
執行。 -
選擇性地從存放在您指定位置的來源檔案中套用自訂JSON屬性。
您可以使用 Git 、 GitHub、 HTTP或 Amazon S3 儲存貯體作為 的下載來源 Chef 您在AWS-ApplyChefRecipes
文件中指定的食譜和食譜。
注意
執行的關聯 Chef 配方不支援 macOS.
開始使用
建立AWS-ApplyChefRecipes
文件之前,請準備您的 Chef 食譜和食譜儲存庫。如果您還沒有 Chef 您要使用的食譜,您可以使用 AWS 為您準備的測試HelloWorld
食譜開始。AWS-ApplyChefRecipes
文件根據預設已指向此食譜。您的食譜應根據以下目錄結構進行相似的設定。在下列範例中, jenkins
和 nginx
是 的範例 Chef 中提供的食譜 Chef Supermarket
雖然 AWS 無法正式支援 上的食譜 Chef SupermarketAWS-ApplyChefRecipes
文件。以下是在您測試社群技術指南時應確定的條件範例:
-
技術指南應支援您設為目標的 Systems Manager 受管節點的 Linux 型作業系統。
-
食譜對於 應為有效 Chef 用戶端版本 (Chef 11 至 Chef 18) 您使用。
-
食譜相容於 Chef Infra Client、 和 不需要 Chef 伺服器。
確認您可以連上 Chef.io
網站,以便在 Systems Manager 文件 (SSM 文件) 執行時安裝您在執行清單中指定的任何食譜。支援使用巢狀 cookbooks
資料夾,但並非必要;您可以將食譜直接存放在根層級下。
<Top-level directory, or the top level of the archive file (ZIP or tgz or tar.gz)> └── cookbooks (optional level) ├── jenkins │ ├── metadata.rb │ └── recipes └── nginx ├── metadata.rb └── recipes
重要
建立 之前 State Manager 執行的關聯 Chef 請注意,文件執行會安裝 Chef Systems Manager 受管節點上的用戶端軟體,除非您設定 的值 Chef 用戶端版本至 None
。此操作使用來自 的安裝指令碼 Chef 安裝 Chef 元件。在執行AWS-ApplyChefRecipes
文件之前,請確定您的企業可以遵循任何適用的法律要求,包括適用於 使用的授權條款 Chef 軟體。如需詳細資訊,請參閱 Chef 網站
Systems Manager 可以將合規報告交付至 S3 儲存貯體、Systems Manager 主控台,或提供合規結果以回應 Systems Manager API命令。若要執行 Systems Manager 合規報告,連接至 Systems Manager 受管節點的執行個體設定檔必須具備寫入 S3 儲存貯體的許可。執行個體設定檔必須具有使用 Systems Manager PutComplianceItem
的許可API。如需有關 Systems Manager 合規的詳細資訊,請參閱 AWS Systems Manager合規。
將文件執行記錄於日誌
當您使用 執行 Systems Manager 文件 (SSM 文件) 時 State Manager 關聯,您可以設定關聯以選擇文件執行的輸出,並將輸出傳送至 Amazon S3 或 Amazon CloudWatch Logs (CloudWatch Logs)。為了在關聯完成執行時輕鬆進行疑難排解,請確認關聯已設定為將命令輸出寫入 Amazon S3 儲存貯體或 CloudWatch Logs。如需詳細資訊,請參閱在 Systems Manager 中使用關聯。
執行配方時將JSON屬性套用至目標
您可以為 指定JSON屬性 Chef 用戶端,以在關聯執行期間套用至目標節點。設定關聯時,您可以提供 Amazon S3 中儲存JSON檔案的原始JSON或路徑。
當您想要自訂配方的執行方式,而不必修改配方本身時,請使用JSON屬性,例如:
-
覆寫少量的屬性
使用自訂JSON以避免必須維護配方的多個版本,以適應微小的差異。
-
提供變數值
使用自訂JSON來指定可能從 變更的值 run-to-run。例如,如果您的 Chef cookbooks 會設定接受付款的第三方應用程式,您可以使用自訂JSON來指定付款端點 URL。
在原始 中指定屬性 JSON
以下是您可用來為 指定自訂JSON屬性的格式範例 Chef 配方。
{"filepath":"
/tmp/example.txt
", "content":"Hello, World!
"}
指定JSON檔案的路徑
以下是您可以用來指定自訂JSON屬性路徑的格式範例 Chef 配方。
{"sourceType":"s3", "sourceInfo":"
someS3URL1
"}, {"sourceType":"s3", "sourceInfo":"someS3URL2
"}
使用 Git 做為食譜來源
AWS-ApplyChefRecipes
文件使用 aws:downloadContent 外掛程式下載 Chef 食譜。若要從 Git 下載內容,請以下列範例的JSON格式指定 Git 儲存庫的相關資訊。取代每個 example-resource-placeholder
使用您自己的資訊。
{ "repository":"
GitCookbookRepository
", "privateSSHKey":"{{ssm-secure:ssh-key-secure-string-parameter
}}", "skipHostKeyChecking":"false
", "getOptions":"branch:refs/head/main
", "username":"{{ssm-secure:username-secure-string-parameter
}}", "password":"{{ssm-secure:password-secure-string-parameter
}}" }
使用 GitHub 作為食譜來源
AWS-ApplyChefRecipes
文件使用 aws:downloadContent 外掛程式下載食譜。若要從 下載內容 GitHub,請指定您的 的相關資訊 GitHub 儲存庫的JSON格式,如下列範例所示。取代每個 example-resource-placeholder
使用您自己的資訊。
{ "owner":"
TestUser
", "repository":"GitHubCookbookRepository
", "path":"cookbooks/HelloWorld
", "getOptions":"branch:refs/head/main
", "tokenInfo":"{{ssm-secure:token-secure-string-parameter
}}" }
使用 HTTP 做為逐步指南來源
您可以儲存 Chef 在自訂HTTP位置作為單一 .zip
或 tar.gz
檔案,或目錄結構的 食譜。若要從 下載內容HTTP,請以下列範例的JSON格式指定檔案或目錄的路徑。取代每個 example-resource-placeholder
使用您自己的資訊。
{ "url":"https:
//my.website.com/chef-cookbooks/HelloWorld.zip
", "allowInsecureDownload":"false", "authMethod":"Basic", "username":"{{ssm-secure:username-secure-string-parameter
}}", "password":"{{ssm-secure:password-secure-string-parameter
}}" }
使用 Amazon Simple Storage Service (Amazon S3) 作為技術指南來源
您也可以儲存和下載 Chef Amazon S3 中的食譜作為單一 .zip
或 tar.gz
檔案,或目錄結構。若要從 Amazon S3 下載內容,請以下列範例的JSON格式指定檔案的路徑。取代每個 example-resource-placeholder
使用您自己的資訊。
範例 1:下載特定食譜
{ "path":"https://s3.amazonaws.com/
chef-cookbooks/HelloWorld.zip
" }
範例 2:下載目錄的內容
{ "path":"https://s3.amazonaws.com/
chef-cookbooks-test/HelloWorld
" }
重要
如果您指定 Amazon S3,則受管節點上的 AWS Identity and Access Management (IAM) 執行個體設定檔必須使用 AmazonS3ReadOnlyAccess
政策設定。如需詳細資訊,請參閱設定 Systems Manager 所需的執行個體許可。
建立執行的關聯 Chef 配方 (主控台)
下列程序說明如何使用 Systems Manager 主控台來建立 State Manager 執行的關聯 Chef 使用 AWS-ApplyChefRecipes
文件的食譜。
在 開啟 AWS Systems Manager 主控台https://console.aws.amazon.com/systems-manager/
。 在導覽窗格中,選擇 State Manager.
-
選擇 State Manager,然後選擇建立關聯。
-
針對 Name (名稱),輸入可協助您記住關聯用途的名稱。
-
在 Document (文件) 清單中,請選擇
AWS-ApplyChefRecipes
。 -
在參數 中,針對來源類型 ,選取 Git 、 GitHub、 HTTP或 S3。
-
對於來源資訊,請使用您在步驟 6 中選取的來源類型對應的適當格式,輸入食譜來源資訊。如需詳細資訊,請參閱下列主題:
-
在 Run list (執行清單) 中,以以下格式列出您希望執行的配方,並以逗號分隔每個配方,如下所示。請不要在逗號後方包含空格。取代每個
example-resource-placeholder
使用您自己的資訊。recipe[
cookbook-name1
::recipe-name
],recipe[cookbook-name2
::recipe-name
] -
(選用) 指定您想要的自訂JSON屬性 Chef 用戶端以傳遞至目標節點。
-
在JSON屬性內容 中,新增任何您想要的屬性 Chef 用戶端以傳遞至目標節點。
-
在JSON屬性來源 中,將路徑新增至您希望 Chef 用戶端以傳遞至目標節點。
如需詳細資訊,請參閱執行配方時將JSON屬性套用至目標。
-
-
針對 Chef 用戶端版本 ,指定 Chef 版本。有效值為
11
到18
中的一個或None
。如果您指定介於11
18
(包含) 之間的數字,Systems Manager 會安裝正確的 Chef 目標節點上的用戶端版本。如果您指定None
,Systems Manager 不會安裝 Chef 在執行文件配方之前,在目標節點上建立用戶端。 -
(選用) 對於 Chef 用戶端引數 ,指定 版本支援的其他引數 Chef 您正在使用。若要進一步了解支援的引數,請在執行 的節點
chef-client -h
上執行 Chef 用戶端。 -
(選用) 開啟 Why-run 來顯示若執行配方將對目標節點進行的變更,而無須實際變更目標節點。
-
對於 Compliance severity (合規嚴重性),選擇您希望報告的 Systems Manager 合規結果嚴重性。合規報告會指出關聯狀態合規與否,以及您指定的嚴重性層級。合規報告會存放在您指定為 Compliance report bucket (合規報告儲存貯體) 參數 (步驟 14) 的 S3 儲存貯體中。如需合規的詳細資訊,請參閱本指南中的 瞭解合規的詳細資訊。
合規掃描會測量在您的 中指定的組態之間的漂移 Chef 配方和節點資源。有效值為
Critical
、High
、Medium
、Low
、Informational
、Unspecified
或None
。如要跳過合規報告,請選擇None
。 -
針對 Compliance type (合規類型),請指定您希望結果報告的合規類型。有效值
Association
適用於 State Manager 關聯,或Custom:
custom-type
。 預設值為Custom:Chef
。 -
對於合規報告儲存貯體 ,輸入S3其中儲存每個 Chef 由本文件執行,包括資源組態和合規結果。
-
在速率控制 中,設定要執行的選項 State Manager 受管節點機群之間的關聯。如需使用速率控制的詳細資訊,請參閱 了解 中的目標和速率控制 State Manager 關聯。
在 Concurrency (並行) 中,選擇一個選項:
-
選擇 targets (目標),輸入可以同時執行關聯的目標絕對數量。
-
選擇 percentage (百分比),輸入可以同時執行關聯的目標集百分比。
在 Error Threshold (錯誤閾值) 中,選擇一個選項:
-
選擇錯誤以輸入之前允許的絕對錯誤數目 State Manager 會停止在其他目標上執行關聯。
-
選擇百分比以輸入之前允許的錯誤百分比 State Manager 會停止在其他目標上執行關聯。
-
(選用) 針對 Output options (輸出選項),若要將命令輸出儲存至檔案,請選取 Enable writing output to S3 (啟用將輸出寫入 S3) 方塊。在方塊中輸入儲存貯體和字首 (資料夾) 名稱。
注意
授予將資料寫入 S3 儲存貯體之能力的 S3 許可是指派給受管節點的執行個體設定檔,而不是執行此任務IAM的使用者的執行個體設定檔。如需詳細資訊,請參閱設定 Systems Manager 所需的執行個體許可或建立混合環境IAM的服務角色。此外,如果指定的 S3 儲存貯體位於不同的 中 AWS 帳戶,請確認與受管節點相關聯的執行個體設定檔IAM或服務角色具有寫入該儲存貯體的必要許可。
-
選擇 Create Association (建立關聯)。
建立執行的關聯 Chef 配方 (CLI)
下列程序說明如何使用 AWS Command Line Interface (AWS CLI) 來建立 State Manager 使用 AWS-ApplyChefRecipes
文件執行主廚食譜的關聯。
如果您尚未安裝和設定 AWS Command Line Interface (AWS CLI),請執行 。
如需相關資訊,請參閱安裝或更新最新版本的 AWS CLI。
-
執行下列其中一個命令,以建立執行的關聯 Chef 具有指定標籤之目標節點上的食譜。使用適用於您的食譜來源類型和作業系統的命令。取代每個
example-resource-placeholder
使用您自己的資訊。-
Git 來源
-
GitHub 來源
請見此處範例。
-
HTTP 來源
-
Amazon S3 來源
請見此處範例。
系統會建立關聯,除非您指定的 cron 或 rate 表達式阻止關聯,否則系統會在目標節點上執行關聯。
注意
State Manager 關聯不支援所有 Cron 和 Rate 運算式。如需針對關聯建立 Cron 和 Rate 運算式的詳細資訊,請參閱參考:Systems Manager 的 Cron 和 Rate 運算式。
-
-
執行以下命令來檢視您剛剛建立的關聯的狀態。
aws ssm describe-association --association-id "
ID
"
檢視 Chef 資源合規詳細資訊
Systems Manager 擷取有關 的合規資訊 Chef在您執行AWS-ApplyChefRecipes
文件時指定的 Amazon S3 合規報告儲存貯體值中受管的資源。搜尋有關 的資訊 Chef S3 儲存貯體中的資源故障可能會耗時。您可以改為在 Systems Manager Compliance (合規) 頁面中檢視此資訊。
Systems Manager 合規掃描會收集在最近建立或檢查的受管節點上資源的相關資訊 Chef 執行。這些資源可包含檔案、目錄、systemd
服務、yum
套件、範本化檔案、gem
套件,以及相依食譜等。
合規資源摘要區段顯示失敗的資源計數。在下列範例中, ComplianceType為自訂:Chef 且一個資源不合規。
注意
Custom:Chef
是AWS-ApplyChefRecipes
文件中的ComplianceType預設值。這個值是可自訂的。
資源的詳細資訊概觀區段會顯示不符合規範 AWS 的資源相關資訊。本節也包含 Chef 執行合規的資源類型、問題的嚴重性、合規狀態,以及適用時連結至詳細資訊的連結。
View output (檢視輸出) 會顯示詳細狀態的最後 4,000 個字元。Systems Manager 會使用例外狀況做為第一個元素開始,尋找詳細訊息,並在到達 4,000 個字元配額之前顯示它們。這個程序會顯示拋出例外狀況之前的輸出日誌訊息,也就是與故障診斷最相關的訊息。
如需如何檢視合規資訊的相關資訊,請參閱 AWS Systems Manager合規。
重要
如果 State Manager 關聯失敗,不會報告任何合規資料。例如,如果 Systems Manager 嘗試下載 Chef 來自 S3 儲存貯體的食譜,而節點沒有存取許可、關聯失敗,且 Systems Manager 沒有報告合規資料。