如何将Scrapy与AWS Lambda结合使用

时间:2019-07-16 10:12:03

标签: amazon-web-services aws-lambda amazon-sqs

有2种应用:在烧瓶上和在刮板上。他们每个人都通过zappa泛滥成一个单独的lambda。应用程序界面具有3个端点,每个端点都是通过SQS tiggerit scrap lambda进行的。触发器本身可以正常工作,但是有3个问题:

1)是否有可能以某种方式消除lambda在刮板上的性能限制? (我发现有机会将限制增加到仅15分钟,在这段时间内,scrapy没有时间收集所有物品)

2)是否可以通过SQS在不使用API​​网关的情况下刷新此sqm lambda,以及是否可以通过zappa泛洪应用程序,以便不创建api网关。还是我需要手动填写剪贴簿留言?

3)如果没有API网关就无法触发lambda,那么如何返回正确的响应?

现在我具有以下功能:

def lambda_event(event, context):
  try:
    data = json.loads(event['body'])
    scrapy_settings = get_project_settings()
    scrapy_settings['ITEM_PIPELINES'] = {
      'sunbiz_spiders.pipelines.DynamodbPipeline': 300,
    }
    scrapy_settings['DOWNLOAD_DELAY'] = 0.5
    process = CrawlerProcess(settings=scrapy_settings)
    if data['spider_name'] == 'SearchByPersonSpider':
      spider = SearchByPersonSpider
    elif data['spider_name'] == 'GetDetailSpider':
      spider = GetDetailSpider
    else:
      spider = SearchByNameSpider
    process.crawl(spider, search_params=data['spider_name'])
    process.start()
  except Exception:
    pass

  return {
    'statusCode': 200,
    'body': json.dumps('All done.'),
  }

Конфигzappa:

{
    "production": {
        "app_function": "main.lambda_event",
        "aws_region": "us-east-1",
        "profile_name": "default",
        "project_name": "sunbiz-search-s",
        "runtime": "python3.6",
        "s3_bucket": "zappa-envjkpiz6"
    }
}

当系统提示时,我得到列表索引超出werkzeug / test.py第1146行

0 个答案:

没有答案