关于Google Cloud Speech-To-Text请求添加计费标签以统一多客户认证的技术问询
Google Cloud Speech-To-Text请求添加计费标签以统一多客户认证的技术方案
嘿,我完全懂你现在的麻烦——维护一堆对应不同客户的服务账号JSON文件,每次处理请求都要找对应文件切换,太折腾了!想换成单一共享账号又怕没法按客户精准追踪成本,这个需求非常合理,我来给你捋捋具体怎么实现:
第一步:切换到单一共享服务账号认证
先把所有客户的请求统一到同一个主项目的服务账号下,这样就不用再维护N多JSON文件了。代码改起来很简单:
from google.oauth2 import service_account from google.cloud import speech from google.api_core import client_options # 只用这一个主项目的服务账号文件就行 auth = service_account.Credentials.from_service_account_file("main-shared-project.json") # 初始化客户端配置,后面用来传递请求标签 client_options = client_options.ClientOptions(api_endpoint="speech.googleapis.com") client = speech.SpeechClient(credentials=auth, client_options=client_options)
第二步:给每个客户的请求添加专属计费标签
Google Cloud的大部分API支持通过请求头传递自定义标签,Speech-To-Text也不例外。我们可以在每个请求里带上客户唯一标识的标签,这样计费系统就能把费用和对应客户绑定。
比如处理Customer10050的请求时,代码可以这么写:
# 正常配置Speech-To-Text的识别参数 config = speech.RecognitionConfig( encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16, sample_rate_hertz=16000, language_code="en-US", ) audio = speech.RecognitionAudio( uri="gs://cloud-samples-data/speech/brooklyn_bridge.raw" ) # 这里添加客户专属的标签,格式是「key=value」,多个标签用&分隔 request_metadata = ( ("x-goog-request-params", "labels=customer_id:Customer10050"), ) # 发送请求时把metadata带上,标签就会随请求传递给GCP response = client.recognize( config=config, audio=audio, metadata=request_metadata )
第三步:在GCP计费系统中配置标签筛选
光在请求里加标签还不够,得让计费系统识别并关联这些标签:
- 登录GCP控制台,进入计费页面,找到你主项目对应的计费账户
- 先开启标签计费功能(如果还没开的话,这个是基础前提)
- 等有请求产生后,你就能在计费报表里通过
customer_id这个标签来筛选,直接查看每个客户对应的Speech-To-Text服务成本了
几个要注意的小细节
- 确保你的共享服务账号有足够的IAM权限:至少要有Speech-To-Text的调用权限,传递标签的权限默认是包含在调用权限里的,但如果遇到权限问题,可以检查下是否给账号加了
roles/speech.client角色 - 标签的key和value要符合GCP的规则:不能有特殊字符(比如空格、逗号),key长度不能超过63字符,value不能超过63字符
- 计费数据会有1-2小时的延迟,测试的时候别着急,等一会儿再去报表里看结果
这样改完之后,你只用维护一个服务账号JSON文件,每个请求通过不同的customer_id标签就能实现按客户拆分成本的需求,完美解决你现在的痛点!
备注:内容来源于stack exchange,提问作者user3218338
相关产品推荐
相关产品推荐

