

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

# 教程：模拟连接事件
<a name="fis-tutorial-disrupt-connectivity"></a>

您可以使用 AWS 故障注入服务 (AWS FIS) 来模拟各种连接事件。 AWS FIS 通过以下方式之一阻止网络连接来模拟连接事件：
+ `all`：拒绝所有往返于子网的流量。请注意，此选项允许子网内流量，包括往返于子网中网络接口的流量。
+ `availability-zone`：拒绝往返于其他可用区子网的 VPC 内流量。
+ `dynamodb`：拒绝往返于当前区域中 DynamoDB 区域端点的流量。
+ `prefix-list`：拒绝往返于指定前缀列表的流量。
+ `s3`：拒绝往返于当前区域中 Amazon S3 区域端点的流量。
+ `s3express`— 拒绝进出目标子网可用区中 Amazon S3 Express One 区域的区域终端节点的流量。目标子网必须位于 S3 Express One 区域当前可用 AZs 的地方。有关更多信息，请参阅 [S3 Express One 区域可用区和区域。](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-Endpoints.html) 。
+ `vpc`：拒绝往返于 VPC 的流量。

使用本教程创建实验模板，该模板使用 AWS FIS `aws:network:disrupt-connectivity` 操作在目标子网中引入与 Amazon S3 的连接中断。

**Topics**
+ [先决条件](#disrupt-connectivity-prerequisites)
+ [步骤 1：创建 AWS FIS 实验模板](#disrupt-connectivity-step1)
+ [步骤 2：对 Amazon S3 端点执行 Ping 操作](#disrupt-connectivity-step2)
+ [第 3 步：开始你的 AWS FIS 实验](#disrupt-connectivity-step3)
+ [第 4 步：追踪您 AWS 的 FIS 实验进度](#disrupt-connectivity-step4)
+ [步骤 5：验证 Amazon S3 网络中断](#disrupt-connectivity-step5)
+ [步骤 5：清除](#disrupt-connectivity-step6)

## 先决条件
<a name="disrupt-connectivity-prerequisites"></a>

在开始本教程之前，您需要在您的角色中拥有相应权限 AWS 账户，并需要一个测试 Amazon EC2 实例：

**在你中拥有权限的角色 AWS 账户**  
创建一个角色并附加一个策略，使 AWS FIS 能够代表您执行`aws:network:disrupt-connectivity`操作。

IAM 角色需要以下策略：
+  [AWSFaultInjectionSimulatorNetworkAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSFaultInjectionSimulatorNetworkAccess)— 授予 AWS FIS 服务在 Amazon EC2 联网和其他必需服务中的权限，以执行与网络基础设施相关 AWS 的 FIS 操作。

**注意**  
为简单起见，本教程使用 AWS 托管策略。亚马逊建议您仅授予用例所需的最低生产权限。  
有关如何创建 IAM 角色的更多信息，请参阅 I [AM 用户指南中的用 AWS 于 FIS 实验的 IAM 角色 (AWS CLI)](https://docs.aws.amazon.com/fis/latest/userguide/getting-started-iam-service-role) [*或创建 IAM* 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user)。

**Amazon EC2 测试实例**  
启动并连接 Amazon EC2 测试实例。按照以下教程，启动并连接 Amazon EC2 实例：《Amazon EC2 用户指南》**中的[教程：开始使用 Amazon EC2 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted)。

## 步骤 1：创建 AWS FIS 实验模板
<a name="disrupt-connectivity-step1"></a>

使用 AWS FI AWS 管理控制台 S 创建实验模板。 AWS FIS 模板由动作、目标、停止条件和实验角色组成。有关模板工作原理的更多信息，请参阅[适用于 AWS FIS 的实验模板](https://docs.aws.amazon.com/fis/latest/userguide/experiment-templates)。

在开始之前，请确保您做好以下准备：
+ 具有适当权限的 IAM 角色。
+ 一个 Amazon EC2 实例。
+ Amazon EC2 实例的子网 ID。

**创建试验模板**

1. 打开 AWS FIS 控制台，网址[https://console.aws.amazon.com/fis/](https://console.aws.amazon.com/fis/)为。

1. 在左侧导航窗格中，选择**实验模板**。

1. 选择**创建实验模板**。

1. 对于**步骤 1，指定模板详细信息**，请执行以下操作：

   1. 在**描述和名称**中，输入模板的描述，例如`Amazon S3 Network Disrupt Connectivity`。

   1. 选择**下一**步，然后进入**步骤 2，指定操作和目标**。

1. 在**操作**下，选择**添加操作**。

   1. 对于**名称**，输入 `disruptConnectivity`。

   1. 对于**操作类型**，选择 **aws:network:disrupt-connectivity**。

   1. 在**操作参数**下，将**持续时间**设置为 `2 minutes`。

   1. 在**范围**下，选择 **s3**。

   1. 选择顶部的**保存**。

1. 在**目标**下，您会看到已自动创建的目标。选择**编辑**。

   1. 验证**资源类型**是否为 `aws:ec2:subnet`。

   1. 在**目标方法**下，选择**资源 IDs**，然后选择您在[先决条件](https://docs.aws.amazon.com/fis/latest/userguide/fis-tutorial-disrupt-connectivity.html#disrupt-connectivity-prerequisites)步骤中创建 Amazon EC2 实例时使用的子网。

   1. 验证**选择模式**为**全部**。

   1. 选择**保存**。

1. 选择**下一步**进入**步骤 3，配置服务访问权限**。

1. 在**服务访问权限**下，选择您按照本教程[先决条件](https://docs.aws.amazon.com/fis/latest/userguide/fis-tutorial-disrupt-connectivity.html#disrupt-connectivity-prerequisites)中所述创建的 IAM 角色。如未显示此角色，请验证其是否具有必要的信任关系。有关更多信息，请参阅 [适用于 AWS FIS 实验的 IAM 角色](getting-started-iam-service-role.md)。

1. 选择**下一步**进入**步骤 4，配置可选设置**。

1. （可选）在 “**停止” 条件**下，您可以选择一个 CloudWatch警报，以便在条件出现时停止实验。有关更多信息，请参阅 [AWS FIS 停止条件](https://docs.aws.amazon.com/fis/latest/userguide/stop-conditions)。

1. （可选）在 “**日志**” 下，您可以选择一个 Amazon S3 存储桶，或者将日志发送到 CloudWatch 进行实验。

1. 选择 “**下一**步” 进入**步骤 5，“查看并创建”**。

1. 查看模板并选择**创建实验模板**。当提示您确认时，输入`create`，然后选择**创建实验模板**。

## 步骤 2：对 Amazon S3 端点执行 Ping 操作
<a name="disrupt-connectivity-step2"></a>

验证您的 Amazon EC2 实例能否访问 Amazon S3 端点。

1. 连接到您在[先决条件](https://docs.aws.amazon.com/fis/latest/userguide/fis-tutorial-disrupt-connectivity.html#disrupt-connectivity-prerequisites)步骤中创建的 Amazon EC2 实例。

   要排查相关问题，请参阅《Amazon EC2 用户指南》**中的[排查实例的连接问题](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting)。

1. 查看您的实例 AWS 区域 所在的位置。您可以在 Amazon EC2 控制台中或通过运行以下命令完成此操作。

   ```
   hostname
   ```

   例如，当您在 `us-west-2` 中启动 Amazon EC2 实例，就会看到以下输出。

   ```
   [ec2-user@ip-172.16.0.0 ~]$ hostname
   ip-172.16.0.0.us-west-2.compute.internal
   ```

1. Ping 您的 Amazon S3 终端节点 AWS 区域。将 {{AWS 区域}} 替换为您的区域。

   ```
   ping -c 1 s3.{{AWS 区域}}.amazonaws.com
   ```

   您会在输出结果中看到丢包率为 0% 的成功 Ping 操作，如以下示例所示。

   ```
   PING s3.us-west-2.amazonaws.com (x.x.x.x) 56(84) bytes of data.
   64 bytes from s3-us-west-2.amazonaws.com (x.x.x.x: icmp_seq=1 ttl=249 time=1.30 ms
   
   --- s3.us-west-2.amazonaws.com ping statistics ---
   1 packets transmitted, 1 received, 0% packet loss, time 0ms
   rtt min/avg/max/mdev = 1.306/1.306/1.306/0.000 ms
   ```

## 第 3 步：开始你的 AWS FIS 实验
<a name="disrupt-connectivity-step3"></a>

使用刚刚创建的实验模板开始实验。

1. 打开 AWS FIS 控制台，网址[https://console.aws.amazon.com/fis/](https://console.aws.amazon.com/fis/)为。

1. 在左侧导航窗格中，选择**实验模板**。

1. 选择创建的实验模板 ID，打开详细信息页面。

1. 请选择**开始实验**。

1. （可选）在确认页面中为实验添加标签。

1. 在确认页面中，选择**开始实验**。

## 第 4 步：追踪您 AWS 的 FIS 实验进度
<a name="disrupt-connectivity-step4"></a>

您可以跟踪正在运行的实验进度，直到实验完成、停止或失败。

1. 您应该位于刚开始的实验的详细信息页面。否则，请选择**实验**，然后选择实验 ID，打开其详细信息页面。

1. 要查看实验状态，请在详细信息窗格中选择**状态**。有关更多信息，请参阅[实验状态](https://docs.aws.amazon.com/fis/latest/userguide/experiments.html#experiment-states)。

1. 当实验状态为**正在运行**时，移至下一步。

## 步骤 5：验证 Amazon S3 网络中断
<a name="disrupt-connectivity-step5"></a>

您可以对 Amazon S3 端点执行 Ping 操作，以验证实验进度。
+ 您可以通过 Amazon EC2 实例，对 AWS 区域中的 Amazon S3 端点执行 Ping 操作。将 {{AWS 区域}} 替换为您的区域。

  ```
  ping -c 1 s3.{{AWS 区域}}.amazonaws.com
  ```

  您会在输出结果中看到丢包率为 100% 的失败 Ping 操作，如以下示例所示。

  ```
  ping -c 1 s3.us-west-2.amazonaws.com
  PING s3.us-west-2.amazonaws.com (x.x.x.x) 56(84) bytes of data.
  
  --- s3.us-west-2.amazonaws.com ping statistics ---
  1 packets transmitted, 0 received, 100% packet loss, time 0ms
  ```

## 步骤 5：清除
<a name="disrupt-connectivity-step6"></a>

如果无需再使用为此实验创建的 Amazon EC2 实例或 AWS FIS 模板，可以将其删除。

**删除 Amazon EC2 实例**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择测试实例，然后依次选择**实例状态**和**终止实例**。

1. 当系统提示您确认时，选择**终止**。



**使用 AWS FIS 控制台删除实验模板**

1. 打开 AWS FIS 控制台，网址[https://console.aws.amazon.com/fis/](https://console.aws.amazon.com/fis/)为。

1. 在导航窗格中，选择**实验模板**。

1. 选择实验模板，然后依次选择**操作**和**删除实验模板**。

1. 当系统提示您确认时，输入 `delete`，然后选择**删除实验模板**。