本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
的目标 AWS FIS
目标是一个或多个 AWS 对其执行操作的资源 AWS 故障注入服务 (AWS FIS)在实验中。目标可以与实验位于同一个AWS账户中,也可以使用多账户实验在不同的账户中。要详细了解如何以不同账户中的资源为目标,请参阅使用多账户实验 AWS FIS。
您可以在创建实验模板时定义目标。您可以在实验模板中对多项操作使用相同的目标。
AWS FIS在实验开始时识别所有目标,然后再开始动作集中的任何动作。 AWS FIS使用它为整个实验选择的目标资源。如未找到目标,则实验失败。
目标语法
目标语法如下所示。
{
"targets": {
"target_name
": {
"resourceType": "resource-type
",
"resourceArns": [
"resource-arn
"
],
"resourceTags": {
"tag-key
": "tag-value
"
},
"parameters": {
"parameter-name
": "parameter-value
"
},
"filters": [
{
"path": "path-string
",
"values": ["value-string
"]
}
],
"selectionMode": "value
"
}
}
}
在定义目标时,您需要提供以下内容:
有关示例,请参阅示例目标。
资源类型
每个 AWS FIS对特定对象执行操作 AWS 资源类型。定义目标时,只能指定一种资源类型。必须指定操作支持的资源类型作为目标。
支持以下资源类型 AWS FIS:
-
aws: dynamodb: global-table — 亚马逊 DynamoDB 全球表
-
aws: ec2: autoscaling-group — Amazon Auto Scaling 群组 EC2
-
aws: ec2: ebs- volume — 亚马逊的卷 EBS
-
aws: ec2: instance — 亚马逊实例 EC2
-
aws: ec2: spot-instance — 亚马逊竞价实例 EC2
-
aws: ec2: subnet — 亚马逊子网 VPC
-
aws:ec2:transit-gateway:中转网关
-
aws: ecs: cluster — 亚马逊集群 ECS
-
aws: ecs: task — 亚马逊的任务 ECS
-
aws: eks: cluster — 亚马逊集群 EKS
-
aws: eks: nodegroup — 亚马逊节点组 EKS
-
aws:eks:pod:Kubernetes 容器组(pod)
-
aws: elasticache: redis-replicationgroup — 一个 (Redis) 复制组 ElastiCache OSS
-
aws: iam: role — 一个角色 IAM
-
aws:rds:cluster:Amazon Aurora 数据库集群
-
aws: rds: db — 亚马逊数据库实例 RDS
-
aws:s3:bucket:Amazon S3 存储桶
标识目标资源
当您在中定义目标时 AWS FIS控制台,你可以选择特定的 AWS 要定位的资源(特定资源类型)。或者,你可以让 AWS FIS根据您提供的标准确定一组资源。
要标识目标资源,您可以指定以下内容:
注意事项
-
您不能同时为相同目标指定资源 ID 和资源标签。
-
您不能同时为相同目标指定资源 ID 和资源筛选条件。
-
值为空的指定资源标签并不等同于通配符。而是会匹配具有指定标签键和空标签值的资源。
资源筛选条件
资源筛选器是根据特定属性识别目标资源的查询。 AWS FIS将查询应用于包含规范描述的API操作的输出 AWS 资源,取决于您指定的资源类型。目标定义中包含属性与查询匹配的资源。
所有筛选条件均表示为属性路径和可能的值。路径是由句点分隔的元素序列,用于描述资源在描述操作的输出中访问属性的路径。即使资源的描述操作的输出采用驼峰式大小写,每个元素也必须采用 Pascal 拼写法。例如,应使用 AvailabilityZone
(而不是 availablityZone
)作为属性元素。
"filters": [ { "path": "
component
.component
.component
", "values": [ "string
" ] } ],
下表包括API操作和 AWS CLI 可用于获取每种资源类型的规范描述的命令。 AWS FIS代表您运行这些操作以应用您指定的过滤器。相应的文档描述了结果中默认包含的资源。例如,结果中可能包含近期终止实例的 DescribeInstances 状态文档。
资源类型 | API行动 | AWS CLI 命令 |
---|---|---|
aws:ec2:autoscaling-group | DescribeAutoScalingGroups | describe-auto-scaling-groups |
aws:ec2:ebs-volume | DescribeVolumes | describe-volumes |
aws:ec2:instance | DescribeInstances | describe-instances |
aws:ec2:subnet | DescribeSubnets | describe-subnets |
aws:ec2:transit-gateway | DescribeTransitGateways | describe-transit-gateways |
aws:ecs:cluster | DescribeClusters | describe-clusters |
aws:ecs:task | DescribeTasks | describe-tasks |
aws:eks:cluster | DescribeClusters | describe-clusters |
aws:eks:nodegroup | DescribeNodegroup | describe-nodegroup |
aws:elasticache:redis-replicationgroup | DescribeReplicationGroups | describe-replication-groups |
aws:iam:role | ListRoles | list-roles |
aws:rds:cluster | D escribeDBClusters | describe-db-clusters |
aws:rds:db | D escribeDBInstances | describe-db-instances |
aws:s3:bucket | ListBuckets | list-buckets |
以下逻辑适用于所有资源筛选条件:
筛选条件内的值:
OR
各筛选条件的值:
AND
有关示例,请参阅示例筛选条件:。
资源参数
资源参数会根据特定标准标识目标资源。
以下资源类型支持参数。
- aws:ec2:ebs-volume
-
-
availabilityZoneIdentifier
:包含目标卷的可用区代码(如 us-east-1a)。
-
- aws:ec2:subnet
-
-
availabilityZoneIdentifier
:包含目标子网的可用区代码(如 us-east-1a)或可用区 ID(如 use1-az1)。 -
vpc
— VPC 包含目标子网的。不支持VPC每个账户多个。
-
- aws:ecs:task
-
cluster
:包含目标任务的集群。service
:包含目标任务的服务。
- aws:eks:pod
-
availabilityZoneIdentifier
– 可选。包含目标容器组(pod)的可用区。例如,us-east-1d
。我们通过比较 Pod 的 HostIP 和集群子网的 HostIP 来确定其可用区。CIDRclusterIdentifier
– 必需。目标EKS集群ARN的名称或。namespace
– 必需。目标容器组(pod)的 Kubernetes 命名空间。selectorType
– 必需。选择器的类型。可能的值为labelSelector
、deploymentName
和podName
。selectorValue
– 必需。选择器的值。此值取决于selectorType
的值。targetContainerName
– 可选。容器组(pod)规格中定义的目标容器名称。默认是每个目标容器组(pod)规范中定义的第一个容器。
- aws:rds:cluster
-
-
writerAvailabilityZoneIdentifiers
– 可选。数据库集群写入器的可用区。可能的值为:以逗号分隔的可用区标识符列表,all
。
-
- aws:rds:db
-
-
availabilityZoneIdentifiers
– 可选。受影响的数据库实例的可用区。可能的值为:以逗号分隔的可用区标识符列表,all
。
-
- aws:elasticache:redis-replicationgroup
-
-
availabilityZoneIdentifier
– 必需。包含目标节点的可用区代码(如 us-east-1a)或可用区 ID(如 use1-az1)。
-
选择模式
您可以通过指定选择模式来限定已识别资源的范围。 AWS FIS支持以下选择模式:
-
ALL
:在所有目标上执行操作。 -
COUNT(n)
:从已识别目标中随机选择特定数量的目标以执行操作。例如,COUNT(1) 选择一个已识别的目标。 -
PERCENT(n)
:从已识别目标中随机选择特定百分比的目标以执行操作。例如,PERCENT(25) 选择已识别目标的 25%。
如果您的资源数量为奇数并指定 50%, AWS FIS向下舍入。例如,如果您添加五个 Amazon EC2 实例作为目标并将范围添加到 50%, AWS FIS向下舍入为两个实例。无法指定小于一个资源的百分比。例如,如果您添加四个 Amazon EC2 实例,且范围为 5%, AWS FIS无法选择实例。
如果您使用相同的目标资源类型定义多个目标, AWS FIS可以多次选择同一个资源。
无论哪种选择模式,只要指定范围内未标识任何资源,实验都将失败。
示例目标
示例目标如下。
示例:指定中VPC带有指定标签的实例
此示例可能的目标是指定的 Amazon EC2 实例VPC,标签为 env=prod。 选择模式指定 AWS FIS随机选择其中一个目标。
{ "targets": { "
randomInstance
": { "resourceType": "aws:ec2:instance", "resourceTags": { "env
": "prod
" }, "filters": [ { "path": "VpcId", "values": [ "vpc-aabbcc11223344556
" ] } ], "selectionMode": "COUNT(1)" } } }
示例:具有指定参数的任务
此示例可能的目标是使用指定集群和服务的 Amazon ECS 任务。选择模式指定 AWS FIS随机选择其中一个目标。
{ "targets": { "
randomTask
": { "resourceType": "aws:ecs:task", "parameters": { "cluster": "myCluster
", "service": "myService
" }, "selectionMode": "COUNT(1)" } } }
示例筛选条件:
示例筛选条件如下。
示例:EC2实例
当您为支持 aws: ec2: instance 资源类型的操作指定筛选条件时, AWS FIS使用 Amazon EC2 describe-instances 命令并应用筛选器来识别目标。
该describe-instances命令返回JSON输出,其中每个实例都是一个结构Instances
。以下是部分输出,其中包括标记为的字段 italics
。 我们将提供使用这些字段从JSON输出结构中指定属性路径的示例。
{
"Reservations": [
{
"Groups": [],
"Instances": [
{
"ImageId": "ami-00111111111111111",
"InstanceId": "i-00aaaaaaaaaaaaaaa",
"InstanceType": "t2.micro",
"KeyName": "virginia-kp",
"LaunchTime": "2020-09-30T11:38:17.000Z",
"Monitoring": {
"State": "disabled"
},
"Placement": {
"AvailabilityZone
": "us-east-1a",
"GroupName": "",
"Tenancy": "default"
},
"PrivateDnsName": "ip-10-0-1-240.ec2.internal",
"PrivateIpAddress": "10.0.1.240",
"ProductCodes": [],
"PublicDnsName": "ec2-203-0-113-17.compute-1.amazonaws.com",
"PublicIpAddress": "203.0.113.17",
"State": {
"Code": 16,
"Name
": "running"
},
"StateTransitionReason": "",
"SubnetId
": "subnet-aabbcc11223344556",
"VpcId": "vpc-00bbbbbbbbbbbbbbbbb",
...
},
...
{
...
}
],
"OwnerId": "123456789012",
"ReservationId": "r-aaaaaabbbbb111111"
},
...
]
}
要使用资源筛选条件选择特定可用区中的实例,请指定 AvailabilityZone
的属性路径和此可用区的代码作为值。例如:
"filters": [ { "path": "Placement.AvailabilityZone", "values": [ "us-east-1a" ] } ],
要使用资源筛选条件选择特定子网中的实例,请指定 SubnetId
的属性路径和子网 ID 作为值。例如:
"filters": [ { "path": "SubnetId", "values": [ "subnet-aabbcc11223344556" ] } ],
要选择处于特定实例状态的实例,请指定 Name
的属性路径和以下一种状态名称作为值:pending
| running
| shutting-down
| terminated
| stopping
| stopped
。例如:
"filters": [ { "path": "State.Name", "values": [ "running" ] } ],
示例:Amazon RDS 集群(数据库集群)
当您为支持 aws: rds: c luster 资源类型的操作指定筛选器时, AWS FIS运行 Amazon RDS describe-db-clusters 命令并应用筛选器来识别目标。
对于每个数据库集群,该describe-db-clusters命令返回的JSON输出与以下内容类似。以下是部分输出,其中包括标记为的字段 italics
。 我们将提供使用这些字段从JSON输出结构中指定属性路径的示例。
[
{
"AllocatedStorage": 1,
"AvailabilityZones
": [
"us-east-2a",
"us-east-2b",
"us-east-2c"
],
"BackupRetentionPeriod": 7,
"DatabaseName": "",
"DBClusterIdentifier": "database-1",
"DBClusterParameterGroup": "default.aurora-postgresql11",
"DBSubnetGroup": "default-vpc-01234567abc123456",
"Status": "available",
"EarliestRestorableTime": "2020-11-13T15:08:32.211Z",
"Endpoint": "database-1.cluster-example.us-east-2.rds.amazonaws.com",
"ReaderEndpoint": "database-1.cluster-ro-example.us-east-2.rds.amazonaws.com",
"MultiAZ": false,
"Engine
": "aurora-postgresql",
"EngineVersion": "11.7",
...
}
]
要应用仅返回使用特定数据库引擎的数据库集群的资源筛选条件,请根据以下示例,指定属性路径为 Engine
并指定值为 aurora-postgresql
。
"filters": [ { "path": "Engine", "values": [ "aurora-postgresql" ] } ],
要应用仅返回特定可用区中数据库集群的资源筛选条件,请根据以下示例,指定属性路径和值。
"filters": [ { "path": "AvailabilityZones", "values": [ "us-east-2a" ] } ],