我正在尝试在云函数中设置计费 PubSub 侦听器,以限制计费并防止意外成本。我查看了 YouTube 系列,但开始使用 v2 来实现它,如here所述。我一直在使用 google cloud CLI(在 Windows 上)发送sample JSON,并且遇到了这个非常烦人的 JSON 解析错误。这里分别是我的命令、云函数和错误(来自云函数的日志):
命令:
gcloud pubsub 主题发布计费 --message '{“budgetDisplayName”:“预算名称”,“alertThresholdExceeded”:1,“costAmount”:100.01,“costIntervalStart”:“2019-01-01T00:00:00Z”,“budgetAmount”:100,“budgetAmountType ":"SPECIFIED_AMOUNT","currencyCode":"USD"}'
云功能:
import { onMessagePublished } from "firebase-functions/v2/pubsub";
import * as logger from "firebase-functions/logger";
exports.onBillingAlert = onMessagePublished(
"projects/thrilling-tales/topics/billing",
async (event) => {
logger.debug("onBillingAlert");
logger.debug(event.data.message.json);
}
);
错误:
无法将 Pub/Sub 消息数据解析为 JSON:意外的标记 b JSON 位于位置 1
编辑:JSON 有效并遵循 Firebase 文档
中的格式另一方面,我成功记录了云函数收到的字符串:
{budgetDisplayName:预算名称,alertThresholdExceeded:1,costAmount:100.01,costIntervalStart:2019-01-01T00:00:00Z,budgetAmount:100,budgetAmountType:SPECIFIED_AMOUNT,currencyCode:USD}
奇怪的是,双引号似乎被删除了?似乎是 Firebase / Google Cloud 的错误,但我不完全确定。我也尝试切换到 v1,但使用 cli 遇到了同样的错误。
编辑2: 我尝试使用 Google Cloud Console 测试该功能,如here所述,并完美地获取了日志。所以,如果我不得不猜测,我会说这是 Windows 版谷歌云 CLI 中的一个错误。但奇怪的是,之前没有人注意到这一点。可能会出现在最近的更新中。
正如乔恩在评论中指出的那样:
如果您在 Windows 上使用它,我怀疑这是命令提示符 删除双引号。请参阅 stackoverflow.com/questions/7760545。
总而言之,如果您使用的是 Windows,您有 2 个选择: