GCP PubSub:通过 CURL 类型的请求发布消息

Posted

技术标签:

【中文标题】GCP PubSub:通过 CURL 类型的请求发布消息【英文标题】:GCP PubSub: Publish message via CURL type of request 【发布时间】:2018-06-20 23:47:07 【问题描述】:

有没有人有一个工作示例,说明如何通过 CURL 类型的命令直接从 shell 将消息发布到 GCP PubSub 主题?

我正在尝试不使用 CLI 并且不使用客户端库,但我对 OAUTH 的东西越来越感兴趣了。

如果有一个在 Linux 上运行的 bash 脚本需要做的事情的项目符号列表,我会很高兴,如果有人有或可以拼凑出一个,我将非常感激。

我已经拥有的物品:

我正在开发一个 Linux 计算引擎 我有通过 CLI 和 Python 发布的工作示例 我有一个服务帐户,可以很好地与 pubsub 配合使用(请参阅上一个项目符号)

我完全认识到 Google 建议使用 CLI 或 API 客户端库,但我需要能够在安装最少(无 CLI、无 python 库等)的主机上运行它。

我认为我需要做以下事情:

    base64 编码我的数据 创建 JSON Web 令牌 (JWT) 使用 JWS 获取 OAUTH 令牌 使用令牌调用 API - 例如发布https://pubsub.googleapis.com/v1/projects/myproject/topics/mytopic:publish

想法非常感谢,非常感谢...丰富

参考链接:

https://cloud.google.com/pubsub/docs/publisher#pubsub-publish-message-protocol https://groups.google.com/forum/#!topic/cloud-pubsub-discuss/8fGaG5cWiTk https://groups.google.com/forum/?hl=sw#!topic/cloud-pubsub-discuss/8fGaG5cWiTk https://developers.google.com/identity/protocols/OAuth2WebServer https://developers.google.com/identity/protocols/OAuth2ServiceAccount

【问题讨论】:

【参考方案1】:

是的,可以使用 curl 命令发布。您需要将访问令牌传递到请求中。要获取它,请登录您将用于发布的所需服务帐户。如果您还没有创建一个,您可以这样做并限制为只允许发布:

gcloud iam service-accounts create curl-publisher

gcloud projects add-iam-policy-binding <project with topic> --member=serviceAccount:curl-publisher@<project with created service account>.iam.gserviceaccount.com --role=roles/pubsub.publisher

现在,您可以从命令行登录服务帐户并获取访问令牌:

gcloud auth login curl-publisher@<project with created service account>.iam.gserviceaccount.com

gcloud auth application-default print-access-token

您只需运行上述这些步骤一次即可获取访问令牌。现在,您可以在 curl 命令中使用该访问令牌:

PROJECT=my-project
TOPIC=my-topic
ACCESS_TOKEN=<token printed out above>
curl -H 'content-type: application/json' -H "Authorization: Bearer $ACCESS_TOKEN" -X POST --data $'  "messages": ["data": "abcd"]'  https://pubsub.googleapis.com/v1/projects/$PROJECT/topics/$TOPIC:publish

【讨论】:

我无法使用服务帐户登录,所以我找到了这个命令:gcloud auth activate-service-account curl-publisher@&lt;project with created service account&gt;.iam.gserviceaccount.com --key-file="&lt;path to json file with service account private key&gt;" 后跟gcloud auth print-access-token 以打印出令牌 它有效,但数据is a base64 encoded。所以你应该做这样的事情DATA=$(echo -n '"test": "hello"' | base64 -)

以上是关于GCP PubSub:通过 CURL 类型的请求发布消息的主要内容,如果未能解决你的问题,请参考以下文章

GCP PubSub:“请求被中止,因为没有可用的实例。” - 不重试失败

GCP Nodejs8 云功能 - 同步 PubSub 发布

如何从 Cloudflare 工作人员内部发布到 GCP PubSub 主题

如何将 GCP Pubsub 订阅的消息转发到另一个主题?

如何使用 gsutil 向 GCP 存储桶添加 pubsub 通知

GCP - 从 PubSub 到 BigQuery 的消息