搭配 AWSFIS 使用 Systems Manager SSM 文件 - AWSFault Injection Service

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

搭配 AWSFIS 使用 Systems Manager SSM 文件

AWSFIS 透過 AWS Systems ManagerSSM Agent 和 AWSFIS 動作 支援自訂錯誤類型aws:ssm:send-command。可用於建立常見錯誤注入動作的預先設定 Systems Manager SSM 文件 (SSM 文件),可作為開頭為 AWSFIS- 字首的公有AWS文件。

SSM Agent 是可在 Amazon EC2 執行個體、內部部署伺服器或虛擬機器 (VM) 上安裝和設定的 Amazon 軟體。 VMs 這可讓 Systems Manager 管理這些資源。代理程式會處理來自 Systems Manager 的請求,然後依照請求中的指定執行它們。您可以包含自己的 SSM 文件來注入自訂錯誤,或參考其中一個公有 Amazon 擁有的文件。

要求

對於需要 SSM Agent 在目標上執行動作的動作,您必須確保下列事項:

使用 aws:ssm:send-command動作

SSM 文件定義 Systems Manager 在受管執行個體上執行的動作。Systems Manager 包含許多預先設定的文件,您也可以建立自己的文件。如需建立自己的 SSM 文件的詳細資訊,請參閱AWS Systems Manager《 使用者指南》中的建立 Systems Manager 文件。如需 SSM 文件的一般詳細資訊,請參閱AWS Systems Manager《 使用者指南》中的AWS Systems Manager文件

AWSFIS 提供預先設定的 SSM 文件。您可以在 AWS Systems Manager主控台的文件下檢視預先設定的 SSM 文件:https://https://console.aws.amazon.com/systems-manager/documents。您也可以在 AWSFIS 主控台中選擇預先設定的文件。如需詳細資訊,請參閱預先設定的 AWSFIS SSM 文件

若要在 AWSFIS 實驗中使用 SSM 文件,您可以使用 aws:ssm:send-command動作。此動作會在您的目標執行個體上擷取並執行指定的 SSM 文件。

當您在實驗範本中使用 aws:ssm:send-command動作時,您必須為 動作指定其他參數,包括下列項目:

  • documentArn - 必要。SSM 文件的 Amazon Resource Name (ARN)。

  • documentParameters – 條件式。SSM 文件接受的必要和選用參數。格式是 JSON 物件,其索引鍵為字串,值為字串或字串陣列。

  • documentVersion - 選用。要執行的 SSM 文件版本。

您可以使用 Systems Manager 主控台或命令列來檢視 SSM 文件的資訊 (包括文件的參數)。

使用主控台檢視 SSM 文件的相關資訊
  1. 在 https://https://console.aws.amazon.com/systems-manager/ 開啟 AWS Systems Manager主控台。

  2. 在導覽窗格中,選擇 Documents (文件)

  3. 選取文件,然後選擇詳細資訊索引標籤。

使用命令列檢視 SSM 文件的相關資訊

使用 SSM describe-document 命令。

進一步了解動作狀態

SSM 動作狀態由 SSM 命令狀態決定。

預先設定的 AWSFIS SSM 文件

您可以在實驗範本中使用預先設定的 AWSFIS SSM 文件搭配 aws:ssm:send-command動作。

要求
  • AWSFIS 提供的預先設定 SSM 文件僅支援下列作業系統:

    • Amazon Linux 2023、Amazon Linux 2

    • Ubuntu

    • RHEL 8、9

    • CentOS 9

  • AWSFIS 提供的預先設定 SSM 文件僅支援 EC2 執行個體。其他類型的受管節點不支援這些節點,例如內部部署伺服器。

若要在 ECS 任務的實驗中使用這些 SSM 文件,請使用對應的 Amazon ECS 動作。例如, aws:ecs:task-cpu-stress動作會使用 AWSFIS-Run-CPU-Stress 文件。

AWSFIS SSM 文件中動作持續時間和 DurationSeconds 之間的差異

有些 SSM 文件會限制自己的執行時間,例如,某些預先設定的 AWSFIS SSM 文件會使用 DurationSeconds 參數。因此,您需要在 AWSFIS 動作定義中指定兩個獨立的持續時間:

  • Action duration:對於具有單一動作的實驗,動作持續時間等同於實驗持續時間。使用多個動作時,實驗持續時間取決於個別動作持續時間及其執行順序。AWSFIS 會監控每個動作,直到其動作持續時間經過為止。

  • 文件參數 DurationSeconds:SSM 文件將執行的持續時間,以秒為單位指定。

您可以為兩種持續時間類型選擇不同的值:

  • Action duration exceeds DurationSeconds:SSM 文件執行會在動作完成之前完成。AWSFIS 會等到動作持續時間經過之後,再啟動後續動作。

  • Action duration is shorter than DurationSeconds:SSM 文件會在動作完成後繼續執行。如果 SSM 文件執行仍在進行中,且動作持續時間已過,則動作狀態會設為已完成。AWSFIS 只會監控執行,直到動作持續時間過了為止。

請注意,某些 SSM 文件具有可變持續時間。例如AWS,FIS SSM 文件可以選擇安裝先決條件,這可以將整體執行持續時間延長到超過指定的 DurationSeconds 參數。因此,如果您將動作持續時間和 DurationSeconds 設定為相同的值,SSM 指令碼的執行時間可能會超過動作持續時間。

AWSFIS-Run-CPU-Stress

使用 stress-ng工具在執行個體上執行 CPU 壓力。使用 AWSFIS-Run-CPU-Stress SSM 文件。

動作類型 (僅限主控台)

aws:ssm:send-command/AWSFIS-Run-CPU-Stress

ARN

arn:aws:ssm:region::document/AWSFIS-Run-CPU-Stress

文件參數
  • DurationSeconds - 必要。CPU 壓力測試的持續時間,以秒為單位。

  • CPU - 選用。要使用的 CPU 壓力器數量。預設值為 0,它使用所有 CPU 壓力器。

  • LoadPercent - 選用。目標 CPU 負載百分比,從 0 (無負載) 到 100 (完全負載)。預設為 100。

  • InstallDependencies - 選用。如果值為 True,則 Systems Manager 會在目標執行個體上安裝所需的相依性,如果這些執行個體尚未安裝。預設值為 True。相依性為 stress-ng

以下是您可以在 主控台中輸入的字串範例。

{"DurationSeconds":"60", "InstallDependencies":"True"}

AWSFIS-Run-Disk-Fill

配置執行個體根磁碟區上的磁碟空間,以模擬磁碟完全故障。使用 AWSFIS-Run-Disk-Fill SSM 文件。

如果注入此故障的實驗停止,無論是手動還是透過停止條件,AWSFIS 會取消執行中的 SSM 文件來嘗試轉返。不過,如果磁碟已滿 100%,可能是由於故障或故障加上應用程式活動,Systems Manager 可能無法完成取消操作。因此,如果您可能需要停止實驗,請確保磁碟不會 100% 已滿。

動作類型 (僅限主控台)

aws:ssm:send-command/AWSFIS-Run-Disk-Fill

ARN

arn:aws:ssm:region::document/AWSFIS-Run-Disk-Fill

文件參數
  • DurationSeconds - 必要。磁碟填充測試的持續時間,以秒為單位。

  • Percent - 選用。在磁碟填充測試期間要配置的磁碟百分比。預設值為 95%。

  • InstallDependencies - 選用。如果值為 True,則 Systems Manager 會在目標執行個體上安裝所需的相依性,如果這些執行個體尚未安裝。預設值為 True。相依性為 atdkmodfallocate

以下是您可以在 主控台中輸入的字串範例。

{"DurationSeconds":"60", "InstallDependencies":"True"}

AWSFIS-Run-IO-Stress

使用 stress-ng工具在執行個體上執行 IO 應力。使用 AWSFIS-Run-IO-Stress SSM 文件。

動作類型 (僅限主控台)

aws:ssm:send-command/AWSFIS-Run-IO-Stress

ARN

arn:aws:ssm:region::document/AWSFIS-Run-IO-Stress

文件參數
  • DurationSeconds - 必要。IO 壓力測試的持續時間,以秒為單位。

  • Workers - 選用。執行循序、隨機和記憶體映射讀取/寫入操作、強制同步和快取捨棄的混合工作者數量。多個子程序會對相同的檔案執行不同的 I/O 操作。預設為 1。

  • Percent - 選用。檔案系統上要在 IO 壓力測試期間使用的可用空間百分比。預設值為 80%。

  • InstallDependencies - 選用。如果值為 True,則 Systems Manager 會在目標執行個體上安裝所需的相依性,如果這些執行個體尚未安裝。預設值為 True。相依性為 stress-ng

以下是您可以在 主控台中輸入的字串範例。

{"Workers":"1", "Percent":"80", "DurationSeconds":"60", "InstallDependencies":"True"}

AWSFIS-Run-Kill-Process

使用 killall命令停止執行個體中指定的程序。使用 AWSFIS-Run-Kill-Process SSM 文件。

動作類型 (僅限主控台)

aws:ssm:send-command/AWSFIS-Run-Kill-Process

ARN

arn:aws:ssm:region::document/AWSFIS-Run-Kill-Process

文件參數
  • ProcessName - 必要。要停止的程序名稱。

  • Signal - 選用。隨 命令一起傳送的訊號。可能的值為 SIGTERM(接收者可以選擇忽略) 和 SIGKILL(無法忽略)。預設值為 SIGTERM

  • InstallDependencies – 選用。如果值為 True,則 Systems Manager 會在目標執行個體上安裝所需的相依性,如果這些執行個體尚未安裝。預設值為 True。相依性為 killall

以下是您可以在 主控台中輸入的字串範例。

{"ProcessName":"myapplication", "Signal":"SIGTERM"}

AWSFIS-Run-Memory-Stress

使用 stress-ng工具在執行個體上執行記憶體壓力。使用 AWSFIS-Run-Memory-Stress SSM 文件。

動作類型 (僅限主控台)

aws:ssm:send-command/AWSFIS-Run-Memory-Stress

ARN

arn:aws:ssm:region::document/AWSFIS-Run-Memory-Stress

文件參數
  • DurationSeconds - 必要。記憶體壓力測試的持續時間,以秒為單位。

  • Workers - 選用。虛擬記憶體壓力源的數量。預設為 1。

  • Percent - 必要。在記憶體壓力測試期間要使用的虛擬記憶體百分比。

  • InstallDependencies - 選用。如果值為 True,則 Systems Manager 會在目標執行個體上安裝所需的相依性,如果這些執行個體尚未安裝。預設值為 True。相依性為 stress-ng

以下是您可以在 主控台中輸入的字串範例。

{"Percent":"80", "DurationSeconds":"60", "InstallDependencies":"True"}

AWSFIS-Run-Network-Blackhole-Port

使用 iptables工具捨棄通訊協定和連接埠的傳入或傳出流量。使用 AWSFIS-Run-Network-Blackhole-Port SSM 文件。

動作類型 (僅限主控台)

aws:ssm:send-command/AWSFIS-Run-Network-Blackhole-Port

ARN

arn:aws:ssm:region::document/AWSFIS-Run-Network-Blackhole-Port

文件參數
  • Protocol - 必要。通訊協定。可能的值為 tcpudp

  • Port - 必要。連接埠號碼。

  • TrafficType - 選用。流量類型。可能的值為 ingressegress。預設值為 ingress

  • DurationSeconds - 必要。網路黑洞測試的持續時間,以秒為單位。

  • InstallDependencies - 選用。如果值為 True,則 Systems Manager 會在目標執行個體上安裝所需的相依性,如果這些執行個體尚未安裝。預設值為 True。相依性為 atdlsofdigiptables

以下是您可以在 主控台中輸入的字串範例。

{"Protocol":"tcp", "Port":"8080", "TrafficType":"egress", "DurationSeconds":"60", "InstallDependencies":"True"}

AWSFIS-Run-Network-Latency

使用 tc工具將延遲新增至網路界面。使用 AWSFIS-Run-Network-Latency SSM 文件。

動作類型 (僅限主控台)

aws:ssm:send-command/AWSFIS-Run-Network-Latency

ARN

arn:aws:ssm:region::document/AWSFIS-Run-Network-Latency

文件參數
  • Interface - 選用。網路介面。預設值為 eth0

  • DelayMilliseconds – 選用。延遲,以毫秒為單位。預設值為 200。

  • DurationSeconds - 必要。網路延遲測試的持續時間,以秒為單位。

  • InstallDependencies - 選用。如果值為 True,則 Systems Manager 會在目標執行個體上安裝所需的相依性,如果這些執行個體尚未安裝。預設值為 True。相依性為 atddigtc

以下是您可以在 主控台中輸入的字串範例。

{"DelayMilliseconds":"200", "Interface":"eth0", "DurationSeconds":"60", "InstallDependencies":"True"}

AWSFIS-Run-Network-Latency-Sources

針對進出特定來源的流量,使用 tc工具將延遲和抖動新增至網路界面。使用 AWSFIS-Run-Network-Latency-Sources SSM 文件。

使用 FlowsPercent 參數在一定百分比的連線上新增延遲。

動作類型 (僅限主控台)

aws:ssm:send-command/AWSFIS-Run-Network-Latency-Sources

ARN

arn:aws:ssm:region::document/AWSFIS-Run-Network-Latency-Sources

文件參數
  • Interface - 選用。網路界面,以逗號分隔。支援 ALL 和 DEFAULT 值。預設值為 DEFAULT,其將鎖定作業系統的主要網路介面。

  • DelayMilliseconds - 選用。延遲,以毫秒為單位。預設值為 200。

  • JitterMilliseconds - 選用。抖動,以毫秒為單位。預設為 10。

  • FlowsPercent - 選用。將受到動作影響的網路流程百分比。預設 為 100%。

  • Sources - 必要。來源,以逗號分隔,不含空格。可能的值為:IPv4 地址、IPv4 CIDR 區塊、網域名稱、AZ 名稱 (us-east-1a)、AZ ID (use1-az1)DYNAMODB、ALL、 和 S3。如果您指定 DYNAMODBS3,這僅適用於目前區域中的區域端點。

  • TrafficType - 選用。流量類型。可能的值為 ingressegress。預設值為 ingress

  • DurationSeconds - 必要。網路延遲測試的持續時間,以秒為單位。

  • InstallDependencies - 選用。如果值為 True,則 Systems Manager 會在目標執行個體上安裝所需的相依性,如果這些執行個體尚未安裝。預設值為 True。相依性為 atddiglsofjqtc

使用本文件時,實驗角色需要下列許可:

  • ec2:DescribeInstances

  • ec2:DescribeSubnets

以下是您可以在 主控台中輸入的字串範例。

{"DelayMilliseconds":"200", "JitterMilliseconds":"15", "Sources":"S3,www.example.com,72.21.198.67", "Interface":"eth0", "TrafficType":"egress", "DurationSeconds":"60", "InstallDependencies":"True"}

AWSFIS-Run-Network-Packet-Loss

使用 tc工具將封包遺失新增至網路介面。使用 AWSFIS-Run-Network-Packet-Loss SSM 文件。

動作類型 (僅限主控台)

aws:ssm:send-command/AWSFIS-Run-Network-Packet-Loss

ARN

arn:aws:ssm:region::document/AWSFIS-Run-Network-Packet-Loss

文件參數
  • Interface - 選用。網路介面。預設值為 eth0

  • LossPercent – 選用。封包遺失的百分比。預設值為 7%。

  • DurationSeconds - 必要。網路封包遺失測試的持續時間,以秒為單位。

  • InstallDependencies - 選用。如果值為 True,Systems Manager 會在目標執行個體上安裝必要的相依性。預設值為 True。相依性為 atddiglsoftc

以下是您可以在 主控台中輸入的字串範例。

{"LossPercent":"15", "Interface":"eth0", "DurationSeconds":"60", "InstallDependencies":"True"}

AWSFIS-Run-Network-Packet-Loss-Sources

針對進出特定來源的流量,使用 tc工具將封包遺失新增至網路介面。使用 AWSFIS-Run-Network-Packet-Loss-Sources SSM 文件。

使用 FlowsPercent 參數在一定百分比的連線上注入封包遺失。

動作類型 (僅限主控台)

aws:ssm:send-command/AWSFIS-Run-Network-Packet-Loss-Sources

ARN

arn:aws:ssm:region::document/AWSFIS-Run-Network-Packet-Loss-Sources

文件參數
  • Interface - 選用。網路界面,以逗號分隔。支援 ALL 和 DEFAULT 值。預設值為 DEFAULT,其將鎖定作業系統的主要網路介面。

  • LossPercent - 選用。封包遺失的百分比。預設值為 7%。

  • FlowsPercent - 選用。將受到動作影響的網路流程百分比。預設 為 100%。

  • Sources - 必要。來源,以逗號分隔,不含空格。可能的值為:IPv4 地址、IPv4 CIDR 區塊、網域名稱、AZ 名稱 (us-east-1a)、AZ ID (use1-az1)DYNAMODB、ALL、 和 S3。如果您指定 DYNAMODBS3,這僅適用於目前區域中的區域端點。

  • TrafficType - 選用。流量類型。可能的值為 ingressegress。預設值為 ingress

  • DurationSeconds - 必要。網路封包遺失測試的持續時間,以秒為單位。

  • InstallDependencies - 選用。如果值為 True,Systems Manager 會在目標執行個體上安裝必要的相依性。預設值為 True。相依性為 atddiglsofjqtc

使用本文件時,實驗角色需要下列許可:

  • ec2:DescribeInstances

  • ec2:DescribeSubnets

以下是您可以在 主控台中輸入的字串範例。

{"LossPercent":"15", "Sources":"S3,www.example.com,72.21.198.67", "Interface":"eth0", "TrafficType":"egress", "DurationSeconds":"60", "InstallDependencies":"True"}

範例

如需範例實驗範本,請參閱 執行預先設定的 AWS FIS SSM 文件

如需教學課程範例,請參閱在執行個體上執行 CPU 應力

限制

  • 下列文件無法平行執行:

    • AWSFIS-Run-Network-Blackhole-Port

    • AWSFIS-Run-Network-Latency

    • AWSFIS-Run-Network-Latency-Sources

    • AWSFIS-Run-Network-Packet-Loss

    • AWSFIS-Run-Network-Packet-Loss-Sources

轉返指令碼

AWSFIS SSM 文件會自動建立轉返指令碼做為安全機制,以在故障注入實驗後還原系統狀態。這些指令碼可確保移除注入的錯誤,即使動作失敗或意外終止。

復原指令碼建立

當故障注入實驗開始時,系統會自動建立轉返指令碼。

建立詳細資訊
  • 位置 – 指令碼會在 /var/lib/amazon/ssm/目錄中建立。

  • 命名模式FAULT_NAME-FAULT_IDENTIFIER-Rollback.sh其中 FAULT_IDENTIFIER 是隨機產生的 32 個字元字串

  • 時間 – 在每個故障注入實驗開始時,在故障注入開始之前建立。

  • 內容 – 包含所有必要的環境變數和命令,以反轉特定錯誤。

例如,網路延遲實驗可能會在 建立轉返指令碼/var/lib/amazon/ssm/NetworkLatency-abc123-Rollback.sh

轉返記錄

復原指令碼會實作雙重記錄,以擷取所有復原活動,以進行疑難排解和稽核。

日誌檔案位置

當轉返指令碼執行時,它會在兩個位置建立日誌:

  • 暫存檔案/tmp/aws-fis-rollback-TIMESTAMP-PID.log

  • 系統日誌 – 使用 設施傳送至 syslog local0.info

日誌檔案命名

臨時日誌檔案使用以下命名慣例:

/tmp/aws-fis-rollback-YYYY-MM-DDTHH:MM:SSZ-PID.log

其中 YYYY-MM-DDTHH:MM:SSZ 是 UTC 時間戳記,PID 是轉返指令碼的程序 ID。

Syslog 組態

回復日誌會以下列組態傳送至 syslog:

  • 標籤aws-fis-rollback

  • 優先順序local0.info

  • 格式[YYYY-MM-DDTHH:MM:SSZ] log_message

檢視轉返日誌

使用下列命令來檢視系統化日誌中的所有轉返日誌:

sudo journalctl -t aws-fis-rollback

疑難排解

使用下列程序對問題進行疑難排解。

疑難排解 SSM 文件的問題
  1. 在 https://https://console.aws.amazon.com/systems-manager/ 開啟 AWS Systems Manager主控台。

  2. 在導覽窗格中,選擇節點管理執行命令

  3. 命令歷史記錄索引標籤上,使用篩選條件來尋找文件的執行。

  4. 選擇命令的 ID 以開啟其詳細資訊頁面。

  5. 選擇執行個體的 ID。檢閱每個步驟的輸出和錯誤。