本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要建立實驗範本,您必須定義一或多個動作。如需 AWS FIS 提供的預先定義動作清單,請參閱 動作參考。
您只能在實驗期間執行動作一次。若要在相同的實驗中多次執行相同的 AWS FIS 動作,請使用不同的名稱多次將其新增至範本。
動作語法
以下是 動作的語法。
{
"actions": {
"action_name
": {
"actionId": "aws:service
:action-type
",
"description": "string
",
"parameters": {
"name
": "value
"
},
"startAfter": ["action_name
", ...],
"targets": {
"ResourceType
": "target_name
"
}
}
}
}
當您定義動作時,請提供下列項目:
如需範例,請參閱 動作範例。
動作識別符
每個 AWS FIS 動作都有一個具有下列格式的識別符:
aws:service-name
:action-type
例如,下列動作會停止目標 Amazon EC2 執行個體:
aws:ec2:stop-instances
如需動作的完整清單,請參閱 AWS FIS 動作參考。
動作參數
有些 AWS FIS 動作具有動作特有的其他參數。這些參數用於在動作執行時將資訊傳遞給 AWS FIS。
AWS FIS 支援使用 aws:ssm:send-command
動作的自訂故障類型,該動作使用 SSM Agent 和 SSM 命令文件來建立目標執行個體上的故障條件。aws:ssm:send-command
動作包含以 SSM 文件的 Amazon Resource Name (ARN) 做為值的documentArn
參數。當您將 動作新增至實驗範本時,您可以指定參數的值。
如需指定 aws:ssm:send-command
動作參數的詳細資訊,請參閱 使用 aws:ssm:send-command動作。
您可以盡可能在動作參數中輸入回復組態 (也稱為後置動作)。後置動作會將目標回復為動作執行前原有的狀態。後置動作會在動作持續時間中指定的時間之後執行。並非所有動作都支援貼文動作。例如,如果動作終止 Amazon EC2 執行個體,則您無法在執行個體終止後復原執行個體。
動作目標
動作會在您指定的目標資源上執行。定義目標之後,您可以在定義動作時指定其名稱。
"targets": {
"ResourceType
": "resource_name
"
}
AWS FIS 動作支援動作目標的下列資源類型:
-
AutoScalingGroups – Amazon EC2 Auto Scaling 群組
-
儲存貯體 – Amazon S3 儲存貯體
-
叢集 – Amazon EKS 叢集
-
叢集 – Amazon ECS 叢集或 Amazon Aurora 資料庫叢集
-
DBInstances – Amazon RDS 資料庫執行個體
-
資料表 – Amazon DynamoDB 全域資料表
-
執行個體 – Amazon EC2 執行個體
-
節點群組 – Amazon EKS 節點群組
-
Pod:Amazon EKS 上的 Kubernetes Pod
-
ReplicationGroups – ElastiCache Redis 複寫群組
-
角色 – IAM 角色
-
SpotInstances – Amazon EC2 Spot 執行個體
-
子網路 – VPC 子網路
-
任務 – Amazon ECS 任務
-
TransitGateways – 傳輸閘道
-
磁碟區 – Amazon EBS 磁碟區
如需範例,請參閱 動作範例。
動作持續時間
如果動作包含參數,您可以用來指定動作的持續時間,根據預設,該動作只有在指定的持續時間過後才會視為完成。如果您已將emptyTargetResolutionMode
實驗選項設定為 skip
,則動作會在未解析目標時立即完成,狀態為「略過」。例如,如果您指定 5 分鐘的持續時間, AWS FIS 會將動作視為在 5 分鐘後完成。然後,它會開始下一個動作,直到所有動作完成為止。
持續時間可以是維持動作條件的時間長度,或是監控指標的時間長度。例如,延遲會在指定的時間內注入。對於近乎即時的動作類型,例如終止執行個體,會在指定的持續時間內監控停止條件。
如果動作在動作參數中包含後置動作,則後置動作會在動作完成後執行。完成後置動作所需的時間,可能會導致指定動作持續時間與下一個動作開始 (或實驗結束,如果所有其他動作完成) 之間發生延遲。
動作範例
以下是範例動作。
範例:停止 EC2 執行個體
下列動作會停止使用名為 targetInstances
的目標所識別的 EC2 執行個體。兩分鐘後,它會重新啟動目標執行個體。
"actions": {
"stopInstances
": {
"actionId": "aws:ec2:stop-instances",
"parameters": {
"startInstancesAfterDuration": "PT2M
"
},
"targets": {
"Instances": "targetInstances
"
}
}
}
範例:中斷 Spot 執行個體
下列動作會停止使用名為 targetSpotInstances
的目標識別 Spot 執行個體。它會等待兩分鐘再中斷 Spot 執行個體。
"actions": {
"interruptSpotInstances
": {
"actionId": "aws:ec2:send-spot-instance-interruptions",
"parameters": {
"durationBeforeInterruption": "PT2M
"
},
"targets": {
"SpotInstances": "targetSpotInstances
"
}
}
}
範例:中斷網路流量
下列動作會拒絕目標子網路與其他可用區域中子網路之間的流量。
"actions": {
"disruptAZConnectivity
": {
"actionId": "aws:network:disrupt-connectivity",
"parameters": {
"scope": "availability-zone",
"duration": "PT5M
"
},
"targets": {
"Subnets": "targetSubnets
"
}
}
}
範例:終止 EKS 工作者
下列動作會終止 EKS 叢集中 50% 使用名為 targetNodeGroups
的目標所識別的 EC2 執行個體。
"actions": {
"terminateWorkers
": {
"actionId": "aws:eks:terminate-nodegroup-instances",
"parameters": {
"instanceTerminationPercentage": "50
"
},
"targets": {
"Nodegroups": "targetNodeGroups
"
}
}
}