從 AWS Step Functions 同步執行 AWS Systems Manager Automation 任務 - AWS 方案指引

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

從 AWS Step Functions 同步執行 AWS Systems Manager Automation 任務

創建者埃利·埃爾庫里(AWS)

代碼存儲庫:amazon-stepfunctions-ssm-waitfortasktoken

環境:生產

技術:無伺服器 DevOps;終端使用者運算;營運

AWS 服務:AWS Step Functions;AWS Systems Manager

Summary

此模式說明如何 AWS Step Functions 與整合 AWS Systems Manager。它會使用 AWS SDK 服務整合,以狀態機器工作流程的工作權杖呼叫 Systems Manager startAutomationExecutionAPI,並暫停直到權杖傳回成功或失敗呼叫為止。為了示範整合,此模式會在或文件周圍實作自動化文件 (runbook) 包裝函式,並使.waitForTaskToken用同步呼叫AWS-RunShellScriptAWS-RunShellScriptAWS-RunPowerShellScriptAWS-RunPowerShellScript如需有關 Step Functions 中 AWS SDK 服務整合的詳細資訊,請參閱開AWS Step Functions 發人員指南

Step Functions 是一種低程式碼的視覺化工作流程服務,您可以使用服務來建置分散式應用程式、自動化 IT 和商 AWS 務程序,以及建置資料和機器學習管道。工作流程可管理失敗、重試、平行化、服務整合和可觀察性,因此您可以專注於更高價值的商務邏輯。

具備自動化功能,可簡化常見的 AWS Systems Manager維護、部署和修復任務, AWS 服務 例如亞馬遜彈性運算雲端 (Amazon EC2)、Amazon Relational Database Service 服務 (Amazon RDS)、Amazon Redshift 和亞馬遜簡單儲存服務 (Amazon S3)。自動化可讓您精細控制自動化作業的並行性。例如,您可以指定要同時鎖定多少資源,以及在停止自動化操作之前可能會發生多少錯誤。

如需實作詳細資訊,包括 runbook 步驟、參數和範例,請參閱其他資訊一節。

先決條件和限制

先決條件

  • 活躍 AWS 帳戶

  • AWS Identity and Access Management (IAM) 存取 Step Functions 和 Systems Manager 的許可

  • 在執行個體上裝了系統管理員代理程式 (SSM 代理程式) 的 EC2 執行個體

  • Systems Manager 的 IAM 執行個體設定檔,附加至您計劃執行工作流程簿的執行個體

  • 具有下列 IAM 許可 (遵循最低權限原則) 的 Step Functions 角色:

{ "Effect": "Allow", "Action": "ssm:StartAutomationExecution", "Resource": "*" }

產品版本

  • SSM 文件結構描述版本 0.3 或更新版本

  • SSM 代理程式版本 2.3.672.0 或更新版本

架構

目標技術堆疊

  • AWS Step Functions

  • AWS Systems Manager  自動化

目標架構

從步驟功能同步執行 Systems Manager 自動化工作的架構

自動化和規模

工具

AWS 服務

  • AWS CloudFormation協助您設定 AWS 資源、快速且一致地佈建資源,以及跨區域的整個生命週期進 AWS 帳戶 行管理。

  • AWS Identity and Access Management (IAM) 透過控制經驗證和授權使用 AWS 資源的人員,協助您安全地管理對資源的存取。

  • AWS Step Functions是一項無伺服器協調服務,可協助您結合 AWS Lambda 功能與其他功能, AWS 服務 以建置關鍵業務應用程式。

  • AWS Systems Manager協助您管理在 AWS 雲端. 它可簡化應用程式和資源管理、縮短偵測和解決作業問題的時間,並協助您大規模安全地管理 AWS 資源。

Code

此模式的代碼在 GitHub Step Functions 和 Systems Manager 實現存儲庫中可用。 

史诗

任務描述所需技能

下載 CloudFormation 範本。

從 GitHub 存放庫的資cloudformation 料夾下載ssm-automation-documents.cfn.json範本。

AWS DevOps

創建手冊。

登入 AWS Management Console、開啟AWS CloudFormation 主控台,然後部署範本。如需部署 CloudFormation 範本的詳細資訊,請參閱 CloudFormation 說明文件中的在 AWS CloudFormation 主控台上建立堆疊。 

該 CloudFormation 模板部署了三種資源:

  • SfnRunCommandByInstanceIds— Runbook,可讓您執行AWS-RunShellScript或使用執AWS-RunPowerShellScript行個體 ID。

  • SfnRunCommandByTargets— Runbook,讓你運行AWS-RunShellScriptAWS-RunPowerShellScript通過使用目標.

  • SSMSyncRole— 由手冊承擔的 IAM 角色。

AWS DevOps
任務描述所需技能

創建一個測試狀態機器。

按照開AWS Step Functions 發人員指南中的說明創建和運行狀態機器。對於定義,請使用下面的代碼。請務必使用您帳戶中啟用系統管理員之有效執行個體的 ID 來更新該InstanceIds值。

{ "Comment": "A description of my state machine", "StartAt": "StartAutomationWaitForCallBack", "States": { "StartAutomationWaitForCallBack": { "Type": "Task", "Resource": "arn:aws:states:::aws-sdk:ssm:startAutomationExecution.waitForTaskToken", "Parameters": { "DocumentName": "SfnRunCommandByInstanceIds", "Parameters": { "InstanceIds": [ "i-1234567890abcdef0" ], "taskToken.$": "States.Array($$.Task.Token)", "workingDirectory": [ "/home/ssm-user/" ], "Commands": [ "echo \"This is a test running automation waitForTaskToken\" >> automation.log", "sleep 100" ], "executionTimeout": [ "10800" ], "deliveryTimeout": [ "30" ], "shell": [ "Shell" ] } }, "End": true } } }

此代碼調用 runbook 來運行演示waitForTaskToken調用 Systems Manager 自動化兩個命令。

shell參數值 (ShellPowerShell) 決定自動化文件是否執行AWS-RunShellScriptAWS-RunPowerShellScript

工作會將「這是執行自動化 waitForTask Token 的測試」寫入/home/ssm-user/automation.log檔案中,然後在回應工作權杖之前休眠 100 秒,並釋放工作流程中的下一個工作。

如果您想要呼叫 SfnRunCommandByTargets runbook,請使用下列命令取代先前程式碼的Parameters區段:

"Parameters": { "Targets": [ { "Key": "InstanceIds", "Values": [ "i-02573cafcfEXAMPLE", "i-0471e04240EXAMPLE" ] } ],
AWS DevOps

更新狀態機器的 IAM 角色。

上一個步驟會自動為狀態機器建立專用的 IAM 角色。但是,它不會授予調用 runbook 的權限。透過新增下列權限來更新角色:

{ "Effect": "Allow", "Action": "ssm:StartAutomationExecution", "Resource": "*" }
AWS DevOps

驗證同步呼叫。

執行狀態機,以驗證 Step Functions 和 Systems Manager 自動化之間的同步呼叫。 

如需範例輸出,請參閱其他資訊一節。 

AWS DevOps

相關資源

其他資訊

實施細節

此 CloudFormation 模式提供了部署兩個 Systems Manager 手冊的範本:

  • SfnRunCommandByInstanceIds使用執行個體 ID 執行AWS-RunShellScriptAWS-RunPowerShellScript命令。

  • SfnRunCommandByTargets使用目標執行AWS-RunShellScriptAWS-RunPowerShellScript命令。

每個 runbook 實現四個步驟來實現使用步驟函數中的.waitForTaskToken選項時,同步調用。

Step (步驟)

Action

Description

1

Branch

檢查shell參數值 (ShellPowerShell),以決定是AWS-RunShellScript針對 Linux 執行還是針AWS-RunPowerShellScript對視窗執行。

2

RunCommand_ShellRunCommand_PowerShell

接受數個輸入並執行RunShellScriptRunPowerShellScript指令。如需詳細資訊,請檢查 Systems Manager 主控台上的RunCommand_ShellRunCommand_PowerShell自動化文件的 [詳細資料] 索引標籤。

3

SendTaskFailure

中止或取消步驟 2 時執行。它調用 Step Functions 數 send_task_failure API,它接受三個參數作為輸入:狀態機器傳遞的令牌,失敗錯誤以及失敗原因的描述。

4

SendTaskSuccess

當步驟 2 成功時執行。它調用 Step Functions send_task_success API,它接受由狀態機作為輸入傳遞的令牌。

手冊參數

SfnRunCommandByInstanceIds手冊:

參數名稱

類型

選擇性或必要

Description

shell

字串

必要

用來決定是否要AWS-RunShellScript針對 Linux 執行或視窗執行的執AWS-RunPowerShellScript行個體殼層。

deliveryTimeout

Integer

選用

等待命令傳遞至執行個體上 SSM 代理程式的時間 (秒)。此參數的最小值為 30 (0.5 分鐘),最大值為 2592000 (720 小時)。

executionTimeout

字串

選用

指令在被視為失敗之前完成的時間 (以秒為單位)。預設值為 3600 (1 小時)。最大值為一七二八百(48 小時)。

workingDirectory

字串

選用

在您的執行個體上的工作目錄路徑。

Commands

StringList

必要

要執行的殼層指令碼或命令。

InstanceIds

StringList

必要

您要在其中執行命令的執行個體 ID。

taskToken

字串

必要

用於回呼回應的工作 Token。

SfnRunCommandByTargets手冊:

名稱

類型

選擇性或必要

Description

shell

字串

必要

用來決定是否要AWS-RunShellScript針對 Linux 執行或視窗執行的執AWS-RunPowerShellScript行個體殼層。

deliveryTimeout

Integer

選用

等待命令傳遞至執行個體上 SSM 代理程式的時間 (秒)。此參數的最小值為 30 (0.5 分鐘),最大值為 2592000 (720 小時)。

executionTimeout

Integer

選用

指令在被視為失敗之前完成的時間 (以秒為單位)。預設值為 3600 (1 小時)。最大值為一七二八百(48 小時)。

workingDirectory

字串

選用

在您的執行個體上的工作目錄路徑。

Commands

StringList

必要

要執行的殼層指令碼或命令。

Targets

MapList

必要

搜尋準則陣列,可使用您指定的索引鍵值配對來識別執行個體。例如:[{"Key":"InstanceIds","Values":["i-02573cafcfEXAMPLE","i-0471e04240EXAMPLE"]}]

taskToken

字串

必要

用於回呼回應的工作 Token。

範例輸出

下表提供了從 step 函數的示例輸出。它顯示步驟 5(TaskSubmitted)和步驟 6(TaskSucceeded)之間的總運行時間超過 100 秒。這表明 step 函數在移動到工作流程中的下一個任務之前等待sleep 100命令完成。

ID

類型

Step (步驟)

Resource

經過時間 (毫秒)

Timestamp

1

ExecutionStarted

-

0

二 ○ 二二二年三月十一日下午五十五時三十三分

2

TaskStateEntered

StartAutomationWaitForCallBack

-

40

二 ○ 二二二年三月十一日下午五十五時三十四分

3

TaskScheduled

StartAutomationWaitForCallBack

-

40

二 ○ 二二二年三月十一日下午五十五時三十四分

4

TaskStarted

StartAutomationWaitForCallBack

-

154

二 ○ 二二二年三月十一日下午五時五十四分

5

TaskSubmitted

StartAutomationWaitForCallBack

-

657

二 ○ 二二二年三月十一日下午五時五十分

6

TaskSucceeded

StartAutomationWaitForCallBack

-

103835

二 ○ 二二二年三月十一日下午五時二十八分

7

TaskStateExited

StartAutomationWaitForCallBack

-

103860

二 ○ 二二二年三月十一日下午五時二十六分

8

ExecutionSucceeded

-

103897

二 ○ 二二二年三月十一日下午五時二十分