逐步解說:建立執行Ansible教戰手冊的關聯 - AWS Systems Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

逐步解說:建立執行Ansible教戰手冊的關聯

您可以使用 AWS-ApplyAnsiblePlaybooks SSM State Manager 文件建立執行Ansible教戰手冊的關聯。 State Manager是的功能 AWS Systems Manager。本文件提供執行手冊的下列優點:

  • 支援執行複雜的手冊

  • Support 從GitHub亞馬遜簡單儲存服務 (Amazon S3) 下載教戰手冊

  • 支援壓縮的手冊結構

  • 增強型日誌

  • 能夠指定綁定多個手冊時,要執行哪個手冊

注意

Systems Manager 包含兩個 SSM 文件,可讓您建立執行Ansible教戰手冊的State Manager關聯:AWS-RunAnsiblePlaybook和. AWS-ApplyAnsiblePlaybooks AWS-RunAnsiblePlaybook 文件已棄用。它在 Systems Manager 中仍維持可用,以用於舊版用途。由於此處所述的增強功能,我們建議您使用 AWS-ApplyAnsiblePlaybooks 文件。

不支援執行Ansible教戰手冊的關聯。macOS

支援執行複雜的手冊

AWS-ApplyAnsiblePlaybooks 文件支援綁定的複雜手冊,因為它可在執行指定的主要手冊之前,將整個檔案結構複製到本機目錄。您可以提供 Zip 檔案或目錄結構的來源手冊。Zip 文件或目錄可以存儲在GitHub或 Amazon S3。

支援從 GitHub 下載手冊

AWS-ApplyAnsiblePlaybooks 文件會使用 aws:downloadContent 外掛程式來下載手冊檔案。檔案可以儲存GitHub在單一檔案中,或儲存為一組合的教戰手冊檔案。若要從中下載內容GitHub,請以 JSON 格式指定有關GitHub儲存庫的資訊。請見此處範例。

{ "owner":"TestUser", "repository":"GitHubTest", "path":"scripts/python/test-script", "getOptions":"branch:master", "tokenInfo":"{{ssm-secure:secure-string-token}}" }

支援從 Amazon Simple Storage Service (Amazon S3) 中下載手冊

您也可以在 Amazon S3 中以單一 .zip 檔案或目錄結構的形式存Ansible放和下載教戰手冊。若要從 Amazon Simple Storage Service (Amazon S3) 中下載內容,請指定檔案的路徑。以下是兩個範例。

範例 1:下載特定的手冊檔案

{ "path":"https://s3.amazonaws.com/doc-example-bucket/playbook.yml" }

範例 2:下載目錄的內容

{ "path":"https://s3.amazonaws.com/doc-example-bucket/ansible/webservers/" }
重要

如果您指定 Amazon S3,則受管節點上的 AWS Identity and Access Management (IAM) 執行個體設定檔必須使用AmazonS3ReadOnlyAccess政策來設定。如需詳細資訊,請參閱設定 Systems Manager 的執行個體許可

支援壓縮的手冊結構

AWS-ApplyAnsiblePlaybooks 文件允許您執行下載套件中的壓縮 .zip 檔。此文件會檢查下載的檔案是否包含 .zip 格式的壓縮檔案。如果找到 .zip,文件會自動解壓縮檔案,然後執行指定的自動化操作。Ansible

增強型日誌

AWS-ApplyAnsiblePlaybooks 文件包含選擇性參數,用於指定不同層級的日誌。指定 -v 表示低詳細資訊等級,-vv 或 -vvv 表示中詳細資訊等級,-vvvv 表示偵錯等級日誌。這些選項會直接對應至Ansible詳細資訊選項。

能夠指定綁定多個手冊時,要執行哪個手冊

AWS-ApplyAnsiblePlaybooks 文件包含必要參數,用於指定綁定多個手冊時要執行哪個手冊。此選項提供執行手冊的彈性,以支援不同的使用案例。

安裝的相依性

如果您為InstallDependencies參數指定 True,則 Systems Manager 會驗證節點是否已安裝下列相依性:

  • Ubuntu Server/Debian Server: APT-獲取 (Package 管理), Python 3,, 解壓縮 Ansible

  • Amazon: Ansible

  • 顏色:Python 3,Ansible, 解壓

如果找不到這些相依性中的一個或多個項目,則 Systems Manager 會自動安裝它們。

建立執行Ansible教戰手冊 (主控台) 的關聯

下列程序說明如何使用 Systems Manager 主控台建立使用AWS-ApplyAnsiblePlaybooks文件執行Ansible教戰手冊的State Manager關聯。

若要建立執行Ansible教戰手冊 (主控台) 的關聯
  1. 請在以下位置開啟 AWS Systems Manager 主控台。 https://console.aws.amazon.com/systems-manager/

  2. 在導覽窗格中,選擇 State Manager

    -或-

    如果 AWS Systems Manager 首頁先開啟,請選擇功能表圖示 ( 
    The menu icon
  ) 以開啟導覽窗格,然後選擇State Manager

  3. 選擇 State Manager,然後選擇 Create association (建立關聯)。

  4. 針對 Name (名稱),指定可協助您記住關聯用途的名稱。

  5. Document (文件) 清單中,請選擇 AWS-ApplyAnsiblePlaybooks

  6. 在「參數」區段中,對於「來源類型」,選擇GitHubS3

    GitHub

    如果您選擇 GitHub,請以下列格式輸入儲存庫資訊。

    { "owner":"user_name", "repository":"name", "path":"path_to_directory_or_playbook_to_download", "getOptions":"branch:branch_name", "tokenInfo":"{{(Optional)_token_information}}" }

    S3

    如果您選擇 S3,請輸入下列格式的路徑資訊。

    { "path":"https://s3.amazonaws.com/path_to_directory_or_playbook_to_download" }
  7. 針對 Install Dependencies (安裝相依性),選擇一個選項。

  8. (選用) 針對 Playbook File (手冊檔案),輸入檔案名稱。如果 Zip 檔包含手冊,則必須指定 Zip 檔的相對路徑。

  9. (選擇性) 針對「額外變數」,輸入您要Ansible在執行時間傳送State Manager至的變數。

  10. (選用) 針對 Check (檢查),選擇一個選項。

  11. (選用) 針對 Verbose (詳細資訊),選擇一個選項。

  12. 對於 Targets (目標),請選擇選項。如需使用目標的詳細資訊,請參閱關於 State Manager 關聯中的目標和速率控制

  13. Specify schedule (指定排程) 區段中,選擇 On schedule (按照排程)No schedule (無排程)。如果您選擇 On schedule (按照排程),則使用提供的按鈕來為關聯建立 Cron 或 Rate 排程。

  14. Advanced options (進階選項) 區段中,針對 Compliance severity (合規嚴重性),選擇關聯的嚴重性等級。合規報告會指出關聯狀態合規與否,以及您在這裡指示的嚴重性等級。如需詳細資訊,請參閱 關於State Manager關聯合規

  15. Rate control (速率控制) 區段中,設定在受管節點機群之間執行State Manager關聯的選項。如需使用速率控制的詳細資訊,請參閱 關於 State Manager 關聯中的目標和速率控制

    Concurrency (並行) 部分,選擇一個選項:

    • 選擇 targets (目標),輸入可以同時執行關聯的目標絕對數量。

    • 選擇 percentage (百分比),輸入可以同時執行關聯的目標集百分比。

    Error threshold (錯誤閾值) 部分,選擇一個選項:

    • 選擇 errors (錯誤),輸入 State Manager 停止在額外目標執行關聯之前允許的錯誤絕對數量。

    • 選擇 percentage (百分比),輸入 State Manager 停止在額外目標執行關聯之前允許的錯誤百分比。

  16. (選用) 針對 Output options (輸出選項),若要將命令輸出儲存至檔案,請選取 Enable writing output to S3 (啟用將輸出寫入 S3) 方塊。在方塊中輸入儲存貯體和字首 (資料夾) 名稱。

    注意

    授予能力以將資料寫入至 S3 儲存貯體的 S3 許可,會是指派給受管節點之執行個體設定檔的許可,而不是執行此任務之 IAM 使用者的許可。如需詳細資訊,請參閱設定適用於 Systems Manager 的執行個體許可或者建立適用於混合環境的 IAM 服務角色。此外,如果指定的 S3 儲存貯體位於不同的儲存貯體 AWS 帳戶,請確認與受管節點關聯的執行個體設定檔或 IAM 服務角色具有寫入該儲存貯體的必要許可。

  17. 選擇 Create Association (建立關聯)

注意

如果您使用標籤在一或多個目標節點上建立關聯,然後從節點移除標籤,則該節點將不再執行該關聯。系統會從 State Manager 文件中取消該節點的關聯。

建立執行Ansible教戰手冊 (CLI) 的關聯

下列程序說明如何使用 AWS Command Line Interface (AWS CLI) 建立使用AWS-ApplyAnsiblePlaybooks文件執行Ansible教戰手冊的State Manager關聯。

若要建立執行Ansible教戰手冊 (CLI) 的關聯
  1. 安裝和配置 AWS Command Line Interface (AWS CLI),如果你還沒有。

    如需相關資訊,請參閱安裝或更新最新版本的 AWS CLI

  2. 執行下列其中一個命令,藉由使用標籤鎖定節點,建立執行Ansible教戰手冊的關聯。將每個範例資源預留位置取代為您自己的資訊。命令(A)指定GitHub為源類型。命令 (B) 指定 Amazon Simple Storage Service (Amazon S3) 作為來源類型。

    (A) GitHub 資料來源

    Linux & macOS
    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \ --targets Key=tag:TagKey,Values=TagValue \ --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"owner_name\", \"repository\": \"name\", \"getOptions\": \"branch:master\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"],"TimeoutSeconds":["3600"]}' \ --association-name "name" \ --schedule-expression "cron_or_rate_expression"
    Windows
    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" ^ --targets Key=tag:TagKey,Values=TagValue ^ --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"owner_name\", \"repository\": \"name\", \"getOptions\": \"branch:master\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"], "TimeoutSeconds":["3600"]}' ^ --association-name "name" ^ --schedule-expression "cron_or_rate_expression"

    請見此處範例。

    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \ --targets "Key=tag:OS,Values=Linux" \ --parameters '{"SourceType":["GitHub"],"SourceInfo":["{\"owner\":\"ansibleDocumentTest\", \"repository\": \"Ansible\", \"getOptions\": \"branch:master\"}"],"InstallDependencies":["True"],"PlaybookFile":["hello-world-playbook.yml"],"ExtraVariables":["SSM=True"],"Check":["False"],"Verbose":["-v"]}' \ --association-name "AnsibleAssociation" \ --schedule-expression "cron(0 2 ? * SUN *)"

    (B) S3 來源

    Linux & macOS
    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \ --targets Key=tag:TagKey,Values=TagValue \ --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/path_to_Zip_file,_directory,_or_playbook_to_download\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"]}' \ --association-name "name" \ --schedule-expression "cron_or_rate_expression"
    Windows
    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" ^ --targets Key=tag:TagKey,Values=TagValue ^ --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/path_to_Zip_file,_directory,_or_playbook_to_download\"}"],"InstallDependencies":["True_or_False"],"PlaybookFile":["file_name.yml"],"ExtraVariables":["key/value_pairs_separated_by_a_space"],"Check":["True_or_False"],"Verbose":["-v,-vv,-vvv, or -vvvv"]}' ^ --association-name "name" ^ --schedule-expression "cron_or_rate_expression"

    請見此處範例。

    aws ssm create-association --name "AWS-ApplyAnsiblePlaybooks" \ --targets "Key=tag:OS,Values=Linux" \ --parameters '{"SourceType":["S3"],"SourceInfo":["{\"path\":\"https://s3.amazonaws.com/DOC-EXAMPLE-BUCKET/playbook.yml\"}"],"InstallDependencies":["True"],"PlaybookFile":["playbook.yml"],"ExtraVariables":["SSM=True"],"Check":["False"],"Verbose":["-v"]}' \ --association-name "AnsibleAssociation" \ --schedule-expression "cron(0 2 ? * SUN *)"
    注意

    State Manager 關聯不支援所有 Cron 和 Rate 表達式。如需針對關聯建立 Cron 和 Rate 運算式的詳細資訊,請參閱參考:Systems Manager 的 Cron 和 Rate 運算式

    系統會嘗試在節點上建立關聯,並立即套用狀態。

  3. 執行以下命令來檢視您剛剛所建立的關聯的更新狀態。

    aws ssm describe-association --association-id "ID"