ECS 与 EFS 或 EBS 上的持久数据与 CloudFormation

Posted

技术标签:

【中文标题】ECS 与 EFS 或 EBS 上的持久数据与 CloudFormation【英文标题】:ECS with persistent data on EFS or EBS with CloudFormation 【发布时间】:2018-09-22 12:58:06 【问题描述】:

我正在寻找一些 AWS 专家来帮助我解决这个问题。我花了将近一周的时间尝试将我的后端 docker 映像部署到 AWS,但没有 100% 的预期行为。

首先有人建议我试用 AWS 最近提供的新 Fargate 服务。我设法部署了我需要的一切,但很快发现我需要任何类型的数据持久性,而据我所读的内容来看,目前 Fargate 不可用。

我发现这些模板非常有用,因为 AWS 太大了而且势不可挡,所以如果没有这些我什么都不会做,目前我尝试使用 EC2 实例进行部署。 https://github.com/awslabs/aws-cloudformation-templates/tree/master/aws/services/ECS/EC2LaunchType

我对这种部署有疑问: 1:为什么此部署会为集群创建 2 个 EBS 实例?一个 8GB 带快照,第二个 22GB 不带快照。

2:是否可以减少这些 EBS 卷的大小?如果有怎么办?

3:是否可以只拥有其中一个 EBS?

4: 是否可以将卷从我的 docker 后端映像挂载到那些 EBS 卷以保存数据?如果有怎么办?我需要为我的后端安装两个卷,即 /root/.local/share/Bisq /root/.local/share/bisq-api~/.local/share/Bisq ~/.local/share/bisq-api 我不太确定这如何与 AWS 配合使用。与本地环境的步骤相比,路径是什么。

5:使用 EBS 或 EFS 进行数据持久化会更好吗? EFS 的问题是我找不到任何相关文档如何将 EFS 连接到这种 ECS 部署。一切都必须使用 CloudFormation 模板

符合 100% 期望行为的总体要求是:

1:CloudFormation 模板/模板尽可能少地部署必要的服务,以免构建庞大的基础设施来保留成本和只需单击按钮并获取到后端服务的外部链接的能力。 (不能有任何手动配置,一切都必须自动化)

2:能够停止/启动后端容器的 EC2 实例(EC2 将每天运行几分钟到几小时/每月几天。(取决于每个用户场景他使用后端的频率)

3:能够在用户停止实例然后在将来的时间点启动它时保留数据。

我会感谢任何帮助/建议,因为我开始对连接到 AWS 服务的所有内容失去理智。要了解 AWS 的任何用例,这确实是个大问题,因此我将不胜感激

谢谢!

【问题讨论】:

如果您使用 Fargate 启动类型,目前无法保持卷持久化。要在 ECS 中使用持久共享卷,您应该使用 EC2 启动类型,您可以参考此文档:docs.aws.amazon.com/AmazonECS/latest/developerguide/… 【参考方案1】:

1:为什么此部署会为集群创建 2 个 EBS 实例?一个 8GB 带快照,第二个 22GB 不带快照。

根据文档:

Amazon ECS 优化 AMI 从 2015.09.d 和更高版本启动,带有 8-GiB 的操作系统卷,附加在 /dev/xvda 并作为文件系统的根挂载。在 /dev/xvdcz 附加了一个额外的 22-GiB 卷,Docker 将其用于图像和元数据存储。

这里参考:ecs-ami-storage-config

2:是否可以减少这些 EBS 卷的大小?如果有怎么办?

也来自相同的文档:

您可以通过在启动实例时更改实例的块储存设备映射设置来增加这些默认卷大小;但是,您不能指定比默认值更小的卷大小。

3:是否可以只拥有其中一个 EBS?

为此,您可以更好地使用自定义 AMI 并根据需要对其进行配置。

4:是否可以将卷从我的 docker 后端映像挂载到那些 EBS 卷以保存数据?如果有怎么办?我需要为我的后端安装两个卷,即 /root/.local/share/Bisq /root/.local/share/bisq-api 或 ~/.local/share/Bisq ~/.local/share/bisq-api我不太确定这如何与 AWS 一起使用。与本地环境的步骤相比,路径是什么。

这是在任务定义中配置的: AWS::ECS::TaskDefinition

Type: AWS::ECS::TaskDefinition
Properties: 
  Volumes:
    - Volume Definition
  ...

5:使用 EBS 或 EFS 进行数据持久化会更好吗? EFS 的问题是我找不到任何相关文档如何将 EFS 连接到这种 ECS 部署。一切都必须使用 CloudFormation 模板

这取决于您的用例场景。每个都有优点和缺点,具体取决于您的需求,因此最好阅读每个文档并相应地选择最好的文档。在您找到的模板中,您可以自定义 LaunchConfiguration UserData 以运行附加命令。您可以在 CloudFormation 中完成所有这些操作。

另外我会给你留下这个文档来自动挂载一个 EFS:Mounting Your Amazon EFS File System Automatically

【讨论】:

以上是关于ECS 与 EFS 或 EBS 上的持久数据与 CloudFormation的主要内容,如果未能解决你的问题,请参考以下文章

将一个 VPC 中的 EBS 卷数据传输到另一个 VPC 中的 EFS

AWS EFS vs EBS vs S3(差异和何时使用?)[关闭]

在 ECS 中附加卷 EFS

ECS Fargate 上的 EFS 挂载 - 非 root 用户的读/写权限被拒绝

ECS CLI - 启动容器实例时挂载 EFS

如何在 aws EFS 上挂载 aws EC2 文件作为持久卷?