Q18 — AWS SAA-C03 第17章
第 18/89 题 | ← 返回第17章
Q1318. 一家公司在其本地数据中心运行一个使用 Docker 容器的应用程序。该应用程序运行在容器主机上,该主机将持久化数据文件存储在本地卷中。容器实例使用这些存储的持久化数据。该公司希望将应用程序迁移到完全托管的 AWS 服务。哪种解决方案能够满足这些要求?
- A. 使用 Amazon Elastic Kubernetes Service (Amazon EKS) 和自管理节点。将 Amazon Elastic Block Store (Amazon EBS) 卷附加到 Amazon EC2 实例。将 EBS 卷挂载到容器上以提供持久存储。
- B. 使用 Amazon Elastic Container Service (Amazon ECS) 和 AWS Fargate 启动类型。创建 Amazon Elastic File System (Amazon EFS) 卷。将 EFS 卷挂载到容器上以提供持久存储。 ✓
- C. 使用 Amazon Elastic Container Service (Amazon ECS) 和 AWS Fargate 启动类型。创建一个 Amazon DynamoDB 表。配置应用程序以使用该 DynamoDB 表作为持久存储。
- D. 使用 Amazon Elastic Container Service (Amazon ECS),启动类型选择 Amazon EC2。创建 Amazon Elastic File System (Amazon EFS) 卷。将 EFS 卷挂载到容器上以提供持久存储。
正确答案: B. 使用 Amazon Elastic Container Service (Amazon ECS) 和 AWS Fargate 启动类型。创建 Amazon Elastic File System (Amazon EFS) 卷。将 EFS 卷挂载到容器上以提供持久存储。
解析
将基于 Docker 的应用程序迁移到 AWS 并使用持久存储和完全托管服务,满足所有要求的正确解决方案是:B. 使用 Amazon Elastic Container Service (Amazon ECS) 和 AWS Fargate 启动类型。创建 Amazon Elastic File System (Amazon EFS) 卷。将 EFS 卷挂载到容器上以提供持久存储。为什么选项 B 正确:全托管服务Amazon ECS with Fargate 是一种无服务器容器编排服务,这意味着 AWS 管理底层基础设施(无需管理 EC2 实例)。Amazon EFS 是一个完全托管、可扩展的 NFS 文件系统,可与 Fargate 无缝协作,实现持久存储。持久存储支持EFS 卷可以直接挂载到 Fargate 任务中,使容器能够访问共享的持久数据(类似于本地卷,但具有可扩展性和高可用性)。EFS 可根据存储需求自动扩展,并在可用区 (AZ) 之间进行复制,以实现高持久性。无服务器管理与 EC2 的 ECS(选项 D)或自管理节点的 EKS(选项 A)不同,Fargate 无需管理服务器、补丁或扩展策略。其他选项为何错误:A. 使用 Amazon EKS 的自管理节点 + EC2 上的 EBS 卷。并非完全托管:EKS 的自管理节点需要配置和维护 EC2 实例。EBS 的限制:EBS 卷是块存储,绑定到单个 EC2 实例(不像 EFS 那样可以在多个容器/任务之间共享)。C. 使用 Amazon ECS 搭配 Fargate + DynamoDB 进行持久化存储。存储类型错误:DynamoDB 是 NoSQL 数据库,而非文件系统。依赖基于文件的持久化存储(例如,存储日志、配置文件或用户上传文件)的应用程序无法直接使用 DynamoDB。D. 使用 Amazon ECS,启动类型为 EC2 + EFS 卷并非完全托管:EC2 启动类型需要管理 EC2 实例(扩展、修补等),这与完全托管服务的要求相矛盾。方案B的实施步骤:使用 Fargate 设置 Amazon ECS前往 Amazon ECS 创建集群,然后选择“仅网络”(Fargate 不需要 EC2 实例)。为集群配置 VPC 和子网。创建 Amazon EFS 文件系统前往 Amazon EFS 创建文件系统。选择与 ECS 集群相同的 VPC,并在每个可用区配置挂载目标以实现高可用性。启用加密(KMS)和生命周期策略(例如,过渡到不频繁访问以节省成本)。使用 EFS 卷定义 ECS 任务定义在 ECS 控制台中,创建任务定义(JSON 或基于 UI 的)。在“容器定义”下,指定 Docker 镜像并配置“存储和日志记录”。通过提供文件系统 ID 和访问点(用于细粒度权限控制,此步骤为可选)来添加 EFS 卷。示例(JSON 代码片段):JSON“卷”:[{"name": "efs-volume","efsVolumeConfiguration": {"fileSystemId": "fs-12345678","rootDirectory": "/","transitEncryption": "已启用","authorizationConfig": {"accessPointId": "fsap-12345678"}}}],"containerDefinitions": [{"name": "app-container","image": "你的 Docker 镜像","mountPoints": [{"sourceVolume": "efs-volume","containerPath": "/app/data",“只读”:否}]}]运行 ECS 任务或服务可以将任务部署为一次性任务或服务(适用于长时间运行的应用程序)。如果使用服务,则可以根据 CPU/内存使用情况或自定义 CloudWatch 指标配置扩展策略。验证持久存储任务运行后,通过 SSH 连接到容器(或检查日志)以确认写入 /app/data 的文件在任务重启后仍然存在。通过停止/启动任务进行测试——数据应该保持不变。关键考虑因素:表现:EFS 的延迟比 EBS 高(因为使用 NFS 协议),但它是共享的且可扩展的。对于高性能工作负载,可以考虑使用 EFS 预置吞吐量(按专用 IOPS 付费)。安全:使用 EFS 访问点将容器访问限制在特定目录。启用 EFS 的 VPC 端点,以确保流量在 AWS 网络内流动。对静态数据(KMS)和传输中数据(TLS)进行加密。成本优化:EFS 的定价基于存储空间使用量(GB/月)和请求成本(元数据操作)。使用生命周期策略将不常用的文件迁移到 EFS 不常用访问 (EFS IA) 以降低成本。结论:选项 B 是最佳选择,因为它结合了完全托管的 ECS Fargate(无需服务器管理)和 EFS(可扩展的共享持久存储)。其他选项要么引入了不必要的复杂性(A、D),要么使用了错误的存储类型(C)。