Skip to main content
 首页 » 编程设计

python之AWS Boto之启动实例、部署 Docker 镜像、运行和终止

2025年01月19日33Free-Thinker

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

我目前的想法是这样的:

  • 使用包含 Docker 的 AWS 镜像启动新的 EC2 实例。
  • 使用 Fabric 之类的工具通过 SSH 连接到实例并安装 Docker 镜像。
  • 使用相同的 SSH 连接运行我的命令以启动爬虫
  • 让网络爬虫在完成时删除自己的实例。

一些细节:

  • 我真的需要使用像 Fabric 这样的工具来通过 SSH 连接到我的实例并运行命令吗?
  • 如何选择当前运行脚本的实例? self 实例(如果您愿意)。
  • 有更好的方法吗?

请您参考如下方法:

我的建议是创建一个简单的 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>

您现在可以通过调用端点随时启动爬虫。

要在停止时删除实例,您可以从/latest/meta-data/instance-id中获取实例ID。如评论中所述,然后使用 boto3,例如:

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