AWS 金融情报机构的目标 - AWS 故障注入服务

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

AWS 金融情报机构的目标

目标是一个或多个 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

特定资源的 Amazon 资源名称 (ARN)。

resourceTags

应用于特定资源的标签。

parameters

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

filters

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

selectionMode

已识别资源的选择模式

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

资源类型

每个 AWS FIS 操作都是在特定的 AWS 资源类型上执行的。定义目标时,只能指定一种资源类型。必须指定操作支持的资源类型作为目标。

AWS FIS 支持以下资源类型:

  • aws: dynamodb: global-table — 亚马逊 DynamoDB 全球表

  • aws:ec2:autoscaling-group:Amazon EC2 自动扩缩组

  • aws:ec2:ebs-volume:Amazon EBS 卷

  • aws:ec2:instance:Amazon EC2 实例

  • aws:ec2:spot-instance:Amazon EC2 竞价型实例

  • aws:ec2:subnet:Amazon VPC 子网

  • aws:ec2:transit-gateway:中转网关

  • aws:ecs:cluster:Amazon ECS 集群

  • aws:ecs:task:Amazon ECS 任务

  • aws:eks:cluster:Amazon EKS 集群

  • aws:eks:nodegroup:Amazon EKS 节点组

  • aws:eks:pod:Kubernetes 容器组(pod)

  • aws: elasticache: redis-replicationgroup — 一个 Redis 复制组 ElastiCache

  • aws:iam:role:IAM 角色

  • aws:rds:cluster:Amazon Aurora 数据库集群

  • aws:rds:db:Amazon RDS 数据库实例

  • aws:s3:bucket:Amazon S3 存储桶

标识目标资源

在 AWS FIS 控制台中定义目标时,可以选择要定位的特定 AWS 资源(特定资源类型)。或者,您可以让 AWS FIS 根据您提供的标准识别一组资源。

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

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

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

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

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

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

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

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

资源筛选条件

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

所有筛选条件均表示为属性路径和可能的值。路径是由句点分隔的元素序列,用于描述资源在描述操作的输出中访问属性的路径。即使资源的描述操作的输出采用驼峰式大小写,每个元素也必须采用 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 和集群子网的 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 中带有指定标签的实例

此示例可能以指定 VPC 中带有 env=prod 标签的 Amazon EC2 实例为目标。选择模式指定 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 下的一个结构。以下部分输出中包含斜体字段。亚马逊将提供使用这些字段从 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: clust er 资源类型的操作指定筛选条件时,FIS 会 AWS 运行 Amazon RDS describe-db-clusters 命令并应用筛选器来识别目标。

describe-db-clusters 命令会为每个数据库集群返回类似于以下内容的 JSON 输出。以下部分输出中包含斜体字段。亚马逊将提供使用这些字段从 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" ] } ],