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

时间:2017-09-19 11:04:36

标签: docker amazon-ec2 amazon-ecs

您好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:有哪些其他选择(如果有的话)?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

不了解您的流程;我想为你提供两种选择。

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

    1. 使用数据管道
    2. 使用Data Pipeline,您可以构建自定义AMI(EC2)并将其用作图像。然后,您可以指定运行此过程所需的EC2 resource的大小。听起来你的过程非常简单。您需要定义:

      • EC2resource
        • 指定AMI,角色,安全组,实例类型等
      • ShellActivity
        • 根据需要引导EC2实例
        • 从S3,GitHub等处获取代码
        • 执行您的代码(包含在代码编写中,#34; T"包含在S3中)

      您还可以安排管道以间隔/时间表运行,或直接从boto3调用。