Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python AWS Boto-启动实例,部署Docker映像,运行并终止_Python_Amazon Web Services_Boto_Boto3 - Fatal编程技术网

Python AWS Boto-启动实例,部署Docker映像,运行并终止

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连接到我的实例并运行命令吗? 如何选择脚本当前运行的实例?如果你愿意的话,我可以举个

我有一个网络爬虫,是一个码头工人形象。我想使用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再次启动相同类型的实例。