我可以将事件发布到 GCP 外部的 Cloud Pub/Sub 中吗?
让我澄清一下我的疑问。在AWS中,我们可以通过API网关从非云客户端调用REST API,直接将事件发布到SNS主题中(https://github.com/cdk-patterns/serverless/blob/master/the-big- fan/README.md),GCP中有没有这样的方法可以将事件发布到Pub/Sub?
我可以看到SO中有一个类似的问题(从GCP外部访问Google Pub/Sub),但我相信它没有完全回答我的问题。是的,需要身份验证,并且它是一个横切功能,但是在 GCP 之外的 Pub/Sub 中发布事件的基本技术是什么
是的,您可以将消息发布到主题中,然后拉动它,甚至让 PubSub 通过推送订阅将其传递给您。
发布消息或从订阅者处拉取消息时,您可以通过 REST 或 RPC API 访问 PubSub。此外,您可以使用客户端库之一。
在这里您可以找到如何使用
gcloud
CLI 工具发布消息的示例,以及使用 REST API
、python
和 java
以及其他编程语言的示例。
正如所引用的问题中提到的,您需要进行身份验证才能发布消息或拉取消息。您可以使用快速入门作为如何执行此操作的参考。请注意,您可以从 GCP 之外的任何计算机或虚拟机执行快速入门操作。
最后,如果您使用推送订阅来接收消息,您的端点将需要是可公开访问的 HTTPS 地址,并且拥有由证书颁发机构签名的有效 SSL 证书。同样,该端点可以位于 GCP 之外。
代码通过 Google 提供的客户端库连接到 PubSub
在开发中,运行这两个命令,身份验证会持续几个小时。
gcloud auth login
gcloud auth application-default login
在生产中,在此处复制 JSON 文件
~/.config/gcloud/application_default_credentials.json
例如
{
"type": "service_account",
"project_id": "PROJECT_ID",
"private_key_id": "KEY_ID",
"private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n",
"client_email": "SERVICE_ACCOUNT_EMAIL",
"client_id": "CLIENT_ID",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
}
文件是在 GCloud Web 控制台中创建的:它称为“服务帐户密钥”。
如您所见,它包含私钥,因此应将其视为秘密。
如果您需要,可以选择让密钥过期,如果不需要,则可以选择不过期。