本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
逐步解說:建立執行Chef方法的關聯
您可以使用 AWS-ApplyChefRecipes
SSM 文State Manager件建立執行Chef方法的關聯。 State Manager是的功能 AWS Systems Manager。您可以使用 AWS-ApplyChefRecipes
SSM 文件,將 Linux 型 Systems Manager 受管節點設定為目標。本文件針對執行Chef配方提供下列優點:
-
支援多個發行版本 Chef (Chef11 到 Chef 18)。
-
在目標節點上自動安裝Chef用戶端軟體。
-
在目標節點上選用地執行 Systems Manager 合規檢查,並將合規檢查的結果存放在 Amazon Simple Storage Service (Amazon S3) 儲存貯體中。
-
在單一文件執行中執行多個食譜和配方。
-
選用地在
why-run
模式下執行配方,以顯示哪些配方會對目標節點進行變更,而無須實際進行變更。 -
選用地將自訂 JSON 屬性套用到
chef-client
執行。 -
選擇性地從存放在指定位置的來源檔案套用自訂 JSON 屬性。
您可以使用 Git、GitHub、HTTP 或 Amazon S3 儲存貯體做為您在AWS-ApplyChefRecipes
文件中指定的食Chef譜和食譜的下載來源。
注意
或上不支援執行Chef方法的關macOS聯Windows Server。
事前準備:設定您的關聯、儲存庫和逐步指南
在創建AWS-ApplyChefRecipes
文檔之前,請準備Chef食譜和食譜存儲庫。如果您還沒有要使用的Chef食譜,則可以使用為您準備的測試HelloWorld
食譜入門。 AWS AWS-ApplyChefRecipes
文件根據預設已指向此食譜。您的食譜應根據以下目錄結構進行相似的設定。在下面的例子中,jenkins
和nginx
是在Chef網站Chef Supermarket
儘管 AWS 無法在Chef SupermarketAWS-ApplyChefRecipes
文檔。以下是在您測試社群技術指南時應確定的條件範例:
-
技術指南應支援您設為目標的 Systems Manager 受管節點的 Linux 型作業系統。
-
食譜應該對您使用的Chef客戶端版本(Chef11 到 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
重要
建立執行Chef方法的State Manager關聯之前,請注意執行文件會在 Systems Manager 管理的節點上安裝Chef用戶端軟體,除非您將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合規。
將文件執行記錄於日誌
當您使用State Manager關聯來執行 Systems Manager 文件 (SSM 文件) 時,您可以設定關聯以選擇文件執行的輸出,也可以將輸出傳送到 Amazon S3 或 Amazon CloudWatch 日誌 (日CloudWatch 誌)。若要在關聯完成執行時輕鬆進行疑難排解,請確認關聯已設定為將命令輸出寫入 Amazon S3 儲存貯體或 CloudWatch 日誌。如需詳細資訊,請參閱 在 Systems Manager 中使用關聯。
執行配方時將 JSON 屬性套用至目標
您可以為用Chef戶端指定 JSON 屬性,以便在關聯執行期間套用至目標節點。設定關聯時,您可以提供原始 JSON 或提供存放在 Amazon S3 中之 JSON 檔案的路徑。
當您想要自訂配方的執行方式而不修改配方本身時,您可以使用 JSON 屬性,例如:
-
覆寫少量的屬性
使用自訂 JSON 以避免為適應細微差異而必須維護多個版本的配方。
-
提供變數值
使用自訂 JSON 來指定可能變更的值 run-to-run。例如,如果您的Chef食譜設定了接受付款的第三方應用程式,您可以使用自訂 JSON 來指定付款端點 URL。
在原始 JSON 中指定屬性
以下是您可以用來為Chef方案指定自訂 JSON 屬性的格式範例。
{"filepath":"
/tmp/example.txt
", "content":"Hello, World!
"}
指定 JSON 檔案的路徑
以下是您可以用來為Chef方案指定自訂 JSON 屬性路徑的格式範例。
{"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,請以 JSON 格式指定有關GitHub儲存庫的資訊,如下列範例所示。將每個 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) 作為技術指南來源
您也可以在 Amazon S3 中以單一.zip
或tar.gz
檔案或目錄結構的形式存放和下載Chef食譜。若要從 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 主控台建立使用AWS-ApplyChefRecipes
文件執行Chef食譜的State Manager關聯。
請在以下位置開啟 AWS Systems Manager 主控台。
https://console.aws.amazon.com/systems-manager/ 在導覽窗格中,選擇 State Manager。
-或-
如果 AWS Systems Manager 首頁先開啟,請選擇功能表圖示 ( ) 以開啟導覽窗格,然後選擇State Manager。
-
選擇 State Manager,然後選擇 Create association (建立關聯)。
-
針對 Name (名稱),輸入可協助您記住關聯用途的名稱。
-
在 Document (文件) 清單中,請選擇
AWS-ApplyChefRecipes
。 -
在參數中,對於來源類型,選取 Git GitHub、HTTP 或 S3。
-
對於來源資訊,請使用您在步驟 6 中選取的來源類型對應的適當格式,輸入食譜來源資訊。如需詳細資訊,請參閱下列主題:
-
在 Run list (執行清單) 中,以以下格式列出您希望執行的配方,並以逗號分隔每個配方,如下所示。請不要在逗號後方包含空格。將每個
example-resource-placeholder
替換成您自己的資訊。recipe[
cookbook-name1
::recipe-name
],recipe[cookbook-name2
::recipe-name
] -
(選擇性) 指定您希望Chef用戶端傳遞至目標節點的自訂 JSON 屬性。
-
在 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執行的相關資訊,包括資源組態和合規結果。
-
在 Rate control (速率控制) 區段中,設定在受管節點機群之間執行State Manager關聯的選項。如需使用速率控制的詳細資訊,請參閱 關於 State Manager 關聯中的目標和速率控制。
在 Concurrency (並行) 中,選擇一個選項:
-
選擇 targets (目標),輸入可以同時執行關聯的目標絕對數量。
-
選擇 percentage (百分比),輸入可以同時執行關聯的目標集百分比。
在 Error Threshold (錯誤閾值) 中,選擇一個選項:
-
選擇 errors (錯誤),輸入 State Manager 停止在額外目標執行關聯之前允許的錯誤絕對數量。
-
選擇 percentage (百分比),輸入 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) 建立使用AWS-ApplyChefRecipes
文件執行 Chef 食譜的State Manager關聯。
安裝和配置 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 會在您執行AWS-ApplyChefRecipes
文件時指定的 Amazon S3 合規報告儲存貯體值中擷取有關Chef受管資源的合規資訊。搜尋 S3 儲存貯體中Chef資源失敗的相關資訊可能非常耗時。您可以改為在 Systems Manager Compliance (合規) 頁面中檢視此資訊。
Systems Manager 符合性掃描會收集受管理節點上最近Chef執行時所建立或檢查的資源相關資訊。這些資源可包含檔案、目錄、systemd
服務、yum
套件、範本化檔案、gem
套件,以及相依食譜等。
合規資源摘要區段顯示失敗的資源計數。在下列範例中,ComplianceType為 Cu stom:,Chef且一個資源不相容。
注意
Custom:Chef
是文AWS-ApplyChefRecipes
件中的預設ComplianceType值。這個值是可自訂的。
[資源的詳細資料概觀] 區段會顯示不符合規範的 AWS 資源相關資訊。本節也包括執行符合性的Chef資源類型、問題嚴重性、符合性狀態,以及適用時的詳細資訊連結。
View output (檢視輸出) 會顯示詳細狀態的最後 4,000 個字元。Systems Manager 會使用例外狀況做為第一個元素開始,尋找詳細訊息,並在到達 4,000 個字元配額之前顯示它們。這個程序會顯示拋出例外狀況之前的輸出日誌訊息,也就是與故障診斷最相關的訊息。
如需如何檢視合規資訊的相關資訊,請參閱 AWS Systems Manager合規。
關聯失敗影響合規報告
若State Manager關聯失敗,則不會報告任何合規資料。例如,如果 Systems Manager 嘗試從 S3 儲存貯體下載節點沒有存取權限的Chef食譜,則關聯會失敗,並且 Systems Manager 不會報告合規資料。