如果已经创建,则忽略 pubsub 主题

     2023-02-16     120

关键词:

【中文标题】如果已经创建,则忽略 pubsub 主题【英文标题】:Ignore pubsub topic if it already created 【发布时间】:2021-09-05 09:50:02 【问题描述】:

我有一个简单的脚本来部署 pubsub 应用程序。

此脚本将在我的 Cloud Run 服务的每次部署上运行,我有一行:

gcloud pubsub topics create some-topic

如果主题已经存在,我想改进我的脚本,目前如果我运行我的脚本,输出将是:

错误:无法创建主题 [projects/project-id/topics/some-topic]:项目中已存在资源 (resource=some-topic)。

错误:(gcloud.pubsub.topics.create) 未能创建以下内容:[some-topic]。

我尝试了标志--no-user-output-enabled,但没有成功。

如果资源已经存在,有没有办法忽略,或者有办法在创建前检查?

【问题讨论】:

【参考方案1】:

是的。

您可以重复操作,如果事先不存在主题,则如果命令成功。

你可以吞下stderr(用2>/dev/null),然后检查上一条命令($?)是否成功(0):

gcloud pubsub topic create do-something 2>/dev/null
if [ $? -eq 0 ]
then
  # Command succeeded, topic did not exist
  echo "Topic $TOPIC did not exist, created."
else
  # Command did not succeed, topic may (!) not have existed
  echo "Failure"
fi

注意这种方法忽略了这样一个事实,即命令可能会失败并且主题不存在(即其他问题)。

或者(更准确,更昂贵!)您可以先枚举主题,然后尝试(!)创建它,如果它不存在:

TOPIC="some-topic"
RESULT=$(\
  gcloud pubsub topics list \
  --filter="name.scope(topics)=$TOPIC" \
  --format="value(name)" 2>/dev/null)

if [ "$RESULT" == "" ]
then
  echo "Topic $TOPIC does not exist, creating..."
  gcloud pubsub topics create $TOPIC
  if [ $? -eq 0 ]
  then
    # Command succeeded, topic created
  else
    # Command did not succeed, topic was not created
  fi
fi

根据您需要的复杂程度,您可以使用以下方法实现自动化:

提供更好的错误处理和重试功能的任何 Google (Pub/Sub) 库。 Terraform 例如google_pubsub_topic

【讨论】:

运行命令gcloud pubsub topics list --filter=topicId=report.topic --format="value(topicId)"我收到警告:WARNING: The following filter keys were not present in any resource : topicId 对不起...我从docs 拿走了它。让我启动一个项目并确认它应该是什么。 文档不正确。请改用gcloud pubsub topics list --project=$PROJECT --filter="name.scope(topics)=$TOPIC" --format="value(name)" 我的解决方案有问题。如果没有结果,gcloud --filter 将失败。如果您的主题为零,您将收到来自gcloud --filter 的错误。如果您想包含这种情况,请将2>/dev/null 添加到该命令的末尾以吞下错误...。您将继续获得RESULT=="",这很好。 完美。非常感谢!!

使用 terraform 脚本的 pubsub 主题和订阅之间的依赖关系

...】:我正在使用一个terraform脚本来创建pub子主题和订阅。如果订阅需要订阅由同一脚本创建的主题,有没有办法创建一个依赖项,以便terraform仅在创建主题后才尝试创 查看详情

如果已经存在于无服务器中,我如何忽略资源创建

】如果已经存在于无服务器中,我如何忽略资源创建【英文标题】:HowdoIignoreresourcecreationifalreadypresentinserverless【发布时间】:2021-08-1811:55:05【问题描述】:在配置资源配置时,我有什么方法可以使用,这样如果资源已经存在,... 查看详情

主题的 GCP PubSub 权限

...【发布时间】:2019-06-2009:40:03【问题描述】:我正在尝试创建一个仅对特定pubsub主题具有权限的服务帐户。我创建一个主题:gcloudpubsubtopicscreatemytopic然后创建一个服务帐号:gcloudiamservice-accountscreatemy-user\\--display-name"m 查看详情

在哪里可以检查或管理使用 Google Firebase 创建的 PubSub 主题?

】在哪里可以检查或管理使用GoogleFirebase创建的PubSub主题?【英文标题】:WherecanIexamineormanagePubSubtopicscreateusingGoogleFirebase?【发布时间】:2021-12-1211:59:03【问题描述】:我使用Firebase创建了一个计划函数。部署它。我不知道在哪里... 查看详情

无证约束?发布到主题 *from* pubsub 触发器

...不知道我是不是疯了,或者这是一个没有记录的限制(我已经搜索了GCPAPI文档):是否可以在“主题A”上有一个带有pubsub触发器的云函数,并在该云函数中向“主题B”发布一条消息。我已经尝试 查看详情

GCP PubSub 主题推送问题

...程序。这个应用程序只是一个等待通知的消息订阅者。我创建了一个主题(pubsub)。我正在尝试添加订阅,以便可以通知我的应用。但我没能做到。我试图在谷歌凭据(API和服务/凭据)中添加ip(域),但这个过程真的很可疑。... 查看详情

Google Cloud PubSub - 似乎无法获取主题

...使用heroku运行一个node.js应用程序,该应用程序使用gcloud创建一个主题,然后订阅它。我正在使用以下代码,取自这里:https://googlecloudplatform.github.io/gcloud-no 查看详情

排空或清除 Google Cloud pubsub 主题的最佳做法 [关闭]

...有消息的最佳做法是什么?可能的解决方案:删除并重新创建订阅 查看详情

Android 传感器数据到 Cloud pubsub

...什么我需要通过Cloudpub/sub将此数据发送到GoogleBigTable。我已经创建了一个主题,我可以将消息推送到该主题。有什么问题这个answer说 查看详情

如何使用 Node.js 控制 Cloud PubSub 中的确认

....js【发布时间】:2018-03-3000:29:00【问题描述】:基本上我已经创建了一个云函数(编写了一个Node.js代码),它将触发云pubsub主题的消息并将该数据加载到Bigquery表中。主题中的消息在通过云功能阅读后被删除。我知道订阅者在内... 查看详情

GKE:具有 3 个副本的 Pubsub 和 Pod 部署

...cas【发布时间】:2021-05-0706:16:58【问题描述】:在GKE中,如果我有一个设置为使用pull方法的Pub/Sub主题和一个充当该主题订阅者的API,如果此API具有3的复制(规范。副本:3),API(客户端)的开箱即用行为是什么?即当一条消息... 查看详情

关于主题名称的最佳做法是啥

...】:关于使用google-pubsub的主题名称的最佳做法是什么。如果我有这些事件:客户电子邮件已更新客户地址已更新客户创建客户已删除文章已创建文章已删除...关于主题名称的最佳做法是什么:创建一个customer主题和一个ar 查看详情

为啥 gnome 应用程序会忽略部分 gtk 3 主题?

...用程序(例如shotwell或节奏盒)都完全忽略了该主题。我已经确定这是由于gnome 查看详情

如果小数位为 .00,则需要忽略字符串中的小数位

】如果小数位为.00,则需要忽略字符串中的小数位【英文标题】:needtoignoredecimalplacesfromstringifdecimalplacesis.00【发布时间】:2018-09-1811:20:41【问题描述】:大家好,我想忽略这个来自字符串编号的.00。以下是我的示例输入和需要... 查看详情

PubsubFileInjector 无法提交到 PubSub 主题

】PubsubFileInjector无法提交到PubSub主题【英文标题】:PubsubFileInjectorcannotsubmittoPubSubtopic【发布时间】:2015-06-1918:09:43【问题描述】:我想使用com.google.cloud.dataflow.examples.PubsubFileInjector将GCS文件转换为pubsub事件。但是,当我提交管道... 查看详情

如果已经运行,则 C++ 程序将进程置于前台,否则创建一个新进程

】如果已经运行,则C++程序将进程置于前台,否则创建一个新进程【英文标题】:C++programtobringaprocesstoforegroundifalreadyrunningotherwisecreateanewprocess【发布时间】:2019-08-0611:55:23【问题描述】:我正在尝试学习Windows编程。我想从c++代... 查看详情

Bash 创建一个字符串,如果字符串已经存在,则替换它

】Bash创建一个字符串,如果字符串已经存在,则替换它【英文标题】:Bashcreatingastring,ifstringalreadyexistsreplaceit【发布时间】:2021-09-2601:27:58【问题描述】:我想实现这个程序。我有这个命令:sed-i-e\'s/few/asd/g\'/usr/local/sbin/.myappenv... 查看详情

从 PubSub 导出到 BigQuery - Dataflow 没有任何反应

...台中单击了“导出到BigQuery”,并采取了以下详细步骤。创建作业后,我看到的 查看详情