首页 > 编程问答 >完美使用 Google Cloud Run:为单个作业中的每个流程创建新的执行 ID

完美使用 Google Cloud Run:为单个作业中的每个流程创建新的执行 ID

时间:2024-07-31 16:06:29浏览次数:13  
标签:python google-cloud-run prefect google-cloud-run-jobs

我目前正在使用 Prefect 云来编排不同的任务,并且我正在使用 CloudRun Push 工作池将这些任务作为作业部署在 Google Cloud Run 上。

这是我面临的情况:每次运行流程时,它都会创建一个新的任务在 Cloud Run 上工作。然而,这不是我想要的行为。相反,我希望每个部署都有一个作业,具有部署名称,并且每个流程运行都应在该作业中创建一个新的执行 ID。

我已经查看了 Prefect 和 Google Cloud Run 文档,但还没有没有找到实现此目的的明确方法。

有人有这种设置的经验或者可以为我指出正确的方向吗?任何帮助将不胜感激!

提前感谢您。

我尝试在 prefect.yaml 中使用以下配置:

  infra_overrides:
    env:
      PREFECT_FLOW_NAME: prefect-daily-testrun
  infrastructure:
    job_variable_name: PREFECT_FLOW_NAME

但结果是相同的:创建了一个新作业,其名称为流动。


你遇到的问题是 Prefect Cloud Run 任务运行器每次运行流程都会创建一个新的 Cloud Run 作业。你希望每个部署有一个作业,并且每次流程运行都会在该作业中创建一个新的执行 ID。

你目前的配置尝试使用 PREFECT_FLOW_NAME 作为作业变量名,但它不起作用,因为 Cloud Run 任务运行器不会将此变量传播到作业创建逻辑。

为了实现你想要的行为,你需要直接使用 Cloud Run API 或 gcloud 命令行工具创建 Cloud Run 作业。然后,你可以使用 CloudRunJob 运行器来触发现有作业上的执行。

以下是实现此目标的步骤:

1. 创建 Cloud Run 作业:

你可以使用 gcloud 命令行工具创建 Cloud Run 作业:

gcloud run jobs create your-job-name \
  --image=us-docker.pkg.dev/cloudrun/container/hello \
  --region=your-region

your-job-name image region 替换为你的实际值。

2. 使用 CloudRunJob 运行器:

在你的 Prefect 流程中,使用 CloudRunJob 运行器并指定你创建的作业名称:

from prefect import flow
from prefect_gcp.cloud_run import CloudRunJob

@flow
def my_flow():
    # Your flow logic here

    cloud_run_job_runner = CloudRunJob(
        job_name="your-job-name",
        location="your-region",
    )

    cloud_run_job_runner.submit(wait=False)

if __name__ == "__main__":
    my_flow()

这将使用你之前创建的作业名称触发 Cloud Run 作业上的新执行。每次流程运行都会在现有作业中创建一个新的执行 ID。

注意:

  • 确保你拥有创建和管理 Cloud Run 资源的必要权限。
  • 你可以使用其他 CloudRunJob 运行器参数,例如 service_account env 等来配置你的执行。

通过这些步骤,你就可以为每个部署创建一个 Cloud Run 作业,并使用 Prefect 在该作业中触发新的执行。

标签:python,google-cloud-run,prefect,google-cloud-run-jobs
From: 78815084

相关文章

  • Python:使用 Selenium WebDriver 无法在客户端打开浏览器
    我使用SeleniumWebDriver开发了一个应用程序来打开一些页面。它在本地工作得很好,但我还需要在客户端启动浏览器。我使用Apache2underUbuntu18部署了应用程序。driver=webdriver.Chrome(executable_path="chromedriver",chrome_options=ch......
  • Python:使用默认模块在python中读取excel
    我有Python2.6.6版本,但无法安装pandas、xlrd、xlwt等新模块。我想使用Python读取Excel。是否可以使用Python中存在的默认模块读取Excel。抱歉,不能使用Python2.6.6的默认模块读取Excel文件。Python没有内置的功能来处理Excel文件。使用外部库(如提......
  • 【Python】从0开始写脚本、Selenium详细教程、附源码案例(保姆篇)
    文章目录准备工作安装selenium配置浏览器驱动脚本测试什么是Selenium?Selenium功能示例(可直接拷贝执行)编写一个简单的Python脚本来使用Selenium打开一个网页,并获取网页的标题下面是一个示例,自动打开csdn并进行搜索Selenium使用Selenium元素定位文本输入、清除与提交......
  • Python控制台输出的华丽变身:色彩与风格的深度探索
    一、文章摘要本文深入探讨了Python标准输出中字体颜色的设置方法,特别是通过ANSI转义序列实现的文本样式控制。文章详细解析了ANSI转义序列的组成、各个颜色代码的含义,以及如何在Python中使用这些代码来改变终端输出的字体颜色、背景色、高光、加粗等样式。通过丰富的案例代码,......
  • 二十五、【机器学习】-【Python手搓3层神经网络】:从零构建深度学习模型的实战指南
    目录一、序章:为什么你需要掌握手搓神经网络二、基础篇:神经网络基础知识回顾三、实战配置:搭建3层神经网络的步骤与技巧(一)、__init__ 方法初始化神经网络(二)、train 方法实现了前向传播和反向传播(三)、query 方法(四)、全部代码四、总结一、序章:为什么你需要掌握手......
  • 在Python中将简单的字典导出到Excel文件中
    我是Python新手。我有一个简单的字典,其键和值如下dict1={"numberofstoragearrays":45,"numberofports":2390,......}我需要将它们放入Excel表中,如下numberofstoragearrays45numberofports2390我有一个非常大的字典。importpandasasp......
  • 将 python 脚本作为 AWS 胶水服务作业运行
    我有一个使用本地路径在本地运行的python脚本,但我需要复制此python脚本并将其作为AWS胶水服务作业运行并将输出保存在s3存储桶中。请帮助我逐步说明。将Python脚本作为AWSGlue作业运行的步骤如下:步骤1:修改的Python脚本以使其与Glue兼容......
  • Python - Decorating classes
    Whenwetalkaboutdecoratingclasses,wecaneitherdecorateindividualmethodsorwecancreateadecoratortodecoratethewholeclass.classMyClass:def__init__(self,a):self.a=a@timerdefmethod1(self,x,y):print......
  • 如何在 python 中使用矩阵分解从 3 个不同的矩阵(2 个交互矩阵和 1 个相似矩阵)创建一个
    我有3个不同大小的矩阵A、B、C,它们有一些共同的元素。A(相似性)与B(交互)有一些共同元素,但与C(第二交互矩阵)没有共同元素。B有一些与C相同的元素。我想创建一个基于B和C的矩阵M,但提供基于A、B、C的输出,就像推荐系统类型一样,其中根据评分、观看次数和偏好推荐电影。例......
  • Python - Decorators
    Adecoratorisacallablethattakesacallableasinputandreturnsacallable.Thisisthegeneraldefinitionofadecorator.Thecallableinthisdefinitioncanbeafunctionoraclass.Inourinitialdiscussion,wewilltalkaboutdecoratorfunctions......