教程:将 Amazon FSx for Windows File Server 文件系统与 Amazon ECS 结合使用 - Amazon Elastic Container Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

教程:将 Amazon FSx for Windows File Server 文件系统与 Amazon ECS 结合使用

Amazon FSx for Windows File Server 提供了完全托管的 Microsoft Windows 文件服务器,由完全原生的 Windows 文件系统提供支持。在将 Amazon FSx for Windows File Server 与 ECS 一起使用时,您可以为 Windows 任务预置持久的、分布式的、共享的静态文件存储。有关更多信息,请参阅 用户指南Amazon FSx for Windows File Server 中的什么是 ?Amazon FSx for Windows File Server。

您可以使用 Amazon FSx for Windows File Server 部署需要访问共享外部存储、高可用性区域存储或高吞吐量存储的 Windows 工作负载。您可以将一个或多个 Amazon FSx for Windows File Server 文件系统卷挂载到 ECS Windows 实例上运行的 ECS 容器。您可以在单个 ECS 任务中的多个 ECS 容器之间共享 Amazon FSx for Windows File Server 文件系统卷。

注意

Amazon FSx for Windows File Server 可能并非在所有区域中都可用。有关哪些区域支持 Amazon FSx for Windows File Server 的更多信息,请参阅 中的 Amazon FSx 终端节点和配额AWS General Reference

在本教程中,您将启动一个 ECS 优化的 Windows 实例,该实例托管 Amazon FSx for Windows File Server 文件系统以及可访问该文件系统的容器。为此,您首先要创建一个 AWS Directory Service AWS 托管的 Microsoft Active Directory。然后,创建 Amazon FSx for Windows File Server 文件系统以及包含 ECS 实例和 ECS 任务定义的 ECS 集群。您可以为容器配置任务定义以使用 Amazon FSx for Windows File Server 文件系统。最后,测试文件系统。

每次启动或删除 Active Directory 或 Amazon FSx for Windows File Server 文件系统时,需要 20 到 45 分钟的时间。准备预留至少 90 分钟以完成本教程或通过几个会话完成本教程。

教程的先决条件

  • 具有管理员访问权限的 IAM 账户。请参阅使用 进行设置Amazon ECS.

  • (可选)用于通过 RDP 访问连接到 EC2 Windows 实例的 pem 密钥对。有关如何创建密钥对的信息,请参阅适用于 Windows 实例的用户指南中的 Amazon EC2 密钥对和 Windows 实例

  • 一个 VPC,其中至少有一个公有子网和一个私有子网和一个安全组。您可以使用默认 VPC。您不需要 NAT 网关或设备。AWS Directory Service 不支持 Active Directory 使用网络地址转换 (NAT)。为此,Active Directory、Amazon FSx for Windows File Server 文件系统、ECS 集群和 ECS 实例必须位于您的 VPC 中。有关 VPC 和 Active Directory 的更多信息,请参阅 Amazon VPC 控制台向导配置AWS 托管的 Microsoft AD 先决条件

  • IAM ecsInstanceRole 和 ecsTaskExecutionRole 权限与您的账户关联。这些服务相关角色允许 服务代表您进行 API 调用并访问容器、密钥、目录和文件服务器。

步骤 1:创建 IAM 访问角色

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

  1. 请参阅Amazon ECS 容器实例 IAM 角色以检查您是否拥有 ecsInstanceRole,并了解如何创建一个(如果您没有)。

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

    • AmazonEC2ContainerServiceforEC2Role

    附加 AWS 托管策略。

    1. 打开 IAM 控制台.

    2. 在导航窗格中,选择 Roles

    3. 选择 AWS 托管角色.

    4. 依次选择 Permissions (权限)、Attach policies (附加策略)

    5. 要缩小要附加的可用策略的范围,请使用 Filter

    6. 选择适当的策略,然后选择 Attach policy (附加策略)

  3. 请参阅Amazon ECS 任务执行 IAM 角色以检查您是否具有 ecsTaskExecutionRole,并了解如何创建一个(如果您没有)。

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

    • SecretsManagerReadWrite

    • AmazonFSx只读访问

    • AmazonSSM 只读访问

    • AmazonECSTaskExecutionRolePolicy

步骤 2:创建 Windows Active Directory (AD)

  1. 按照 AWS 目录服务管理指南创建 AWS 托管 AD 目录中所述的步骤操作。使用您为本教程指定的 VPC。在创建 AWS 托管 AD 目录的步骤 3 中,保存用户名和密码以在以下步骤中使用。此外,记下未来步骤的完全限定域名。在创建 Active Directory 时,您可以继续完成以下步骤。

  2. 创建一个 AWS Secrets Manager 密钥以在以下步骤中使用。有关更多信息,请参阅 AWS Secrets Manager 用户指南 中的 AWS Secrets Manager 入门

    1. 打开 Secrets Manager 控制台.

    2. 单击 Store a new secret (存储新密钥)

    3. 选择 Other type of secrets

    4. 对于 Secret key/value (密钥键/值),在第一行创建一个值为 username 的键 admin。单击 + Add row (+ 添加行)

    5. 在新行中,创建一个键 password。对于值,请键入您在创建 AWS 托管 AD 目录的步骤 3 中输入的密码。

    6. 单击 Next (下一步) 按钮。

    7. 提供密钥名称和描述。单击 Next (下一步).

    8. 单击 Next (下一步). 单击 Store (存储)

    9. Secrets (密钥) 页面列表中,单击刚创建的密钥。

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

    11. 在创建 Active Directory 时,您可以继续执行下一步。

步骤 3:验证和更新您的安全组

在此步骤中,您将验证和更新所使用的安全组的规则。为此,您可以使用为 VPC 创建的默认安全组。

验证和更新安全组。

您需要创建或编辑您的安全组,以便从端口发送数据和向端口发送数据,如 https://docs.amazonaws.cn/fsx/latest/WindowsGuide/limit-access-security-groups.html#fsx-vpc-security-groups 用户指南 中的 Amazon FSx for Windows File ServerAmazon VPC 安全组所述。您可以通过创建安全组入站规则来执行此操作,该规则显示在以下入站规则表格的第一行中。此规则允许来自分配给安全组的网络接口(及其关联实例)的入站流量。您创建的所有云资源位于同一 VPC 中,并附加到同一安全组。因此,此规则允许根据需要将流量发送到 Amazon FSx for Windows File Server 文件系统、Active Directory 和 ECS 实例以及从中发送流量。其他入站规则允许流量提供网站和 RDP 访问,以便连接到 ECS 实例。

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

Type 协议 端口范围

所有流量

全部

全部

sg-securitygroup

自定义 TCP

TCP

8080

0.0.0.0/0

RDP

TCP

3389

您的 EC2 实例公有 IP 地址

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

Type 协议 端口范围 目的地

所有流量

全部

全部

0.0.0.0/0

  1. 打开 EC2 控制台,然后从左侧菜单中选择安全组

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

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

  3. 通过选择 Inbound rules (入站规则)Outbound rules (出站规则) 选项卡并选择 Edit inbound rules (编辑入站规则)Edit outbound rules (编辑出站规则) 按钮来编辑入站和出站规则。编辑规则以匹配前面表中显示的规则。在本教程后面创建 EC2 实例后,请使用 EC2 实例的公有 IP 地址编辑入站规则 RDP 源,如适用于 Windows 实例的 Amazon EC2 用户指南 中的连接到 Windows 实例所述。

步骤 4:创建 Amazon FSx for Windows File Server 文件系统

在验证和更新您的安全组并创建 Active Directory 并使其处于活动状态后,在与 Active Directory 相同的 VPC 中创建 Amazon FSx for Windows File Server 文件系统。可以使用以下步骤为您的 Windows 任务创建 Amazon FSx for Windows File Server 文件系统。

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

  1. 打开 Amazon FSx 控制台.

  2. 在控制面板上,选择 Create file system (创建文件系统) 以启动文件系统创建向导。

  3. Select file system type (选择文件系统类型) 页面上,选择 Amazon FSx for Windows File Server,然后选择 Next (下一步)。此时将显示 Create file system (创建文件系统) 页面。

  4. File system details (文件系统详细信息) 部分中,提供文件系统的名称。为文件系统命名可以更轻松地查找和管理它们。您最多可以使用 256 个 Unicode 字符。允许使用的字符包括字母、数字、空格和特殊字符加号 (+)、减号 (-)、等号 (=)、句点 (.)、下划线 (_)、冒号 (:) 和正斜杠 (/)。

  5. 对于 Deployment type (部署类型),选择 Single-AZ (单可用区) 以部署在单个可用区中部署的文件系统。 单可用区 2 是最新一代单可用区文件系统,支持 SSD 和 HDD 存储。

  6. 对于 Storage type (存储类型),选择 HDD

  7. 对于 Storage capacity (存储容量),请输入最小存储容量。

  8. Throughput capacity (吞吐量容量) 保留为默认设置。

  9. Network & security (网络和安全性) 部分中,选择您为 Amazon VPC 目录选择的同一个 AWS Directory Service。

  10. 对于 VPC Security Groups,选择您在 Step 3: Verify and update your security group 中验证的安全组。

  11. 对于 Windows 身份验证,选择 AWS Managed Microsoft Active Directory,然后从列表中选择您的 AWS Directory Service 目录。

  12. 对于 Encryption (加密),请保留 aws/fsx (default) (aws/fsx (默认)) 的默认 Encryption key (加密密钥) 设置。

  13. 保留 Maintenance preferences (维护首选项) 的默认设置。

  14. 单击 Next (下一步) 按钮。

  15. 查看 Create file system (创建文件系统) 页面上显示的文件系统配置。为方便您参考,请注意您可以在创建文件系统后修改哪些文件系统设置。选择 Create file system.

  16. 记下文件系统 ID。您需要在后面的步骤中使用该名称。

    在创建 Amazon FSx for Windows File Server 文件系统时,您可以继续执行后续步骤来创建集群和 EC2 实例。

步骤 5:创建 Amazon ECS 集群

使用 () 创建 集群。AWS 管理控制台.

  1. 打开 Amazon ECS 控制台.

  2. 在导航窗格中,选择 Clusters.

  3. Clusters 页面上,选择 Create Cluster.

  4. 选择 EC2 Windows + Networking,然后选择 Next step.

  5. 对于 Cluster name (集群名称),输入 windows-fsx-cluster

  6. 单击集群名称下的复选框以创建一个空集群

  7. 单击 Create 按钮。

  8. 在成功创建集群后,单击 View Cluster (查看集群) 按钮。

    您现在位于一个页面上,可在其中查看集群的详细信息。

步骤 6:创建 Amazon ECS 实例

在您刚使用 AWS 管理控制台 创建的 ECS 集群中启动经 ECS 优化的 Windows EC2 实例。

  1. 转到 Amazon ECS经 优化的 Windows AMIsAmazon ECS 开发人员指南 中的 ,以在您的 VPC 所在的同一区域中查找 Windows Server 2019 Full AMI 的最新版本。

  2. 您可以使用以下步骤之一获取最新版本。

    向下滚动到 Windows Server 2019 Full AMI 表。

    1. 在表中查找您所在区域的最新版本。单击 View AMI ID (查看 AMI ID) 链接以找到最新版本的 AMI ID。保存 AMI ID 的副本以供后续步骤使用。

    2. 使用 AWS CLI 运行给定的 Systems Manager 命令并保存返回的 AMI ID 的副本。

  3. 打开 Amazon EC2 控制台.

  4. 单击 Launch Instance 按钮并选择 Launch Instance

    您现在位于列出了可用 EC2 实例的页面上。

  5. 为您的 EC2 实例选择一个 AMI。

    1. Quick Start (快速启动) 下,单击 Community AMIs (社区 AMI)

    2. search (搜索) 字段中,输入您在上一步中保存的 AMI ID 并按 return。

    3. 选择与您在上一步中保存的 AMI ID 匹配的 Windows Server 2019 Full AMI。

      您现在位于列出实例类型的页面上。

  6. 对于 Instance type (实例类型) 页面,选择 t2.medium 或 t2.micro,然后单击 Next: Configure Instance Details (下一步: 配置实例详细信息)

  7. 配置实例详细信息。

    1. Configure Instance Details 页面上,为 Number of Instances 输入 1。

    2. 对于 Network (网络),选择您的 VPC。

    3. 对于 Subnets (子网),选择公有子网。

    4. EnableAuto-assign Public IP 选择

    5. 对于 Domain join directory,选择您创建的 Active Directory 的 ID。此选项域在 EC2 实例启动时加入您的 AD。

    6. 对于 IAM role (IAM 角色),从下拉菜单中选择您的 ecsInstanceRole

    7. 滚动到页面底部,然后在 User data (用户数据) 文本字段中输入以下内容。

      <powershell> Initialize-ECSAgent -Cluster windows-fsx-cluster -EnableTaskIAMRole </powershell>
    8. 单击 Next: Add Storage (下一步: 添加存储) 按钮。

    9. 单击 Next: Add Tags 按钮。

    10. 单击 Next: Configure Security Group 按钮。

  8. Configure Security Group 页面上,选择您在 Step 3: Verify and update your security group 中验证和更新的安全组。如果它不存在,请添加一个入站 RDP TCP 规则,以允许来自 EC2 实例 IP 地址的流量通过端口 3389(如果您希望能够 RDP 到您的实例中)。

  9. 单击 Review and Launch 按钮。

  10. Review Instance Launch 页面上,单击 Launch 按钮。

  11. 对于 Key pair (密钥对),选择要用于容器实例以进行 RDP 访问的 Amazon EC2 密钥对。如果未指定密钥对,则无法使用 RDP 连接到容器实例。有关更多信息,请参阅 教程的先决条件.

  12. 单击 View instance (查看实例) 以在实例列表中查看新实例状态。

  13. 打开 Amazon ECS 控制台并选择 Clusters (集群)

  14. 选择您的 fsx-windows-cluster 集群。

  15. 选择 ECS Instances 选项卡,并验证您的 ECS 实例是否已在 fsx-windows-cluster 集群中注册。

步骤 7:注册 Windows 任务定义

您必须先注册任务定义,然后才能在 Amazon ECS 集群中运行 Windows 容器。以下任务定义示例在容器实例的端口 8080 上显示简单网页。该任务启动两个可以访问 FSx 文件系统的容器。第一个容器将 HTML 文件写入文件系统。第二个容器从文件系统下载 HTML 文件并提供网页服务。

向 AWS 管理控制台 注册示例任务定义。

  1. 打开 Amazon ECS 控制台.

  2. 在导航窗格中,选择 Task Definitions.

  3. Task Definitions (任务定义) 页面上,选择 Create new Task Definition (创建新任务定义).

  4. Select launch type compatibilities (选择启动类型兼容性) 页面上,选择 EC2,然后选择 Next step (下一步)

    注意

    启动类型与 Windows 容器不兼容。Fargate

  5. Create new Task Definition 页面上,滚动到页面底部并选择 Configure via JSON

  6. 将以下示例任务定义 JSON 粘贴到文本区域(替换预填充的 JSON),然后选择 Save (保存)

    { "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": "microsoft/iis", "essential": false, "name": "container1" }, { "entryPoint": [ "powershell", "-Command" ], "portMappings": [ { "hostPort": 8080, "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" ], "cpu": 512, "memory": 256, "image": "microsoft/iis", "essential": true, "name": "container2" } ], "family": "fsx-windows" }
  7. Configure via JSON (通过 JSON 配置) 按钮的正上方,单击 Add volume (添加卷) 左侧的 plus sign (加号)

    1. 对于 Volume type (卷类型),选择 Amazon FSx for Windows File Server

    2. 对于 Name (名称),输入 fsx-windows-vol 并保存它以用于以下步骤。

    3. 对于 File system ID (文件系统 ID),选择您在前面的步骤中创建的 Amazon FSx for Windows File Server 文件系统的 ID。

    4. 对于 Root Directory (根目录),输入 share

    5. 对于 Credentials parameter (凭证参数),输入您在前面的步骤中使用 Secrets Manager 创建的密钥的 ARN。

    6. 对于 Domain (域),输入您的 Active Directory 完全限定域名。

  8. 单击 Container Definitions (容器定义) 下的 container1

  9. 滚动到 STORAGE AND LOGGING,对于 Mount pointsSource volume,从下拉菜单中选择 fsx-windows-vol

  10. 对于 Container path (容器路径),输入 C:\fsx-windows-dir

  11. 单击 Update (更新) 按钮。

  12. Container Definitions (容器定义) 下的 container2 重复最后四个步骤。

  13. 对于 Task execution role (任务执行角色),从下拉菜单中选择您的 ecsTaskExecutionRole

  14. 验证您的信息,然后单击 Create 按钮。

步骤 8:运行任务并查看结果

在运行任务之前,请验证 Amazon FSx for Windows File Server 文件系统的状态是否为可用。在任务可用后,您可以使用您创建的任务定义运行任务。该任务首先创建容器,这些容器使用 文件系统在它们之间随机排序 HTML 文件。在随机排序后,Web 服务器将提供简单的 HTML 页面。

注意

您可能无法在 VPN 中连接到网站。

运行任务并查看结果。

  1. 打开 Amazon ECS 控制台.

  2. 选择您的 fsx-windows-cluster 集群。

  3. 选择 Tasks (任务) 选项卡,然后选择 Run new task (运行新任务)

  4. 对于 Launch Type (启动类型),选择 EC2。

  5. 对于 Task Definition (任务定义),选择您创建的 fsx-windows 任务定义,然后选择 Run Task (运行任务)

  6. Tasks (任务) 选项卡下,选择刚刚运行的任务。您的任务将显示在任务列表中。

  7. 当您的任务状态为 RUNNING (正在运行) 时,单击任务 ID。

  8. 展开 container2。

  9. 向下滚动并单击与容器关联的外部 IP 地址。您的浏览器将打开并显示以下消息。

    注意

    如果您没有看到此消息,请检查您没有在 VPN 中运行,并确保容器实例的安全组允许端口 8080 上的入站网络 HTTP 流量。

步骤 9:清除

注意

删除 Amazon FSx for Windows File Server 文件系统或 AD 需要 20 到 45 分钟。您必须等待 Amazon FSx for Windows File Server 文件系统删除操作完成,然后才能开始 AD 删除操作。

删除 Amazon FSx for Windows File Server 文件系统。

  1. 打开 Amazon FSx 控制台

  2. 单击您刚刚创建的 Amazon FSx for Windows File Server 文件系统左侧的单选按钮。

  3. 单击 Actions (操作)

  4. 选择 Delete file system (删除文件系统)

删除 AD。

  1. 打开 AWS Directory Service 控制台.

  2. 单击刚创建的 AD 左侧的单选按钮。

  3. 单击 Actions (操作)

  4. 选择 Delete directory

删除 ECS 集群。

  1. 打开 Amazon ECS 控制台.

  2. 选择 Clusters (集群)

  3. 选择您刚刚创建的集群。

  4. 单击 Delete Cluster (删除集群) 按钮。

删除 ECS 实例。

  1. 打开 Amazon EC2 控制台.

  2. 从左侧菜单中,选择 Instances (实例)

  3. 选中您在本练习中创建的 EC2 实例左侧的复选框。

  4. 单击 Instance state (实例状态),然后单击 Terminate instance (终止实例)

删除密钥。

  1. 打开 Secrets Manager 控制台.

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

  3. 单击 Actions (操作)

  4. 选择 Delete secret (删除密钥)