【发布时间】:2022-11-11 04:21:37
【问题描述】:
现在 Cloud Functions(第 2 代)可以运行长达 60 分钟,如何停止正在运行的云功能实例(对 GCF 的特定调用)?
例如,如果我在许多 GCF 调用实例中运行复杂的工作负载,并且我需要停止一个工作人员(例如,我不再需要该作业的输出),我将如何仅停止该 GCF 调用实例?
Cloud Functions 的日志中有一个 labels.instanceId 值。是否有终止实例的 API?这里的挑战是我可以尝试侦听终止信号(在 Pub/Sub 订阅上,或轮询 GCS 文件,或侦听 Memorystore Redis Pub/Sub 通道),但所有这些在运行时都无法很好地扩展可能需要杀死的数千个并发 GCF 实例。
如果我们可以告诉运行时(Cloud Run 或 Cloud Functions)停止特定的正在运行的函数调用实例,那肯定是最佳的。
【问题讨论】:
-
如果您的代码(在云函数中运行)知道何时出现错误,它可以退出该函数。 Cloud Function 调用结束,您不再为此付费。不确定这是否有帮助,因为我不完全了解您的用例。
-
不,您不能直接停止任何正在运行的实例。它会在错误或成功时停止。阻止它的蛮力方法是删除功能或部署新版本。
-
谢谢,@Ferregina。不幸的是,删除该函数不是该用例的有效解决方案,因为将有数百个其他函数实例需要继续运行。我只需要停止有问题的调用。
-
谢谢@MartinOmander,上周我想亲自问你这个问题。假设我使用 GCF 作为服务工作者,用于长时间运行的任务。我有时需要能够在工人完成之前停止它。但是,我不想拆除 GCF,因为我希望完成其他工作实例。听起来好像没有 API,我需要处理自己的消息传递和函数实例自我终止?
-
暂时没有。也许可以询问功能请求,但通常那些没有 ETA :c
标签: google-cloud-platform google-cloud-functions serverless google-cloud-run