如何使用不同的参数触发相同的 Cloud Run 作业/服务?

问题描述 投票:0回答:3

我正在尝试使用云运行使 scrapy scraper 工作。主要思想是,云调度程序 cron 应该每 20 分钟触发一次网络爬虫并从不同站点获取数据。所有站点都具有相同的结构,因此我想使用相同的代码并并行执行抓取作业,执行类似

scrapy crawl scraper -a site=www.site1.com
scrapy crawl scraper -a site=www.site2.com
的操作。

我已经部署了一个版本的抓取工具,但它只能做

scrapy crawl scraper
。我怎样才能在执行命令的站点更改时做到这一点?

另外,我应该使用云运行作业还是服务?

python scrapy google-cloud-run
3个回答
2
投票

没有直接的方法。

Cloud Scheduler 可以使用参数调用您的应用程序,但您需要为每组参数创建一个新作业。

云运行支持环境变量,但您需要重新部署应用程序才能修改它们。

您可以将应用程序的参数存储在 Secret Manager 或云存储中。然后,您的应用程序将从这些位置之一读取当前配置。


1
投票

根据文档页面,有一个技巧。

  • 定义多个任务,比方说,您将任务的数量设置为等于要报废的站点的数量。为此使用 --task 参数
  • 在您的容器中(或在 Cloud Storage 中,但如果您这样做,则必须在开始该过程之前下载文件),添加一个文件,其中每行包含 1 个要废弃的网站。
  • 在运行时,使用
    CLOUD_RUN_TASK_INDEX
    环境变量。该变量指示正在执行的任务的编号。对于每个不同的数字,在网站文件中选择一行(行号等于环境变量值)。

这样,您可以利用 Cloud Run 作业和并行性。


这里的主要权衡是要废弃的网站列表的静态形式。


0
投票

您可以传入overrides。例如,当从

cloud
cli sdk 调用作业时,您可以传递
args
,它可以包含要传递给脚本的替代参数

© www.soinside.com 2019 - 2024. All rights reserved.