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@<project with created service account>.iam.gserviceaccount.com --key-file="<path to json file with service account private key>"
后跟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 主题