

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

# AWS FIS 实验模板组件
<a name="experiment-templates"></a>

可以使用以下组件构造实验模板：

**操作**  
要运行的 [AWS FIS 操作](fis-actions-reference.md)。操作可以按您指定的顺序运行，也可以同时运行。有关更多信息，请参阅 [操作](action-sequence.md)。

**Targets**  
执行特定操作所依据的 AWS 资源。有关更多信息，请参阅 [Targets](targets.md)。

**停止条件**  
定义应用程序性能不可接受的阈值的 CloudWatch 警报。如果在实验运行时触发了停止条件， AWS FIS 将停止实验。有关更多信息，请参阅 [停止条件](stop-conditions.md)。

**实验角色**  
一个 IAM 角色， AWS 它向 FIS 授予所需的权限，使其可以代表您运行实验。有关更多信息，请参阅 [实验角色](getting-started-iam-service-role.md)。

**实验报告配置**  
启用实验报告的配置。有关更多信息，请参阅 [AWS FIS 的实验报告配置](experiment-report-configuration.md)。

**实验选项**  
实验模板的选项。有关更多信息，请参阅 [的实验选项 AWS FIS](experiment-options.md)。

您的账户有与 AWS FIS 相关的配额。例如，每个实验模板都设置了操作次数限额。有关更多信息，请参阅 [配额和限制](fis-quotas.md)。

## 模板语法
<a name="experiment-template-syntax"></a>

以下是实验模板的语法。

```
{
            "description": "string",
            "targets": {},
            "actions": {},
            "stopConditions": [],
            "roleArn": "arn:aws:iam::123456789012:role/AllowFISActions",
            "experimentReportConfiguration":{},
            "experimentOptions":{},
            "tags": {}
        }
```

有关示例，请参阅 [示例 模板](experiment-template-example.md)。

## 开始使用
<a name="experiment-template-get-started"></a>

要使用创建实验模板 AWS 管理控制台，请参阅[创建实验模板](create-template.md)。

要使用创建实验模板 AWS CLI，请参阅[AWS FIS 实验模板示例](experiment-template-example.md)。

# 金融情报 AWS 局的行动
<a name="action-sequence"></a>

要创建实验模板，必须定义一项或多项操作。有关 AWS FIS 提供的预定义操作列表，请参阅[操作参考](fis-actions-reference.md)。

实验期间只能执行一次操作。要在同一个实验中多次运行同一 AWS FIS 操作，请使用不同的名称将其多次添加到模板中。

**Topics**
+ [操作语法](#action-syntax)
+ [操作标识符](#action-identifiers)
+ [操作参数](#action-parameters)
+ [操作目标](#action-targets)
+ [操作持续时间](#action-duration)
+ [操作示例](#example-actions)

## 操作语法
<a name="action-syntax"></a>

以下是操作的语法。

```
{
    "actions": {
        "action_name": {
            "actionId": "aws:service:action-type",
            "description": "string",
            "parameters": {
                "name": "value"
             },
            "startAfter": ["action_name", ...],
            "targets": {
                "ResourceType": "target_name"
            }
        }
    }
}
```

您需要为操作定义提供以下内容：

***action\$1name***  
操作名称。

**actionId**  
[操作标识符](#action-identifiers)。

**description**  
可选的描述。

**parameters**  
任何[操作参数](#action-parameters)。

**startAfter**  
执行操作前必须完成的所有操作。否则，在开始实验时执行此操作。

**targets**  
任何[操作目标](#action-targets)。

有关示例，请参阅 [操作示例](#example-actions)。

## 操作标识符
<a name="action-identifiers"></a>

每个 AWS FIS 操作都有一个标识符，其格式如下：

```
aws:service-name:action-type
```

例如，以下操作停止运行 Amazon EC2 目标实例：

```
aws:ec2:stop-instances
```

有关操作的完整列表，请参阅 [AWS FIS 操作参考](fis-actions-reference.md)。

## 操作参数
<a name="action-parameters"></a>

某些 AWS FIS 操作具有特定于该操作的其他参数。这些参数用于在操作运行时 AWS 向 FIS 传递信息。

AWS FIS 支持使用操作自定义故障类型，该`aws:ssm:send-command`操作使用 SSM 代理和 SSM 命令文档在目标实例上创建故障条件。`aws:ssm:send-command` 操作包含 `documentArn` 参数，将 SSM 文档的 Amazon 资源名称 (ARN) 作为值。当为实验模板添加操作时，您可以指定参数值。

有关为 `aws:ssm:send-command` 操作指定参数的更多信息，请参阅 [执行 aws:ssm:send-command 操作。](actions-ssm-agent.md#specifying-ssm-actions)。

您可以尽可能向操作参数输入回滚配置（也称为*后置操作*）。后置操作可将目标返回到操作运行之前的状态。此操作会在操作持续时间的指定时段后运行。并非所有操作都支持后置操作。例如，您无法恢复由操作终止的 Amazon EC2 实例。

## 操作目标
<a name="action-targets"></a>

运行在您指定的目标资源上的操作。定义目标后，您可以在定义操作时指定其名称。

```
"targets": {
    "ResourceType": "resource_name"
}
```

AWS FIS 操作支持以下操作目标的资源类型：
+ **AutoScalingGroups**— 亚马逊 EC2 Auto Scaling 群组
+ **存储桶**：Amazon S3 存储桶
+ **集群**：Amazon EKS 集群
+ **集群** — 亚马逊 ECS、Aurora DSQL 或亚马逊 Aurora 数据库集群
+ **DBInstances**— 亚马逊 RDS 数据库实例
+ **函数**- AWS Lambda 函数
+ **实例**：Amazon EC2 实例
+ **KinesisStreams**— Kinesis 数据流
+ **ManagedResources**— 启用 ARC 区域转移的 Amazon EKS 集群、亚马逊 EC2 应用程序和网络负载均衡器以及启用 ARC 区域转移的 Amazon EC2 Auto Scaling 组。
+ **MultiRegionClusters**— Amazon MemoryDB 多区域集群
+ **节点组**：Amazon EKS 节点组
+ **容器组（pod）**：Amazon EKS 上的 Kubernetes 容器组（pod）
+ **ReplicationGroups**— ElastiCache 复制组
+ **角色**：IAM 角色
+ **SpotInstances**— 亚马逊 EC2 竞价型实例
+ **子网**：VPC 子网
+ **表** — Amazon DynamoDB 多区域全局表强且最终保持一致
+ **任务**：Amazon ECS 任务
+ **TransitGateways**— 公交网关
+ **VirtualInterfaces**— Direct Connect 虚拟接口
+ **卷**：Amazon EBS 卷
+ **VPCEndpoints**— 亚马逊 VPC 终端节点

有关示例，请参阅 [操作示例](#example-actions)。

## 操作持续时间
<a name="action-duration"></a>

如果操作包含可用于指定操作持续时间的参数，则默认情况下，只有等到此时段结束，才能视为操作已完成。如果您已将 `emptyTargetResolutionMode` 实验选项设置为 `skip`，则当未解析任何目标时，操作将立即完成，状态为“已跳过”。例如，如果您将持续时间指定为 5 分钟，则 AWS FIS 会认为操作在 5 分钟后完成。然后在此时段结束后开始下一项操作，直到完成所有操作。

持续时间可以是操作条件维持时长，也可以是指标监控时长。例如，在指定的持续时间内注入延迟。对于近乎瞬时的操作类型（如终止实例），将在指定持续时间内监控停止条件。

如果操作参数中包含后期操作，则将在操作完成后再执行后期操作。后期操作的用时可能会在指定操作的持续时间到下一项操作的开始时间之间造成延迟（如果其他操作均已完成，则改为到实验的结束时间）。

## 操作示例
<a name="example-actions"></a>

操作示例如下所示。

**示例**
+ [停止 EC2 实例](#example-action-stop-instances)
+ [中断竞价型实例](#example-action-send-spot-instance-interupptions)
+ [中断网络流量](#example-action-disrupt-connectivity)
+ [终止 EKS Worker](#example-action-terminate-nodegroup-instances)
+ [启动 ARC 区域自动换档](#example-start-arc-zonal-autoshift)<a name="example-action-stop-instances"></a>

**示例：停止 EC2 实例**  
以下操作将停止使用名为的目标识别的 EC2 实例*targetInstances*。两分钟后重启目标实例。

```
"actions": {
    "stopInstances": {
        "actionId": "aws:ec2:stop-instances",
        "parameters": {
            "startInstancesAfterDuration": "PT2M"
        },
        "targets": {
            "Instances": "targetInstances"
        }
    }
}
```<a name="example-action-send-spot-instance-interupptions"></a>

**示例：中断竞价型实例**  
以下操作将停止使用名为的目标标识的竞价型实例*targetSpotInstances*。两分钟后再中断竞价型实例。

```
"actions": {
    "interruptSpotInstances": {
        "actionId": "aws:ec2:send-spot-instance-interruptions",
        "parameters": {
            "durationBeforeInterruption": "PT2M"
        },
        "targets": {
            "SpotInstances": "targetSpotInstances"
        }
    }
}
```<a name="example-action-disrupt-connectivity"></a>

**示例：中断网络流量**  
以下操作将拒绝目标子网与其他可用区子网之间的流量。

```
"actions": {
    "disruptAZConnectivity": {
        "actionId": "aws:network:disrupt-connectivity",
        "parameters": {
            "scope": "availability-zone",
            "duration": "PT5M"
        },
        "targets": {
            "Subnets": "targetSubnets"
        }
    }
}
```<a name="example-action-terminate-nodegroup-instances"></a>

**示例：终止 EKS Worker**  
以下操作将终止 EKS 集群中使用名*targetNodeGroups*为的目标标识的 50% 的 EC2 实例。

```
"actions": {
    "terminateWorkers": {
        "actionId": "aws:eks:terminate-nodegroup-instances",
        "parameters": {
            "instanceTerminationPercentage": "50"
        },
        "targets": {
            "Nodegroups": "targetNodeGroups"
        }
    }
}
```<a name="example-start-arc-zonal-autoshift"></a>

**示例：启动 ARC 区域自动换档**  
以下操作将启动 ARC 区域自动移动，将托管资源从for转移出*az-in-parameters*去。*duration-in-parameteres*在 FI `ManagedResources` S 实验模板中，资源类型用作目标名称 AWS 的密钥。

```
{
    "description": "aaa",
    "targets": {
        "ManagedResources-Target-1": {
            "resourceType": "aws:arc:zonal-shift-managed-resource",
            "resourceArns": [
                "arn:aws:elasticloadbalancing:us-east-1:0124567890:loadbalancer/app/application/11223312312516",
            ],
            "selectionMode": "ALL"
        }
    },
    "actions": {
        "arc": {
            "actionId": "aws:arc:start-zonal-autoshift",
            "parameters": {
                "availabilityZoneIdentifier": "us-east-1a",
                "duration": "PT1M"
            },
            "targets": {
               "ManagedResources": "ManagedResources-Target-1"
            }
        }
    },
    "stopConditions": [
        {
            "source": "none"
        }
    ],
    "roleArn": "arn:aws:iam::718579638765:role/fis",
    "tags": {},
    "experimentOptions": {
        "accountTargeting": "single-account",
        "emptyTargetResolutionMode": "fail"
    }
}
```

# AWS 金融情报机构的目标
<a name="targets"></a>

目标是一个或多个 AWS 资源， AWS 故障注入服务 (AWS FIS) 在实验期间对这些资源执行操作。目标可以与实验位于同一 AWS 账户，也可以位于不同的账户（使用多账户实验）。要详细了解如何以不同账户中的资源为目标，请参阅[使用多账户实验 AWS FIS](multi-account.md)。

您可以在[创建实验模板](create-template.md)时定义目标。您可以在实验模板中对多项操作使用相同的目标。

AWS FIS 在实验开始时识别所有目标，然后再开始动作集中的任何动作。 AWS FIS 使用它为整个实验选择的目标资源。如未找到目标，则实验失败。

**Contents**
+ [目标语法](#target-syntax)
+ [资源类型](#resource-types)
+ [标识目标资源](#target-identification)
  + [资源筛选条件](#target-filters)
  + [资源参数](#target-parameters)
+ [选择模式](#target-selection-mode)
+ [示例目标](#target-examples)
+ [示例筛选条件：](#filter-examples)

## 目标语法
<a name="target-syntax"></a>

目标语法如下所示。

```
{
    "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\$1name**  
目标的名称。

**resourceType**  
[资源类型](#resource-types)。

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

**resourceTags**  
应用于特定资源的标签。

**parameters**  
标识具有特定属性的目标的[参数](#target-parameters)。

**filters**  
[资源筛选条件](#target-filters)使用特定属性限定已识别目标资源的范围。

**selectionMode**  
已识别资源的[选择模式](#target-selection-mode)。

有关示例，请参阅 [示例目标](#target-examples)。

## 资源类型
<a name="resource-types"></a>

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

 AWS FIS 支持以下资源类型：
+ **aws: arc: zonal-shift-managed-resource — 在 ARC** 区域偏移中注册的 AWS 资源
+ **aws: directconnect**: 虚拟接口 — 虚拟接口 Direct Connect 
+ **aws: dsql: cluster — Amazon Aurora DSQL** 集群 
+ **aws: dynamodb: global-table — 亚马逊 DynamoDB 多区域全球表**
+ **aws: ec2: autoscaling-group — Amazon Auto Scaling 群组** EC2 
+ **aws:ec2:ebs-volume**：Amazon EBS 卷
+ **aws: ec2: instance — 亚马逊实例** EC2 
+ **aws: ec2: spot-instance — 亚马逊竞价实例** EC2 
+ **aws:ec2:subnet**：Amazon VPC 子网
+ **aws:ec2:transit-gateway**：中转网关
+ **aws: ec2: vpc-endpoint — 亚马逊 VPC 终端节点**
+ **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: replicationgroup — 复制组** ElastiCache 
+ **aws:iam:role**：IAM 角色
+ **aws: kinesis: stream — 亚马逊 Kinesi** s 数据流
+ **aws: lambda: function —** 一个函 AWS Lambda 
+ **aws: memorydb: — Amazon MemoryDB** 多multi-region-cluster 区域集群
+ **aws:rds:cluster**：Amazon Aurora 数据库集群
+ **aws:rds:db**：Amazon RDS 数据库实例
+ **aws:s3:bucket**：Amazon S3 存储桶

## 标识目标资源
<a name="target-identification"></a>

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

要标识目标资源，您可以指定以下内容：
+ **资源 IDs**-特定 IDs 资源的 AWS 资源。所有资源 IDs 必须代表相同类型的资源。
+ **资源标签**-应用于特定 AWS 资源的标签。
+ **资源筛选条件**：表示特定属性的资源的路径和值。有关更多信息，请参阅 [资源筛选条件](#target-filters)。
+ **资源参数**：表示符合特定标准的资源的参数。有关更多信息，请参阅 [资源参数](#target-parameters)。

**注意事项**
+ 您不能同时为相同目标指定资源 ID 和资源标签。
+ 您不能同时为相同目标指定资源 ID 和资源筛选条件。
+ 值为空的指定资源标签并不等同于通配符。而是会匹配具有指定标签键和空标签值的资源。
+ 如果您指定多个标签，则所有指定的标签都必须存在于目标资源上才能被选中（`AND`）。

### 资源筛选条件
<a name="target-filters"></a>

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

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

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

以下逻辑适用于所有资源筛选条件：
+ 如果提供了多个过滤器，包括具有相同路径的过滤器，则必须匹配所有过滤器才能选择资源 — `AND`
+ 如果为单个筛选器提供了多个值，则需要匹配任何一个值才能选择资源 — `OR`
+ 如果在 describe API 调用的路径位置找到多个值，则需要匹配任何一个值才能选择资源 — `OR`
+ 要匹配标签 key/value 对，应改为按标签选择目标资源（见上文）。

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


| 资源类型 | API 操作 | AWS CLI 命令 | 
| --- | --- | --- | 
| aws:arc:zonal-shift-managed-resource | ListManagedResources | list-managed-resources | 
| aws:directconnect:virtual-interface | [DescribeVirtualInterfaces](https://docs.aws.amazon.com/directconnect/latest/APIReference/API_DescribeVirtualInterfaces.html) | [describe-virtual-interfaces](https://docs.aws.amazon.com/cli/latest/reference/directconnect/describe-virtual-interfaces.html) | 
| aws:ec2:autoscaling-group | [DescribeAutoScalingGroups](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_DescribeAutoScalingGroups.html) | [describe-auto-scaling-groups](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/describe-auto-scaling-groups.html) | 
| aws:ec2:ebs-volume | [DescribeVolumes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVolumes.html) | [describe-volumes](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-volumes.html) | 
| aws:ec2:instance | [DescribeInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html) | [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) | 
| aws:ec2:subnet | [DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html) | [describe-subnets](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-subnets.html) | 
| aws:ec2:transit-gateway | [DescribeTransitGateways](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeTransitGateways.html) | [describe-transit-gateways](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-transit-gateways.html) | 
| aws:ec2:vpc-endpoint | [DescribeVpcEndpoints](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcEndpoints.html) | [describe-vpc-endpoints](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpc-endpoints.html) | 
| aws:ecs:cluster | [DescribeClusters](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeClusters.html) | [describe-clusters](https://docs.aws.amazon.com/cli/latest/reference/ecs/describe-clusters.html) | 
| aws:ecs:task | [DescribeTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html) | [describe-tasks](https://docs.aws.amazon.com/cli/latest/reference/ecs/describe-tasks.html) | 
| aws:eks:cluster | [DescribeClusters](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeClusters.html) | [describe-clusters](https://docs.aws.amazon.com/cli/latest/reference/eks/describe-clusters.html) | 
| aws:eks:nodegroup | [DescribeNodegroup](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeNodegroup.html) | [describe-nodegroup](https://docs.aws.amazon.com/cli/latest/reference/eks/describe-nodegroup.html) | 
| aws:elasticache:replicationgroup | [DescribeReplicationGroups](https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_DescribeReplicationGroups.html) | [describe-replication-groups](https://docs.aws.amazon.com/cli/latest/reference/elasticache/describe-replication-groups.html) | 
| aws:iam:role | [ListRoles](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html) | [list-roles](https://docs.aws.amazon.com/cli/latest/reference/iam/list-roles.html) | 
| aws:kinesis:stream | [DescribeStreamSummary](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DescribeStreamSummary.html) | [describe-stream-summary](https://docs.aws.amazon.com/cli/latest/reference/kinesis/describe-stream-summary.html) | 
| aws:lambda:function | [ListFunctions](https://docs.aws.amazon.com/lambda/latest/api/API_ListFunctions.html) | [列表函数](https://docs.aws.amazon.com/cli/latest/reference/lambda/list-functions.html) | 
| aws:memorydb:multi-region-clustern | [DescribeMultiRegionClusters](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_DescribeMultiRegionClusters.html) | [describe-multi-region-clusters](https://docs.aws.amazon.com/cli/latest/reference/memorydb/describe-multi-region-clusters.html) | 
| aws:rds:cluster | [描述DBClusters](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBClusters.html) | [describe-db-clusters](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-clusters.html) | 
| aws:rds:db | [描述DBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) | [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) | 
| aws:s3:bucket | [ListBuckets](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html) | [list-buckets](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-buckets.html) | 
| aws:dynamodb:global-table | [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html) | [描述表](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/describe-table.html) | 
| aws:dsql:cluster | [GetCluster](https://docs.aws.amazon.com/aurora-dsql/latest/APIReference/API_GetCluster.html) | [获取集群](https://docs.aws.amazon.com/cli/latest/reference/dsql/get-cluster.html) | 

有关示例，请参阅 [示例筛选条件：](#filter-examples)。

### 资源参数
<a name="target-parameters"></a>

资源参数会根据特定标准标识目标资源。

以下资源类型支持参数。

**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` – 必需。选择器的类型。可能的值为 `labelSelector`、`deploymentName` 和 `podName`。
+ `selectorValue` – 必需。选择器的值。此值取决于 `selectorType` 的值。
+ `targetContainerName`：可选。容器组（pod）规格中定义的目标容器名称。默认是每个目标容器组（pod）规范中定义的第一个容器。

** aws:lambda:function **  
+ `functionQualifier`：可选。要定位的函数的版本或别名。如果未指定限定符，则将考虑将所有调用作为定位。如果指定了具有多个版本的别名，则只要使用包含别名的 ARN 调用别名中包含的所有版本，就会考虑将其定位。如果使用特殊别名，`$LATEST`则将考虑对基本函数 ARN 的调用以及包含`$LATEST`在 ARN 中的调用进行错误注入。*有关 Lambda 版本的更多信息，请参阅用户指南中的[管理 Lambda 函数版本](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html)。AWS Lambda *

** aws:rds:cluster **  
+ `writerAvailabilityZoneIdentifiers`：可选。数据库集群写入器的可用区。可能的值为：以逗号分隔的可用区标识符列表，`all`。

** aws:rds:db **  
+ `availabilityZoneIdentifiers`：可选。受影响的数据库实例的可用区。可能的值为：以逗号分隔的可用区标识符列表，`all`。

**aws:elasticache:replicationgroup**  
+ `availabilityZoneIdentifier` – 必需。包含目标节点的可用区代码（如 us-east-1a）或可用区 ID（如 use1-az1）。

## 选择模式
<a name="target-selection-mode"></a>

您可以通过指定选择模式来限定已识别资源的范围。 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 可以多次选择相同的资源。

无论哪种选择模式，只要指定范围内未标识任何资源，实验都将失败。

## 示例目标
<a name="target-examples"></a>

示例目标如下。

**示例**
+ [指定 VPC 中带有指定标签的实例](#target-instances)
+ [具有特定参数的任务](#target-tasks)<a name="target-instances"></a>

**示例：指定 VPC 中带有指定标签的实例**  
此示例可能的目标是指定 VPC 中带有标签的 Amazon EC2 实例env=prod。选择模式指定 AWS FIS 随机选择其中一个目标。

```
{
    "targets": {
        "randomInstance": {
            "resourceType": "aws:ec2:instance",
            "resourceTags": {
                "env": "prod"
            },
            "filters": [
                {
                    "path": "VpcId",
                    "values": [
                        "vpc-aabbcc11223344556"
                    ]
                }
            ],
            "selectionMode": "COUNT(1)"
        }
    }
}
```<a name="target-tasks"></a>

**示例：具有指定参数的任务**  
此示例可能以具有指定集群和服务的 Amazon ECS 任务为目标。选择模式指定 AWS FIS 随机选择其中一个目标。

```
{
    "targets": {
        "randomTask": {
            "resourceType": "aws:ecs:task",
            "parameters": {
                "cluster": "myCluster",
                "service": "myService"
            },
            "selectionMode": "COUNT(1)"
        }
    }
}
```

## 示例筛选条件：
<a name="filter-examples"></a>

示例筛选条件如下。

**示例**
+ [EC2 实例](#filter-instances)
+ [数据库集群](#filter-db-clusters)<a name="filter-instances"></a>

**示例： EC2 实例**  
当您为支持 **aws: ec2:** instance 资源类型的操作指定筛选条件时， AWS FIS 会使用 A EC2 **describe-instances** mazon 命令并应用筛选器来识别目标。

在 **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",
                    ...
                    "NetworkInterfaces": [
                    {
                        ...
                        "Groups": [
                            {
                                "GroupName": "sec-group-1",
                                "GroupId": "sg-a0011223344556677"
                            },
                            {
                                "GroupName": "sec-group-1",
                                "GroupId": "sg-b9988776655443322"
                            }
                        ],
                        ...
                    },
                    ...
                },
                ...
                {
                    ...
                }
            ],
            "OwnerId": "123456789012",
            "ReservationId": "r-aaaaaabbbbb111111"
        },
        ...        
    ]
}
```

要使用资源筛选条件选择特定可用区中的实例，请指定 `AvailabilityZone` 的属性路径和此可用区的代码作为值。例如：

```
"filters": [
    {
        "path": "Placement.AvailabilityZone",
        "values": [ "us-east-1a" ]
    }
],
```

要使用资源筛选条件选择特定子网中的实例，请指定 `SubnetId` 的属性路径和子网 ID 作为值。例如：

```
"filters": [
    {
        "path": "SubnetId",
        "values": [ "subnet-aabbcc11223344556" ]
    }
],
```

要选择处于特定实例状态的实例，请指定 `Name` 的属性路径和以下一种状态名称作为值：`pending`\$1 `running` \$1 `shutting-down` \$1 `terminated` \$1 `stopping` \$1 `stopped`。例如：

```
"filters": [
    {
        "path": "State.Name",
        "values": [ "running" ]
    }
],
```

要选择附加了多个安全组中*任意*一个的实例，请指定一个带有属性路径的过滤`GroupId`器和多个安全组 IDs。例如：

```
"filters": [
    {
        "path": "NetworkInterfaces.Groups.GroupId",
        "values": [
                "sg-a0011223344556677",
                "sg-f1100110011001100"
            ]
    }
],
```

要选择连接了*所有*安全组的实例，请指定多个过滤器，其中包含的属性路径`GroupId`和每个过滤器的单个安全组 ID。例如：

```
"filters": [
    {
        "path": "NetworkInterfaces.Groups.GroupId",
        "values": [
            "sg-a0011223344556677"
        ]
    },
    {
        "path": "NetworkInterfaces.Groups.GroupId",
        "values": [
            "sg-b9988776655443322"
        ]
    }
],
```<a name="filter-db-clusters"></a>

**示例：Amazon RDS 集群（数据库集群）**  
当您为支持 **aws: rds: clust** er 资源类型的操作指定筛选条件时，FIS 会 AWS 运行 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" ] 
    }
],
```

# AWS FIS 的停止条件
<a name="stop-conditions"></a>

AWS 故障注入服务 (AWS FIS) 为您提供控制和护栏，使您能够在工作负载上安全地运行实验。 AWS *停止条件*是一种在实验达到您定义为 Amazon CloudWatch 警报的阈值时停止实验的机制。如果在实验期间触发了停止条件， AWS FIS 将停止实验。您无法恢复已停止的实验。

要创建停止条件，请先为应用程序或服务定义稳定状态。稳定状态是指应用程序达到最佳性能时的业务或技术指标。例如，延迟、CPU 负载或重试次数。您可以使用稳定状态创建 CloudWatch 警报，当您的应用程序或服务达到其性能不可接受的状态时，您可以使用该警报来停止实验。有关更多信息，请参阅[亚马逊* CloudWatch 用户指南中的使用亚马逊 CloudWatch *警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。

账户设有停止条件数量限制，您可以在实验模板中指定此条件。有关更多信息，请参阅 [AWS 故障注入服务的配额和限制](fis-quotas.md)。

## 停止条件语法
<a name="stop-condition-syntax"></a>

创建实验模板时，您可以通过指定您创建的 CloudWatch 警报来指定一个或多个停止条件。

```
{
    "stopConditions": [
        {
            "source": "aws:cloudwatch:alarm",
            "value": "arn:aws:cloudwatch:region:123456789012:alarm:alarm-name"
        }
    ]
}
```

以下示例表明实验模板未指定停止条件。

```
{
    "stopConditions": [
        {
            "source": "none"
        }
    ]
}
```

## 了解更多
<a name="stop-condition-learn-more"></a>

有关演示如何创建 CloudWatch 警报和向实验模板添加停止条件的教程，请参阅[在实例上运行 CPU 压力测试](fis-tutorial-run-cpu-stress.md)。

有关 AWS FIS 支持的资源类型的可用 CloudWatch 指标的更多信息，请参阅以下内容：
+ [使用监控您的实例 CloudWatch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html)
+ [亚马逊 ECS CloudWatch 指标](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch-metrics.html)
+ [使用监控 Amazon RDS 指标 CloudWatch](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/monitoring-cloudwatch.html)
+ [使用监控运行命令指标 CloudWatch](https://docs.aws.amazon.com/systems-manager/latest/userguide/monitoring-cloudwatch-metrics.html)

# 适用于 AWS FIS 实验的 IAM 角色
<a name="getting-started-iam-service-role"></a>

AWS Identity and Access Management (IAM) 是一项可帮助管理员安全地控制 AWS 资源访问权限的 AWS 服务。要使用 AWS FIS，您必须创建一个 IAM 角色来授予 AWS FIS 所需的权限，这样 AWS FIS 才能代表您运行实验。您可以在创建实验模板时指定此实验角色。对于单账户实验，适用于实验角色的 IAM 策略必须授予权限，以便修改实验模板中指定为目标的资源。对于多账户实验，实验角色必须向 Orchestrator 角色授予为每个目标账户代入 IAM 角色的权限。有关更多信息，请参阅 [多账户实验的权限](multi-account-prerequisites.md#permissions)。

亚马逊建议您遵守授予最低权限的标准安全实践。您可以通过在策略中指定特定资源 ARNs 或标签来实现此目的。

为了帮助您快速开始使用 AWS FIS，我们提供了 AWS 托管策略，您可以在创建实验角色时指定这些策略。或者，您也可以在创建专属内联策略文档时使用这些策略作为模型。

**Topics**
+ [前提条件](#create-fis-role-prereqs)
+ [选项 1：创建实验角色并附加 AWS 托管策略](#fis-role-managed-policy)
+ [选项 2：创建实验角色并添加内联策略文档](#fis-role-inline-policy-document)

## 前提条件
<a name="create-fis-role-prereqs"></a>

在开始之前，请安装 AWS CLI 并创建所需的信任策略。

**安装 AWS CLI**  
在开始之前，请安装并配置 AWS CLI。配置时 AWS CLI，系统会提示您输入 AWS 凭据。本过程中的示例假定您已配置好默认区域。否则，请为每个命令添加 `--region` 选项。有关更多信息，请参阅[安装或更新 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)和[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。

**创建信任关系策略**  
实验角色必须具有允许 AWS FIS 服务担任该角色的信任关系。创建 `fis-role-trust-policy.json` 文本文件并添加以下信任关系策略。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                  "fis.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```
建议您使用 `aws:SourceAccount` 和 `aws:SourceArn` 条件键来防止出现[混淆代理人问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。源帐户是实验所有者，而源 ARN 是实验 ARN。例如，您应将以下条件块添加到信任策略。  

```
"Condition": {
    "StringEquals": {
        "aws:SourceAccount": "account_id"
    },
    "ArnLike": {
        "aws:SourceArn": "arn:aws:fis:region:account_id:experiment/*"
    }
}
```

**添加代入目标账户角色的权限（仅限多账户实验）**  
对于多账户实验，您需要拥有允许 Orchestrator 账户代入目标账户角色的权限。您可以修改以下示例，并将其添加为内联策略文档以代入目标账户角色：  

```
{
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource":[
        "arn:aws:iam::target_account_id:role/role_name"
    ]
}
```

## 选项 1：创建实验角色并附加 AWS 托管策略
<a name="fis-role-managed-policy"></a>

使用 AWS FIS 的其中一个 AWS 托管策略快速入门。

**创建实验角色并附加 AWS 托管策略**

1. 验证您的实验中是否有 AWS FIS 操作的托管策略。否则，您需要改为创建专有的内联策略。有关更多信息，请参阅 [AWS AWS 故障注入服务的托管策略](security-iam-awsmanpol.md)。

1. 运行以下 [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) 命令，创建角色并添加先决条件中创建的信任策略。

   ```
   aws iam create-role --role-name my-fis-role --assume-role-policy-document file://fis-role-trust-policy.json
   ```

1. 使用以下[attach-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/attach-role-policy.html)命令附加托 AWS 管策略。

   ```
   aws iam attach-role-policy --role-name my-fis-role --policy-arn fis-policy-arn
   ```

   以下*fis-policy-arn*内容之一在哪里：
   + arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorEC2Access
   + arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorECSAccess
   + arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorEKSAccess
   + arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorNetworkAccess
   + arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorRDSAccess
   + arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorSSMAccess

## 选项 2：创建实验角色并添加内联策略文档
<a name="fis-role-inline-policy-document"></a>

此选项适用于未创建托管策略的操作，或仅包含特定实验所需的权限。

**创建实验并添加内联策略文档**

1. 运行以下 [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) 命令，创建角色并添加先决条件中创建的信任策略。

   ```
   aws iam create-role --role-name my-fis-role --assume-role-policy-document file://fis-role-trust-policy.json
   ```

1. 创建 `fis-role-permissions-policy.json` 文本文件并添加权限策略。有关可用作起始点的策略的示例，请参阅以下内容。
   + **故障注入操作**：从以下策略开始。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Sid": "AllowFISExperimentRoleFaultInjectionActions",
                 "Effect": "Allow",
                 "Action": [
                     "fis:InjectApiInternalError",
                     "fis:InjectApiThrottleError",
                     "fis:InjectApiUnavailableError"
                 ],
                 "Resource": "arn:*:fis:*:*:experiment/*"
             }
         ]
     }
     ```

------
   + **Amazon EBS 操作**：从以下政策开始。

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "ec2:DescribeVolumes"
                 ],
                 "Resource": "*"
             },
             {
                 "Effect": "Allow",
                 "Action": [
                     "ec2:PauseVolumeIO"
                 ],
                 "Resource": "arn:aws:ec2:*:*:volume/*"
             }
         ]
     }
     ```

------
   + **Amazon EC2 操作** — 从[AWSFaultInjectionSimulatorEC2访问](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSFaultInjectionSimulatorEC2Access.html)策略开始。
   + **Amazon ECS 操作** — 从[AWSFaultInjectionSimulatorECSAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSFaultInjectionSimulatorECSAccess.html)策略开始。
   + **Amazon EKS 行动** — 从[AWSFaultInjectionSimulatorEKSAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSFaultInjectionSimulatorEKSAccess.html)政策开始。
   + **网络操作**-从[AWSFaultInjectionSimulatorNetworkAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSFaultInjectionSimulatorNetworkAccess.html)策略开始。
   + **Amazon RDS 操作** — 从[AWSFaultInjectionSimulatorRDSAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSFaultInjectionSimulatorRDSAccess.html)策略开始。
   + **Systems Manager 操作**-从[AWSFaultInjectionSimulatorSSMAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSFaultInjectionSimulatorSSMAccess.html)策略开始。

1. 使用以下[put-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/put-role-policy.html)命令添加您在上一步中创建的权限策略。

   ```
   aws iam put-role-policy --role-name my-fis-role --policy-name my-fis-policy --policy-document file://fis-role-permissions-policy.json
   ```

# AWS FIS 的实验报告配置
<a name="experiment-report-configuration"></a>

您可以启用 AWS 故障注入服务 (FIS) 来生成实验报告，从而更轻松地生成弹性测试的证据。实验报告是一个 PDF 文档，它汇总了实验操作，并可选择从您指定的 CloudWatch 仪表板捕获应用程序的响应。要查看示例实验报告，请[在此](samples/FisExampleReport.pdf.zip)处下载 zip 文件。

要启用和配置为实验生成的报告的内容，您需要为实验模板定义实验报告配置。当您指定 CloudWatch 仪表板时， AWS FIS 会包含给定仪表板中所有小组件的快照图，并在您指定的持续时间内注释实验的开始和结束时间，如下例所示。

此示例演示了可用区 (AZ) 中丢包实验的影响。当在 AZ use1-az6 中引入数据包丢失时，流量会从 use1-az6 转移到 use1-az4，因此该可用区中负载均衡器处理的字节数会减少。

![\[Two graphs showing ProcessedBytes over time, with one increasing and one decreasing sharply.\]](http://docs.aws.amazon.com/zh_cn/fis/latest/userguide/images/packet-loss-az-example.png)


实验结束后，可以从 AWS FIS 控制台下载报告，也可以将其存储在 Amazon S3 存储桶中。如果您在报告配置中包含 CloudWatch 仪表板，则还会提供每个小组件的图像。对于作为目标预览一部分`cancelled`或作为目标预览一部分运行的实验（**ActionSmode** 设置为），不会生成报告。`skip-all`一旦实验超过实验数据保留期限，则只能从 Amazon S3 存储桶中获取报告。 AWS 每份交付的报告均收取 FIS 费用，但因内部错误而失败的报告除外。有关更多信息，请参阅[AWS 故障注入服务定价](https://aws.amazon.com/fis/pricing/)和[AWS 故障注入服务的配额和限制](fis-quotas.md)。可能会收取 Amazon S3 的摄取和存储费用，**GetMetricWidgetImage**以及**GetDashboard**请求的 CloudWatch API 费用。有关更多信息，请参阅 [Amazon S3 的定价](https://aws.amazon.com/s3/pricing/)和[CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

**Topics**
+ [实验报告配置语法](#experiment-report-syntax)
+ [实验报告权限](#experiment-report-permissions)
+ [实验报告最佳实践](#experiment-report-best-practices)

## 实验报告配置语法
<a name="experiment-report-syntax"></a>

 以下是实验报告配置的语法，这是实验模板的可选部分。

```
{
    "experimentReportConfiguration": {
        "outputs": {
            "s3Configuration": {
                "bucketName": "my-bucket-name",
                "prefix": "report-storage-prefix" 
            }
        },
        "dataSources": {
            "cloudWatchDashboards": [
                {
                    "dashboardIdentifier": "arn:aws:cloudwatch::123456789012:dashboard/MyDashboard"
                }
            ]
        },
        "preExperimentDuration": "PT20M",
        "postExperimentDuration": "PT20M" 
    }
}
```

使用`experimentReportConfiguration`，您可以自定义要包含在实验报告中的数据的输出目的地、输入数据和时间窗口，这可以帮助您更好地了解 AWS FIS 实验的影响和结果。在定义实验报告配置时，您需要提供以下内容：

**输出**  
`experimentReportConfiguration`的部分指定了实验报告的交付地点。在中`outputs`，您可以`s3Configuration`通过提供以下内容来指定：  
+ `bucketName`-存储报告的 Amazon S3 存储桶的名称。存储桶必须与实验位于同一区域。
+ `prefix`（可选）-存储报告的 Amazon S3 存储桶中的前缀。强烈建议使用此字段，以便您只能访问前缀。

**数据源**  
的可选部分指定实验报告中将包含的其他数据源。`experimentReportConfiguration`  
+ `cloudWatchDashboards`-将包含在报告中的 CloudWatch 仪表板阵列。仅限于一个 CloudWatch 仪表板。
+ `dashboardIdentifier`-控制面板的 ARN。 CloudWatch 报告中将包含此控制面板`metric`中该类型的每个控件的快照图，但跨区域指标除外。

**preExperimentDuration**  
的可选部分`experimentReportConfiguration`，用于定义要包含在报告中的 CloudWatch 仪表板指标的实验前持续时间，最多 30 分钟。这段时间应该代表您的应用程序的稳定状态。例如，实验前持续时间为 5 分钟意味着快照图表将在实验开始前 5 分钟包含指标。持续时间的格式为 ISO 8601，默认格式为 20 分钟。

**postExperimentDuration**  
的可选部分`experimentReportConfiguration`，用于定义要包含在报告中的 CloudWatch 仪表板指标的实验后持续时间，最多 2 小时。该持续时间应代表您的应用程序的稳定状态或恢复期。例如，如果您将实验后持续时间指定为 5 分钟，则快照图表将包含直到实验结束 5 分钟后的指标。持续时间的格式为 ISO 8601，默认格式为 20 分钟。

## 实验报告权限
<a name="experiment-report-permissions"></a>

要让 AWS FIS 生成和存储实验报告，您需要允许 AWS FIS 实验 IAM 角色执行以下操作：
+ `cloudwatch:GetDashboard`
+ `cloudwatch:GetMetricWidgetImage`
+ `s3:GetObject`
+ `s3:PutObject`

我们建议您遵循 AWS 安全最佳实践，将实验角色限制为存储桶和前缀。以下是限制实验角色访问权限的策略声明示例。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	  
    "Statement": 
        [ 
            {
                "Action": [
                    "s3:PutObject",
                    "s3:GetObject"
                    ],
                "Resource": "arn:aws:s3:::my-experiment-report-bucket/my-prefix/*", 
                "Effect": "Allow"
            },
            {
                "Action": [
                    "cloudwatch:GetDashboard"
                    ],
                "Resource": "arn:aws:cloudwatch::012345678912:dashboard/my-experiment-report-dashboard",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "cloudwatch:GetMetricWidgetImage"
                    ],
                "Resource": "*",
                "Effect": "Allow"
            }
         ] 
 }
```

------

### 向使用客户托管密钥 (CMK) 加密的 Amazon S3 存储桶提交报告的额外权限
<a name="additional-s3-permissions"></a>

 如果您在中指定`S3Configuration`的 Amazon S3 存储桶已使用 CMK 加密，则需要根据您的 KMS 密钥策略向 FIS 实验角色授予以下额外权限：
+ `kms:GenerateDataKey`
+ `kms:Decrypt`

以下是 KMS 密钥策略声明示例，该声明允许 FIS 实验角色向加密存储桶写入报告：

```
{ 
    "Sid": "Allow FIS experiment report",
    "Effect": "Allow", 
    "Principal": 
    { 
        "AWS": [ 
            "arn:aws:iam::012345678912:role/FISExperimentRole",
        ] 
    }, 
    "Action": [ 
        "kms:Decrypt",
        "kms:GenerateDataKey" 
        ], 
    "Resource": "*" 
   }
```

## 实验报告最佳实践
<a name="experiment-report-best-practices"></a>

 以下是使用 AWS FIS 实验报告配置的最佳实践：
+ 在开始实验之前，请生成目标预览，以验证您的实验模板是否按预期进行配置。目标预览将为您提供有关实验预期目标的信息。要了解更多信息，请参阅[使用实验模板生成目标预览](generate-target-preview.md)。
+ 该报告不应用于对失败的实验进行故障排除。取而代之的是使用实验日志来排除实验错误。我们建议您仅在之前运行并成功完成的实验中使用该报告。
+ 限制实验 IAM 角色放置并获取对 S3 目标存储桶和前缀的对象访问权限。我们建议您仅将 bucket/前缀指定 AWS 给 FIS 实验报告，不要向其他 AWS 服务授予访问该存储桶和前缀的权限。
+ 使用 Amazon S3 对象锁定可在固定时间内或无限期地防止报告被删除或覆盖。要了解更多信息，请参阅[使用对象锁定锁定对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock.html)。
+ 如果您的 CloudWatch 控制面板位于同一区域的单独账户中，则可以使用 CloudWatch 跨账户可观察性通过 CloudWatch 控制台或和 API 中的 Observability Acces AWS s Manager 命令将您的 FIS Orchestrator 账户启用为监控账户，将单独的账户设置为源账户。 AWS CLI 要了解更多信息，请参阅[CloudWatch 跨账户可观察性](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html)。

# 的实验选项 AWS FIS
<a name="experiment-options"></a>

 实验选项是实验的可选设置。您可以在实验模板上定义某些实验选项。在开始实验时设置其他实验选项。

 以下是可在实验模板上定义的实验选项的语法。

```
{
        "experimentOptions": {
        "accountTargeting": "single-account | multi-account",
            "emptyTargetResolutionMode": "fail | skip"
    }
}
```

如果您在创建实验模板时未指定任何实验选项，则使用每个选项的默认值。

以下是可在开始实验时设置的实验选项的语法。

```
{
        "experimentOptions": {
            "actionsMode": "run-all | skip-all"
     }
}
```

如果在开始实验时未指定任何实验选项，则使用默认的 `run-all`。

**Topics**
+ [账户定位](#account-targeting)
+ [空目标解析模式](#empty-target-resolution-mode)
+ [操作模式](#actions-mode)

## 账户定位
<a name="account-targeting"></a>

如果您有多个 AWS 账户拥有想要在实验中定位的资源，则可以使用账户定位实验选项定义多账户实验。您可以使用一个 Orchestrator 账户 运行多账户实验，这会影响多个目标账户 中的资源。协调员账户拥有 AWS FIS 实验模板和实验。目标账户是指个人 AWS 账户，其资源可能会受到 AWS FIS 实验的影响。有关更多信息，请参阅 [使用多账户实验 AWS FIS](multi-account.md)。

您可以通过确定目标账户来指明目标资源的位置。您可以提供两个值来确定目标账户：
+ **单账户**：默认值。实验将仅针对运行 AWS FIS 实验的 AWS 账户中的资源。
+ **多账户**：实验能够以多个 AWS 账户中的资源为目标。

### 目标账户配置
<a name="template-target-account-configurations"></a>

要运行多账户实验，必须定义一个或多个目标账户配置。目标账户配置为实验中拥有目标资源的每个账户指定 accountId、roleArn 和描述。实验模板 IDs 的目标账户配置账号必须是唯一的。

创建多账户实验模板时，实验模板将返回一个只读字段 `targetAccountConfigurationsCount`，即实验模板中所有目标账户配置的计数。

目标账户配置的语法如下所示。

```
{
    accountId: "123456789012",
    roleArn: "arn:aws:iam::123456789012:role/AllowFISActions",
    description: "fis-ec2-test"
}
```

创建目标账户配置时，您需要提供以下内容：

**accountId**  
目标账户的 12 位 AWS 账户 ID。

**roleArn**  
一个 IAM 角色，授予在目标账户中执行操作的 AWS FIS 权限。

**description**  
可选的描述。

要了解有关如何使用目标账户配置的更多信息，请参阅[使用多账户实验 AWS FIS](multi-account.md)。

## 空目标解析模式
<a name="empty-target-resolution-mode"></a>

该模式可让您选择即使目标资源未解析也允许完成实验。
+ **失败**：默认值。如果未为目标解析任何资源，则实验将立即终止，状态为 `failed`。
+ **跳过**：如果没有为目标解析资源，则实验将继续进行，并跳过任何未解析目标的操作。不能跳过使用唯一标识符定义的目标的操作 ARNs，例如。如果未找到使用唯一标识符定义的目标，则实验将立即终止，状态为 `failed` 

## 操作模式
<a name="actions-mode"></a>

操作模式是可以在开始实验时指定的可选参数。您可以将操作模式设置为 `skip-all`，以便在向目标资源注入故障之前生成目标预览。通过目标预览，您能够验证以下各项：
+ 是否已将实验模板配置为以预期资源为目标。开始此实验时作为目标的实际资源可能会与预览不同，因为资源可能会被随机删除、更新或采样。
+ 日志记录配置是否已正确设置。
+ 对于多账户实验，您是否已经为每个目标账户配置正确设置了 IAM 角色。

**注意**  
该`skip-all`模式不允许您验证自己是否具有运行 AWS FIS 实验和对资源执行操作所需的权限。

操作模式参数接受以下值：
+ `run-all`：（默认值）实验将对目标资源采取操作。
+ `skip-all`：实验将跳过对目标资源执行的所有操作。

要了解有关如何在开始实验时设置操作模式参数的更多信息，请参阅[使用实验模板生成目标预览](generate-target-preview.md)。