使用 Docker、运行 脚本启动 EC2 并关闭

Start EC2 with Docker, run script and shut down

您好 Whosebug 社区,我有一个关于将 Docker 与 AWS EC2 结合使用的问题。我对 EC2 很满意,但对 Docker 还很陌生。我在 Python 3.6 中编写代码并希望自动执行以下过程:

1: 使用 Docker 启动一个 EC2 实例(Docker 图像存储在 ECR 中)

2:运行 一次性过程和 return 结果(我们称它为 "T")为 CSV 格式

3:在 AWS S3

中存储 "T"

4:关闭EC2

之所以使用 EC2 实例是因为该过程计算量很大,对我的本地计算机不可行。 Docker 的原因是为了确保整个团队和 CI 设施(目前使用 circle.ci)的开发环境相同。我了解与 AWS 的交互主要可以使用 Boto3 完成。

我一直在阅读有关 AWS 自己的 ECS 的文章,我觉得它更适合使用 Docker 部署网络应用程序,而不是 运行 一次性过程。但是,当我搜索 EC2 + Docker 时,除了 ECS 什么都没有出现。我也在 AWS 中完成了教程,但没有太大帮助。

我也考虑过使用 shell 脚本 运行ning EC2(即下载 docker、拉取镜像、构建容器等),但感觉有点老套?因此我的问题是:

1:ECS真的是他场景中最合适的方案吗? (或者换句话说,ECS是为这样的操作而设计的吗?)

2:如果有的话,有没有人使用 ECS 设置和 运行ning 一次性流程的例子? (我发现设置真的很混乱,尤其是使用的术语)

3:还有哪些其他选择(如果有的话)?

非常感谢您的帮助!

对您的流程了解不多;我想为您提供 2 个备选方案。

  1. 使用 Lambda

根据您的流程的计算密集程度,这可能不是一个可行的选择。但是,如果它是可以分发的东西,那么 Lambda 是很棒的。您可以找到有关资源限制 here 的更多信息。这条路线,您只需编写 Python 3.6 代码来执行您的任务并将 "T" 写入 S3。

  1. 使用数据管道

使用 Data Pipeline,您可以构建自定义 AMI (EC2) 并将其用作您的映像。然后,您可以指定 运行 此过程所需的 EC2 resource 大小。听起来你的过程会很简单。您需要定义:

  • EC2资源
    • 指定 AMI、角色、安全组、实例类型等
  • 外壳活动
    • Bootstrap 需要的 EC2 实例
    • 从 S3、GitHub 等获取您的代码
    • 执行您的代码(包括将 "T" 写入 S3 的代码)

您还可以将管道安排到 运行 在 interval/schedule 或直接从 boto3 调用它。