Cloud Run Admin API调用429配额异常问题求助
问题背景
我开发了两个部署在Cloud Run中的Python函数:
- 第一个函数用于按需创建Job
- 第二个函数用于执行已创建的Job
当执行函数创建并运行3个Job时一切正常,但添加第4个请求创建并运行第4个Job时,Job创建成功但执行函数返回状态码429。我的Cloud Run Admin API的“Job run requests per minute per region”配额为10次,4次创建请求加4次执行请求总计8次,并未超出配额,请问为何会出现该错误?
创建Job的函数代码
def google_cloud_create_job(job_uuid,payload_job,token): try: url = "https://us-central1-run.googleapis.com/v2/xxxxxxxxxxxxx/locations/us-central1/jobs?jobId=job-name-{0}&validateOnly=False".format(str(job_uuid)) payload = payload_job headers = { 'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json' } response = requests.request("POST", url, headers=headers, data=payload) print(response.text) return response.status_code except Exception as e: print(e)
执行Job的函数代码
def google_cloud_run_job(job_uuid, token): url = "https://us-central1-run.googleapis.com/v2/xxxxxxxxxxxxxxxxxx/locations/us-central1/jobs/job-name-{0}:run".format(str(job_uuid)) print(url) headers = { 'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json' } response = requests.request("POST", url, headers=headers) return response.status_code
可能的原因及排查方向
1. 瞬时速率限制触发
Cloud Run Admin API除了分钟级的配额限制,还有每秒请求数(QPS)的瞬时限制。即使你分钟内总请求数没到10次,如果4次执行请求在极短时间(比如1秒内)集中发起,就会触发这个瞬时限流,返回429。
2. 配额统计维度误解
注意Job run requests per minute per region配额仅统计执行Job的jobs:run接口请求,创建Job的请求属于另一个配额项(比如Job create requests)。但如果你的执行请求确实只有4次,那可能是其他隐藏的配额被触发:比如部分项目可能有Requests per minute per project的全局API限制,或者你调用的接口路径对应的其他细分配额。
3. 隐式重试导致请求数超标
检查代码或依赖库是否有自动重试机制:比如requests库的重试插件、Cloud Run对失败请求的自动重试,可能导致实际发送的执行请求数超过你手动统计的4次,进而触发配额限制。
4. Cloud Run服务自身限流
你的执行函数部署在Cloud Run上,Cloud Run有默认的并发限制(比如每个实例最多处理100个请求,具体看配置)。如果4个执行请求同时到达,Cloud Run还没完成实例扩容,可能会返回429(这种情况的429是Cloud Run服务返回,而非Cloud Run Admin API返回)。
排查建议
- 查看429响应的详细内容:响应体里通常会包含具体的错误说明和
Retry-After头,能明确是瞬时速率限制还是配额耗尽,以及对应的配额项。 - 核对Cloud Console配额数据:进入IAM与管理 > 配额页面,搜索Cloud Run Admin API的所有配额项,查看
Job run requests的实时使用量,确认是否存在超出预期的请求计数。 - 添加请求延迟:在调用
google_cloud_run_job后添加1-2秒的延迟,测试是否还会触发429,验证是否是瞬时速率限制导致。 - 查看Cloud Run日志:区分429是来自Cloud Run服务本身的限流,还是Cloud Run Admin API的返回,针对性排查。
内容的提问来源于stack exchange,提问作者dev_

