Python AWS Boto-启动实例,部署Docker映像,运行并终止
我有一个网络爬虫,是一个码头工人形象。我想使用boto创建一个EC2实例,部署我的爬虫程序,运行爬虫程序,然后在完成后终止实例 我目前的想法是: 使用包含Docker的AWS映像启动新的EC2实例。 使用类似Fabric的东西将SSH连接到实例中,并安装Docker映像。 使用相同的SSH连接运行我的命令来启动爬虫程序 使Web爬虫在完成时删除自己的实例。 一些细节: 我真的需要使用Fabric之类的工具将SSH连接到我的实例并运行命令吗? 如何选择脚本当前运行的实例?如果你愿意的话,我可以举个例子。 有更好的方法吗?Python AWS Boto-启动实例,部署Docker映像,运行并终止,python,amazon-web-services,boto,boto3,Python,Amazon Web Services,Boto,Boto3,我有一个网络爬虫,是一个码头工人形象。我想使用boto创建一个EC2实例,部署我的爬虫程序,运行爬虫程序,然后在完成后终止实例 我目前的想法是: 使用包含Docker的AWS映像启动新的EC2实例。 使用类似Fabric的东西将SSH连接到实例中,并安装Docker映像。 使用相同的SSH连接运行我的命令来启动爬虫程序 使Web爬虫在完成时删除自己的实例。 一些细节: 我真的需要使用Fabric之类的工具将SSH连接到我的实例并运行命令吗? 如何选择脚本当前运行的实例?如果你愿意的话,我可以举个
我的建议是创建一个简单的HTTP API并直接调用它。以编程方式进行SSH复制通常很尴尬。下面是我要做的: 实现用于启动爬虫程序的HTTP端点。您需要一个框架来实现这一点,例如:
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)
在启动时启动docker容器。为此,请在启动实例时添加用户数据,例如:
!/bin/bash
docker run-第80页:
现在,您可以随时通过调用端点来启动爬虫程序
要在停止时删除实例,您可以从注释中提到的/latest/meta data/instance id获取实例id,然后使用boto3,例如:
# Boto 3
import boto3
ec2 = boto3.resource('ec2')
ec2.instances.filter(InstanceIds=ids).terminate()
您可以使用userdata在EC2实例中运行脚本。要获取实例id,请查询实例元数据http://169.254.169.254/latest/meta-data/instance-id. 您需要使用EC2:TerminateInstances权限将IAM角色附加到EC2实例。如果我需要始终在该实例上托管flask应用程序,这意味着我必须为该实例的24/7启动和运行付费。关键是我不想让它一直运行。或者我误解了你在哪里放置flask应用程序了吗?这里的想法是使用flask应用程序启动爬虫程序,它取代了SSH。您仍然需要另一台机器来启动您可能要使用的EC2实例。您可以创建一次EC2实例,然后将配置导出为JSON,然后可以使用AWS CLI再次启动相同类型的实例。