Cloud Run 和 Cloud Scheduler - 在完整数据集上获取失败结果
Posted
技术标签:
【中文标题】Cloud Run 和 Cloud Scheduler - 在完整数据集上获取失败结果【英文标题】:Cloud Run and Cloud Scheduler - Getting Failed Result on Full Dataset 【发布时间】:2020-07-25 13:45:49 【问题描述】:我每天使用 Cloud Scheduler 在 Cloud Run 中运行 Python 脚本,以从 BigQuery 中提取数据并将其作为 CSV 文件上传到 Google Cloud Storage。 Cloud Scheduler 设置使用带有 GET“HTTP 方法”的 HTTP“目标”。此外,Cloud Scheduler 使用带有“添加 OIDC 令牌”选项的服务帐户对 https 端点进行身份验证。
当使用非常小的 BigQuery 数据子集运行 Cloud Scheduler 和 Cloud Run 以执行需要几秒钟的作业时,Cloud Scheduler 中的“结果”始终显示“成功”并且作业按预期完成。但是,当使用完整的 BigQuery 数据集运行 Cloud Scheduler 和 Cloud Run 以执行需要几分钟的作业时,Cloud Scheduler 中的“结果”始终显示“失败”,即使 CSV 文件通常(尽管不总是)上传到谷歌云存储按预期。
(1) 在完整的 BigQuery 数据集上运行 Cloud Scheduler 和 Cloud Run 时,为什么 Cloud Scheduler 中的“结果”总是显示“失败”,即使作业通常按预期完成?
(2) 如何修复 Cloud Scheduler 和 Cloud Run 以确保作业始终按预期完成并且 Cloud Scheduler 中的“结果”始终显示“成功”?
【问题讨论】:
完整查询需要多长时间?您是否达到运行时限制? cloud.google.com/run/quotas 您没有在部署中包含任何代码或详细信息。 ***.com/help/how-to-ask 完整数据集上的python脚本需要三四分钟才能运行,CSV文件大约250MB 显示其中一项失败操作的 Stackdriver 日志(使用这些详细信息编辑您的问题)。 Stackdriver 日志在 'jsonPayload' 部分和 '@type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"' 和 'status: "UNKNOWN"'严重性:“资源”部分下的“错误”。除此之外,没有太多额外的细节。 在您的问题中显示实际的堆栈驱动程序条目。回到我的第一条评论,包括你的代码和部署细节。 【参考方案1】:这是 Cloud Scheduler 的常见错误。我多次将它提升到谷歌,但直到现在它都没有改变......
GUI(网络控制台)不允许您配置任何东西,尤其是超时。您的 Cloud Scheduler 失败,因为它认为在您扫描完整的 BQ 数据集时它没有及时收到答案(这可能需要几分钟)
要解决这个问题,请使用命令行 (gcloud),尤其是 the attempt-deadline
parameter。您可以查看其他参数:重试、退避、... 允许的自定义很有趣,但在 GUI 中不存在!
【讨论】:
以上是关于Cloud Run 和 Cloud Scheduler - 在完整数据集上获取失败结果的主要内容,如果未能解决你的问题,请参考以下文章
将 Cloud Armor 与 Cloud Run 结合使用并避免绕过
通过启用 IAM 登录的 cloud-sql-proxy 从 Cloud Run 连接到 Cloud SQL
如何手动指定 X-Cloud-Trace-Context 标头值以关联和跟踪单独的 Cloud Run 请求中的日志?
Terraform:Cloud Run 服务上的 Cloud Endpoints?