如何使用主题名称获取 SNS 主题 ARN 以通过 Boto3 在 Python 中发布 SNS 消息?

How can I get the SNS topic ARN using the topic name to publish a SNS message in Python via Boto3?

Python

方法运行查询

def function(run_query)
   //topic = arn return from topic name
   topic.publish(message)
   pass

我正在使用 boto3 资源方法。有很多使用 boto3.client 的示例和使用 boto3 资源方法实现 sns 方法的有限示例。

似乎没有预期的 get_topic_arn(topic_name) 方法可以通过 Boto3 SNS 客户端或资源使用主题名称获取 AWS 主题 ARN。

但是,一个聪明的解决方法是使用 create_topic 方法:

This action is idempotent, so if the requester already owns a topic with the specified name, that topic's ARN is returned without creating a new topic.

使用现有主题名称调用 create_topic,这将检索主题 sub-resource 上的 SNS.Topic sub-resource, and then call the publish 方法。

import boto3

sns = boto3.resource('sns')

topic = sns.create_topic(Name='MyTopicName')
topic_arn = topic.arn

response = topic.publish(Message='MyMessage')
...