【问题标题】:Start EC2 with Docker, run script and shut down使用 Docker 启动 EC2,运行脚本并关闭
【发布时间】:2017-09-20 05:42:20
【问题描述】:

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

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

2:运行一次性流程并以 CSV 格式返回结果(我们称之为“T”)

3:在 AWS S3 中存储“T”

4:关闭 EC2

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

我一直在阅读有关 AWS 自己的 ECS 的信息,我感觉它更适合使用 Docker 部署 Web 应用程序,而不是运行一次性流程。然而,当我在 EC2 + Docker 周围搜索时,除了 ECS 什么都没有出现。我也在 AWS 中完成了教程,但没有多大帮助。

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

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

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

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

非常感谢您的帮助!

【问题讨论】:

    标签: docker amazon-ec2 amazon-ecs


    【解决方案1】:

    在不了解您的流程的情况下;我想为你提出 2 个替代方案。

    1. 使用 Lambda

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

    1. 使用数据管道

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

    • EC2 资源
      • 指定 AMI、角色、安全组、实例类型等。
    • ShellActivity
      • 根据需要引导 EC2 实例
      • 从 S3、GitHub 等获取您的代码
      • 执行您的代码(包括在您的代码中将“T”写入 S3)

    您还可以安排管道以间隔/计划运行或直接从boto3 调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-15
      • 2020-04-20
      • 2017-08-20
      • 2016-06-08
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 2013-06-26
      相关资源
      最近更新 更多