的目标 AWS FIS - AWS 故障注入服务

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

的目标 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" } } }

在定义目标时,您需要提供以下内容:

target_name

目标的名称。

resourceType

资源类型

resourceArns

特定资源的亚马逊资源名称 (ARN)。

resourceTags

应用于特定资源的标签。

parameters

标识具有特定属性的目标的参数

filters

资源筛选条件使用特定属性限定已识别目标资源的范围。

selectionMode

已识别资源的选择模式

有关示例,请参阅示例目标

资源类型

每个 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根据您提供的标准确定一组资源。

要标识目标资源,您可以指定以下内容:

  • 资源 IDs-特定资源 IDs AWS 资源的费用。所有资源IDs必须代表相同类型的资源。

  • 资源标签-应用于特定资源的标签 AWS 资源的费用。

  • 资源筛选条件:表示特定属性的资源的路径和值。有关更多信息,请参阅 资源筛选条件

  • 资源参数:表示符合特定标准的资源的参数。有关更多信息,请参阅 资源参数

注意事项
  • 您不能同时为相同目标指定资源 ID 和资源标签。

  • 您不能同时为相同目标指定资源 ID 和资源筛选条件。

  • 值为空的指定资源标签并不等同于通配符。而是会匹配具有指定标签键和空标签值的资源。

资源筛选条件

资源筛选器是根据特定属性识别目标资源的查询。 AWS FIS将查询应用于包含规范描述的API操作的输出 AWS 资源,取决于您指定的资源类型。目标定义中包含属性与查询匹配的资源。

所有筛选条件均表示为属性路径和可能的值。路径是由句点分隔的元素序列,用于描述资源在描述操作的输出中访问属性的路径。即使资源的描述操作的输出采用驼峰式大小写,每个元素也必须采用 Pascal 拼写法。例如,应使用 AvailabilityZone(而不是 availablityZone)作为属性元素。

"filters": [ { "path": "component.component.component", "values": [ "string" ] } ],

下表包括API操作和 AWS CLI 可用于获取每种资源类型的规范描述的命令。 AWS FIS代表您运行这些操作以应用您指定的过滤器。相应的文档描述了结果中默认包含的资源。例如,结果中可能包含近期终止实例的 DescribeInstances 状态文档。

以下逻辑适用于所有资源筛选条件:

  • 筛选条件内的值: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 来确定其可用区。CIDR

  • clusterIdentifier – 必需。目标EKS集群ARN的名称或。

  • namespace – 必需。目标容器组(pod)的 Kubernetes 命名空间。

  • selectorType – 必需。选择器的类型。可能的值为 labelSelectordeploymentNamepodName

  • 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" ] } ],