

# 了解为 Amazon ECS 配置适用于 Windows File Server 的 FSx 文件系统
<a name="tutorial-wfsx-volumes"></a>

了解如何启动经 Amazon ECS 优化的 Windows 实例，该实例托管适用于 Windows File Server 的 FSx 文件系统和可访问该文件系统的容器。要执行此操作，您首先创建一个Directory Service AWS托管 Microsoft Active Directory。然后，您可以创建适用于 Windows File Server 的 FSx 文件系统和带有 Amazon EC2 实例和任务定义的集群。您可以配置容器的任务定义使用适用于 Windows File Server 的 FSx 文件系统。最后，您测试文件系统。

每次启动或删除 Active Directory 或适用于 Windows File Server 的 FSx 文件系统时都需要 20 到 45 分钟。准备至少保留 90 分钟以完成本教程或通过几个课程完成本教程。

## 教程的先决条件
<a name="wfsx-prerequisites"></a>
+ 管理用户。请参阅[设置以使用 Amazon ECS](get-set-up-for-amazon-ecs.md)。
+ （可选）一个 `PEM` 密钥对，用于通过 RDP 访问连接到您的 EC2 Windows 实例。有关如何创建密钥对的信息，请参阅《Amazon EC2 用户指南》中的 [Amazon EC2 密钥对和 Amazon EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)**。
+ 至少有一个公有子网和一个私有子网以及一个安全组的 VPC。您可以使用您的原定设置 VPC。您不需要 NAT 网关或设备。Directory Service 不支持 Active Directory 的网络地址转换（NATI）。为了实现这一点，您的 VPC 中必须有 Active Directory、适用于 Windows File Server 的 FSx 文件系统、ECS 集群和 EC2 实例。有关 VPC 和 Active Directory 的更多信息，请参阅[创建 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) 和 [Prerequisites for creating an AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started.html#ms_ad_getting_started_prereqs)。
+ IAM ecsInstanceRole 和 ecsTaskExecutionRole 权限与您的账户关联。这些服务链接角色允许服务代表您进行 API 调用并访问容器、密钥、目录和文件服务器。

## 步骤 1：创建 IAM 访问角色
<a name="iam-roles"></a>

**使用 AWS 管理控制台 创建集群**

1. 请参阅 [Amazon ECS 容器实例 IAM 角色](instance_IAM_role.md) 来检查你是否有ecsInstanceRole，如果没有，查看你如何创建。

1. 我们建议为实际生产环境中的最低权限自定义角色策略。为了完成本教程，请验证以下 AWS 托管策略附加到您的 ecsInstanceRole 上。如果尚未附加策略，则附加策略。
   + AmazonEC2ContainerServiceforEC2Role
   + AmazonSSMManagedInstanceCore
   + AmazonSSMDirectoryServiceAccess

   要附加 AWS 托管策略

   1. 打开 [IAM 控制台](https://console.aws.amazon.com//iam/)。

   1. 在导航窗格中，选择**角色**。

   1. 选择 **AWS 托管角色**。

   1. 依次选择**权限、附加策略**。

   1. 要缩小要附加的可用策略范围，请使用**筛选条件**。

   1. 选择适当的策略，然后选择**附加策略**。

1. 请参阅 [Amazon ECS 任务执行 IAM 角色](task_execution_IAM_role.md) 来检查你是否有ecsTaskExecutionRole，如果没有，查看你如何创建。

   我们建议为实际生产环境中的最低权限自定义角色策略。为了完成本教程，请验证以下 AWS 托管策略附加到您的 ecsTaskExecutionRole上。如果尚未附加策略，则附加策略。使用上一节中给出的过程附加 AWS 托管策略。
   + SecretsManagerReadWrite
   + AmazonFSxReadOnlyAccess
   + AmazonSSMReadOnlyAccess
   + AmazonECSTaskExecutionRolePolicy

## 步骤 2：创建 Windows Active Directory（AD）
<a name="wfsx-create-ads"></a>

1. 按照《AWS Directory Service 管理指南》**中 [Creating your AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_getting_started.html#ms_ad_getting_started_create_directory) 部分描述的步骤进行操作。使用您为本教程指定的 VPC。在 *Creating your AWS Managed Microsoft AD* 的第 3 步中，保存用户名和管理员密码，以便在后续步骤中使用。另外，记下完全限定域名，以备后续步骤使用。在创建 Active Directory 时，您可以完成以下步骤。

1. 创建要在以下步骤中使用的 AWS Secrets Manager 密码。有关更多信息，请参阅《AWS Secrets Manager 用户指南》中的 [Get started with Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html#get-started)**。

   1. 打开 [Secrets Manager 控制台](https://console.aws.amazon.com//secretsmanager/)。

   1. 单击**存储新密钥**。

   1. 选择**其他密钥类型**。

   1. 对于**私有密钥/值**，在第一行创建值为 **admin** 的密钥 **username**。点击**\$1 添加行**。

   1. 在新行中，创建密钥 **password**。对于值，键入在*创建 AWS 托管 AD 目录*的步骤 3 中输入的密码。

   1. 点击**下一步**按钮。

   1. 提供密钥名称和说明。单击**下一步**。

   1. 单击**下一步**。单击**存储**。

   1. 在**密钥**列表页面上，单击您刚刚创建的密钥。

   1. 保存新密钥的 ARN，以便在以下步骤中使用。

   1. 您的 Active Directory 正在创建时，您可以继续执行下一步。

## 步骤 3：确认并更新安全组规则
<a name="wfsx-sg"></a>

在此步骤中，您将验证并更新您正在使用的安全组的规则。对此，您可以使用为 VPC 创建的原定设置安全组。

**验证并更新安全组。**

您需要创建或编辑安全组以从端口发送数据和向端口发送数据，在适用于 Windows File Server 的 FSx *用户指南*中的 [Amazon VPC 安全组](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/limit-access-security-groups.html#fsx-vpc-security-groups)中描述这些端口。您可以通过创建下表入站规则的第一行中显示的安全组入站规则来执行此操作。规则允许来自分配给相同安全组的网络接口（及其关联实例）的入站流量。您创建的所有云资源都位于同一 VPC 中，并连接到同一安全组。因此，此规则允许根据需要向适用于 Windows File Server 的 FSx 系统、Active Directory 和 ECS 实例发送流量。其他入站规则允许流量为网站提供服务，并允许 RDP 访问连接到 ECS 实例。

下表显示了本教程需要哪些安全组入站规则。


| Type | 协议 | 端口范围 | 来源 | 
| --- | --- | --- | --- | 
|  所有流量  |  All  |  全部  |  *sg-securitygroup*  | 
|  HTTPS  |  TCP  |  443  |  0.0.0.0/0  | 
|  RDP  |  TCP  |  3389  |  您的笔记本电脑 IP 地址  | 

下表显示了本教程所需的安全组出站规则。


| Type | 协议 | 端口范围 | 目标 | 
| --- | --- | --- | --- | 
|  所有流量  |  All  |  全部  |  0.0.0.0/0  | 

1. 打开[EC2 控制台](https://console.aws.amazon.com//ec2/)并从左侧菜单中选择**安全组**。

1. 从现在显示的安全组列表中，选中用于本教程的安全组左侧的复选框。

   显示您的安全组详细信息。

1. 通过选择**入站规则**或**出站规则**选项卡并选择**编辑入站规则**或**编辑出站规则**按钮来编辑入站和出站规则。编辑规则以匹配前表中显示的规则。在本教程的稍后阶段创建 EC2 实例后，按照《Amazon EC2 用户指南》中的[使用 RDP 连接到 Windows 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connecting_to_windows_instance.html)**部分所述，使用 EC2 实例的公有 IP 地址编辑入站规则 RDP 源。

## 步骤 4：创建适用于 Windows File Server 的 FSx 文件系统
<a name="wfsx-create-fsx"></a>

验证并更新安全组，创建 Active Directory 并处于活动状态后，在与 Active Directory 相同的 VPC 中创建适用于 Windows File Server 的 FSx 文件系统。使用以下步骤创建适用于 Windows File Server 的 FSx 文件系统供 Windows 任务使用。

**创建您的第一个文件系统。**

1. 打开 [Amazon FSx 控制台](https://console.aws.amazon.com//fsx/)。

1. 在控制面板上，选择**创建文件系统**以启动文件系统创建向导。

1. 在**选择文件系统类型**页面上，选择**适用于 Windows File Server 的 FSx**，然后选择**下一步**。显示**创建文件系统**页面。

1. 在**文件系统详细信息**部分中，为您的文件系统提供一个名称。命名您的文件系统可以更轻松地查找和管理它们。最多可以使用 256 个 Unicode 字符。允许的字符包括字母、数字、空格和特殊字符加号（\$1）。减号（-）、等号（=）、句点（.）、下划线（\$1）、冒号（:）和正斜杠（/）。

1. 对于**部署类型**，选择**单可用区**部署部署在单个可用区中的文件系统。*单可用区 2*是最新一代的单可用区文件系统，支持 SSD 和 HDD 存储。

1. 对于**存储类型**，选择 **HDD**。

1. 对于**存储容量**，输入最小存储容量。

1. 保持**吞吐能力**设置为默认设置。

1. 在**网络和安全**部分，选择您为 Directory Service 目录选择的同一个 Amazon VPC。

1. 对于**VPC 安全组**，选择选择在*步骤3：验证和更新安全组中验证的安全组*。

1. 对于**Windows 身份验证**，选择 **AWS托管 Microsoft Active Directory**，然后选择您的 Directory Service 目录。

1. 对于**加密**，请保留 **aws/fsx（默认）**的默认**加密密钥**设置。

1. 保留**维护首选项**的原定设置。

1. 点击**下一步**按钮。

1. 检查**创建文件系统**页面上显示的文件系统配置。请注意创建文件系统后可以修改的文件系统设置（供您参考）。选择**创建文件系统**。

1. 请记下文件系统 ID 值。您将在后面的步骤中用到它。

   在创建适用于 Windows File Server 的 FSx 文件系统时，您可以继续执行后续步骤以创建集群和 EC2 实例。

## 步骤 5：创建 Amazon ECS 集群
<a name="wfsx-create-cluster"></a>

**使用 Amazon ECS 控制台创建集群**

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 从导航栏中，选择要使用的区域。

1. 在导航窗格中，选择**集群**。

1. 在 **Clusters**（集群）页面上，选择 **Create cluster**（创建集群）。

1. 在**集群配置**下方的**集群名称**中，输入 **windows-fsx-cluster**。

1. 展开**基础设施**，清除 AWS Fargate（无服务器），然后选择 **Amazon EC2 实例**。

   1. 要创建 自动扩缩组，请从 **自动扩缩组（ASG）**（自动扩缩组（ASG））中，选择 **Create new group**（创建新组），然后提供有关组的以下详细信息：
     + 对于**操作系统/架构**，请选择 **Windows Server 2019 Core**。
     + 对于 **EC2 实例类型**，选择 t2.medium 或 t2.micro。

1. 选择**创建**。

## 步骤 6：创建经 Amazon ECS 优化的 Amazon EC2 实例
<a name="wfsx-create-instance"></a>

创建 Amazon ECS Windows 容器实例。

**创建 Amazon ECS 实例**

1. 使用 `aws ssm get-parameters` 命令检索托管您 VPC 的区域的 AMI 名称。有关更多信息，请参阅[检索经 Amazon ECS 优化的 AMI 元数据](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/retrieve-ecs-optimized_windows_AMI.html)。

1. 用来创建启动实例的 Amazon EC2 控制台。

   1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

   1. 从导航栏中，选择要使用的区域。

   1. 从 **EC2 控制面板**中，选择 **Launch Instance**（启动实例）。

   1. 对于**名称**，输入唯一的名称。

   1. 对于**应用程序和操作系统映像（亚马逊机器映像）**，在**搜索**字段中，输入您检索的 AMI 名称。

   1. 对于**实例类型**，选择 t2.medium 或 t2.micro。

   1. 对于**密钥对（登录）**，选择一个密钥对。如果您未指定密钥对，则您 

   1. 在**网络设置**下，对于 **VPC** 和**子网**，选择您的 VPC 和公有子网。

   1. 在 **Network settings**（网络设置）下，对于 **Security group**（安全组），可以选择现有安全组或创建新安全组。确保您选择的安全组在 [教程的先决条件](#wfsx-prerequisites) 中定义了入站和出站规则

   1. 在 **Network settings**（网络设置）下，对于 **Auto-assign Public IP**（自动分配公有 IP），选择 **Enable**（启用）。

   1. 展开**高级详细信息**，然后对于**域加入目录**，选择您创建的 Active Directory 的 ID。此选项域在 EC2 实例启动时加入您的 AD。

   1. 在 **Advanced details**（高级详细信息）下，对于 **IAM instance profile**（IAM 实例配置文件），选择 **ecsInstanceRole**。

   1. 使用以下用户数据配置您的 Amazon ECS 容器实例。在 **Advanced Details**（高级详细信息）下，将以下脚本粘贴到 **User data**（用户数据）字段中，将 *cluster\$1name* 替换为您的集群的名称。

      ```
      <powershell>
      Initialize-ECSAgent -Cluster windows-fsx-cluster -EnableTaskIAMRole
      </powershell>
      ```

   1. 准备好后，选中确认字段，然后选择 **Launch Instances**。

   1. 确认页面会让您知道自己的实例已启动。选择 **View Instances** 以关闭确认页面并返回控制台。

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在导航窗格中，选择**集群**，然后选择 **windows-fsx-cluster**。

1. 选择**基础设施**选项卡，验证您的实例是否已在 **windows-fsx-cluster** 集群中注册。

## 步骤 7：注册 Windows 任务定义
<a name="register_windows_task_def"></a>

您必须先注册任务定义，然后才能在 Amazon ECS 集群中运行 Windows 容器。以下任务定义示例显示一个简单网页。此任务将启动两个具有 FSX 文件系统访问权限的容器。第一个容器将 HTML 文件写入文件系统。第二个容器从文件系统下载 HTML 文件并提供网页。

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在导航窗格中，选择 **Task definitions**（任务定义）。

1. 选择 **Create new task definition**（创建新的任务定义）、**Create new task definition with JSON**（使用 JSON 创建新的任务定义）。

1. 在 JSON 编辑器框中，替换任务执行角色的值以及有关 FSx 文件系统的详细信息，然后选择**保存**。

   ```
   {
       "containerDefinitions": [
           {
               "entryPoint": [
                   "powershell",
                   "-Command"
               ],
               "portMappings": [],
               "command": ["New-Item -Path C:\\fsx-windows-dir\\index.html -ItemType file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>It Works!</h2> <p>You are using Amazon FSx for Windows File Server file system for persistent container storage.</p>' -Force"],
               "cpu": 512,
               "memory": 256,
               "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019",
               "essential": false,
               "name": "container1",
               "mountPoints": [
                   {
                       "sourceVolume": "fsx-windows-dir",
                       "containerPath": "C:\\fsx-windows-dir",
                       "readOnly": false
                   }
               ]
           },
           {
               "entryPoint": [
                   "powershell",
                   "-Command"
               ],
               "portMappings": [
                   {
                       "hostPort": 443,
                       "protocol": "tcp",
                       "containerPort": 80
                   }
               ],
               "command": ["Remove-Item -Recurse C:\\inetpub\\wwwroot\\* -Force; Start-Sleep -Seconds 120; Move-Item -Path C:\\fsx-windows-dir\\index.html -Destination C:\\inetpub\\wwwroot\\index.html -Force; C:\\ServiceMonitor.exe w3svc"],
               "mountPoints": [
                   {
                       "sourceVolume": "fsx-windows-dir",
                       "containerPath": "C:\\fsx-windows-dir",
                       "readOnly": false
                   }
               ],
               "cpu": 512,
               "memory": 256,
               "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019",
               "essential": true,
               "name": "container2"
           }
       ],
       "family": "fsx-windows",
       "executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole",
       "volumes": [
           {
               "name": "fsx-windows-dir",
               "fsxWindowsFileServerVolumeConfiguration": {
                   "fileSystemId": "fs-0eeb5730b2EXAMPLE",
                   "authorizationConfig": {
                       "domain": "example.com",
                       "credentialsParameter": "arn:arn-1234"
                   },
                   "rootDirectory": "share"
               }
           }
       ]
   }
   ```

## 步骤 8：运行任务并查看结果
<a name="wfsx-run-task"></a>

在运行任务之前，请验证适用于 Windows File Server 的 FSx 文件系统的状态是**Available**。可用后，您可以使用创建的任务定义运行任务。任务首先是创建容器，使用文件系统在它们之间随机打开 HTML 文件。随机打开后，Web 服务器提供简单的 HTML 页面。

**注意**  
您可能无法从 VPN 内连接到网站。

**使用 Amazon ECS 控制台运行任务并查看结果。**

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在导航窗格中，选择**集群**，然后选择 **windows-fsx-cluster**。

1. 选择**任务**选项卡，然后选择**运行新任务**。

1. 对于**启动类型**，选择 **EC2**。

1. 在部署配置下的**任务定义**中，选择 **fsx-windows**，然后选择**创建**。

1. 当您的任务状态为 **RUNNING** 时，选择任务 ID。

1. 在**容器**下，当 container1 状态为 **STOPPED** 时，选择 container2 以查看容器的详细信息。

1.  在 **container2 的容器详细信息**下，选择**网络绑定**，然后单击与容器关联的外部 IP 地址。您的浏览器将打开并显示以下消息。

   ```
   Amazon ECS Sample App
   It Works! 
   You are using Amazon FSx for Windows File Server file system for persistent container storage.
   ```
**注意**  
显示消息可能需要几分钟时间。如果您在几分钟后未看到此消息，请检查是否未在 VPN 中运行，并确保容器实例的安全组允许端口 443 上的入站网络 HTTP 通信。

## 步骤 9：清除
<a name="wfsx-cleanup"></a>

**注意**  
要花费 20 到45 分钟删除适用于 Windows File Server 的 FSx 文件系统或 AD。您必须等待，直到适用于 Windows File Server 的 FSx 文件系统删除操作完成，然后再开始 AD 删除操作。

**删除适用于 Windows File Server 的 FSx 文件系统。**

1. 打开 [Amazon FSx 控制台](https://console.aws.amazon.com//fsx/)。

1. 选择刚刚创建的适用于 Windows File Server 的 FSx 文件系统左侧的单选按钮。

1. 选择**操作**。

1. 选择**删除文件系统**。

**删除 AD。**

1. 打开 [Directory Service 控制台](https://console.aws.amazon.com//directoryservicev2/)。

1. 选择刚刚创建的 AD 左侧的单选按钮。

1. 选择**操作**。

1. 选择**删除目录**。

**请删除集群。**

1. 在 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2) 打开控制台。

1. 在导航窗格中，选择**集群**，然后选择 **windows-fsx-cluster**。

1. 选择**删除集群**。

1. 输入短语，然后选择**删除**。

**终止 EC2 实例。**

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

1. 从左侧菜单中，选择**实例**。

1. 选中您创建的 EC2 实例左侧的框。

1. 单击**实例状态**、**终止实例**。

**删除密钥。**

1. 打开 [Secrets Manager 控制台](https://console.aws.amazon.com//secretsmanager/)。

1. 选择您为本演练创建的密钥。

1. 点击**操作**。

1. 选择**删除密钥**。