AWS Boto - 启动实例,部署Docker镜像,运行和终止

时间:2018-03-19 12:48:49

标签: python amazon-web-services boto boto3

我有一个网络抓取工具,它是一个Docker Image。我想使用boto创建EC2实例,部署我的爬虫,运行爬虫,然后在完成后终止实例。

我目前的想法是:

  • 使用包含Docker的AWS Image启动新的EC2实例。
  • 使用Fabric之类的SSH进入实例并安装Docker Image。
  • 使用相同的SSH连接运行我的命令以启动搜寻器
  • 让Web Crawler在完成时删除自己的实例。

一些细节:

  • 我真的需要使用像Fabric这样的工具来SSH到我的实例并运行命令吗?
  • 如何选择当前正在运行脚本的实例?如果您愿意,请phpinfo(INFO_VARIABLES); 个实例。
  • 有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

我的建议是创建一个简单的HTTP API并直接调用它。以编程方式进行SSH通常很尴尬。这就是我要做的事情:

  1. 实施HTTP端点以启动爬网程序。您需要一个框架来完成这项工作,例如Flask:

    from flask import Flask, request, Response
    
    # Initialize the Flask application
    app = Flask(__name__)
    
    @app.route('/api/start_crawler', methods=['POST'])
    def segmentation_endpoint():
        r = request
        # r is now the request object. You can use it to pass additional info
        # implement the starting of the crawler here
    
    # start flask app
    app.run(host="0.0.0.0", port=5000)
    
  2. 启动时启动docker容器。为此,请在启动实例时添加用户数据,例如: #!/bin/bash docker run -p 80:<PORT> <image>:<tag>

  3. 现在,您可以通过调用端点随时启动搜寻器。

    要在停止时删除实例,您可以从注释中提到的/latest/meta-data/instance-id获取实例ID,然后使用boto3,例如:

    # Boto 3
    import boto3
    ec2 = boto3.resource('ec2')
    ec2.instances.filter(InstanceIds=ids).terminate()