如何从 GCP 函数 GUI 调用 PubSub 函数
Posted
技术标签:
【中文标题】如何从 GCP 函数 GUI 调用 PubSub 函数【英文标题】:How invoke a PubSub function from the GCP Functions GUI 【发布时间】:2020-07-10 05:08:23 【问题描述】:我部署了以下功能:
interface MessageData
reviewId: string;
export const applyPreAssessRules = functions
.pubsub.topic("applyPreAssessRules")
.onPublish(async (message) =>
const reviewId = message.json as MessageData;
...
云平台GUI提供了一个测试功能的页面,但是我不知道如何格式化输入。
我尝试了几件事,包括:
"reviewId": "LRuvmv14u7c47IRiravi"
"message": "reviewId": "LRuvmv14u7c47IRiravi"
"message": "json": "reviewId": "LRuvmv14u7c47IRiravi"
我不断得到以下输出:
错误:函数执行失败。细节: 第一个参数必须是 string、Buffer、ArrayBuffer、Array 或 Array-like Object 类型之一。接收类型未定义
我错过了什么?
我已经使用 Firebase 部署了该功能。不知道会不会有影响...
【问题讨论】:
只是为了确认。该函数在 Firebase 中按预期工作,但在 GCP 中却没有? 函数本身运行良好。我想知道如何从 GCP 将有效的 JSON 有效负载传递给它,因为我们有这个测试 UI 有一些关于如何将 Cloud Functions 与 PubSub here 一起使用的示例。根据您收到的错误,我认为您应该使用JSON.stringify(messageObject)
。 JSON.stringify()
方法将对象转换为 JSON 字符串。
我认为你没有理解我的意思。我知道如何以编程方式调用 pubsub 函数。我想知道 GUI 的功能,所以我想我应该说 GUI 而不仅仅是 UI。我将编辑问题。
【参考方案1】:
事实上,@eespinola 几乎为您指明了正确的方向。如果您仔细检查他提供的link,您会发现 Cloud Functions 默认订阅者 sn-p:
/**
* Triggered from a message on a Cloud Pub/Sub topic.
*
* @param object pubsubMessage The Cloud Pub/Sub Message object.
* @param string pubsubMessage.data The "data" property of the Cloud Pub/Sub Message.
*/
exports.subscribe = (pubsubMessage) =>
// Print out the data from Pub/Sub, to prove that it worked
console.log(Buffer.from(pubsubMessage.data, 'base64').toString());
;
这个 sn-p 显示 pubsub 事件包含一个名为“data”的字段,它是一个 base64 编码的字符串。此外,如果您搜索 PubSub 的 API 文档,您会发现消息的 JSON representation 语法:
"data": string,
"attributes":
string: string,
...
,
"messageId": string,
"publishTime": string
因此,您需要将有效负载编码为具有该格式的 base64 字符串,并将其转换回函数内的 javascript 对象。
【讨论】:
我担心这会是答案。在这种情况下,UI 作为一个易于使用的界面毫无用处。它应该真正为这些属性提供字段并将 JSON 转换为 base64 以在数据中使用。要求用户在 UI 之外进行转换简直是疯了。我将提交功能请求。以上是关于如何从 GCP 函数 GUI 调用 PubSub 函数的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Cloudflare 工作人员内部发布到 GCP PubSub 主题
如何使用 gsutil 向 GCP 存储桶添加 pubsub 通知