当前位置: 首页 > 知识库问答 >
问题:

Boto3 SNS发布到通配符主题ARN

裴劲
2023-03-14

背景资料

AWS服务是区域性的(例如us-West-2us-East-1),boto3库要求您在访问客户端或资源之前设置默认区域。但是,这里的留档显示您可以使用通配符替换区域的SNS主题ARN。留档说:

文档:Amazon简单通知服务(Amazon SNS)

语法:

arn:aws:sns:region:account-id:topicname
arn:aws:sns:region:account-id:topicname:subscriptionid

示例:

arn:aws:sns:*:123456789012:my_corporate_topic
arn:aws:sns:us-east-1:123456789012:my_corporate_topic:02034b43-fefa-4e07-a5eb-3be56f8c54ce

密码

当我使用boto3的SNS资源/客户端发布到主题ARN(该区域具有通配符)时,我得到以下错误。当我没有该区域的通配符时(例如,我指定了us-west-2),一切正常。我查看了boto3库,它似乎只是替换JSON映射中的值(例如插入主题字符串),因此我不明白如果上面的文档显示它是有效的,为什么这是一个无效参数。

import boto3

client = boto3.client('sns', region_name='us-west-2')
client.publish(TopicArn='arn:aws:sns:*:123456789:some-topic', Message='SomeMessage')

错误消息

File "/Users/wliu/.virtualenvs/myenv/lib/python2.7/site-packages/botocore/client.py", line 548, in _make_api_call
raise ClientError(parsed_response, operation_name)
ClientError: An error occurred (InvalidParameter) when calling the Publish operation: Invalid parameter: TopicArn Reason: A * ARN must begin with arn:null, not arn:aws:sns:*:123456789:my_topic

共有1个答案

濮升
2023-03-14

文档没有显示它在您使用它的上下文中是有效的。您误用或误解了文档,混淆了模式和文字的适用性。Publish需要一个文本,在底层API文档的相关部分中没有提到通配符。

当特定服务支持资源级策略时,指定应用IAM策略语句的资源时,可以使用通配符作为资源ARN的一部分。

从SNS特定的策略语言留档:

对于Amazon SNS,主题是您可以在策略中指定的唯一资源类型。以下是主题的Amazon资源名(ARN)格式

实例

如果您在亚马逊SNS支持的每个不同地区都有一个名为my_topic的主题,您可以使用以下ARN指定主题。

arn:aws:sns:::123456789012:my_主题

http://docs.aws.amazon.com/sns/latest/dg/UsingIAMwithSNS.html#SNS_ARN_Format

但是,这些都只适用于策略,这些策略还支持模式,如arn:aws:sns:::123456789012:bob*,并且这种模式(可能更直观地说)对于发布请求来说不是有效的主题。

 类似资料:
  • 阅读:Kafka Connect FileStreamSource忽略附加行 看来Kafka现在支持这一观点,他说: https://docs.confluent.io/5.5.0/connect/management/configuring.html#Standalone-示例 是否声明该文件被监视: 开始独立连接 将文件的所有内容添加到主题中,将新行添加到中不会将这些行添加到主题中。是否需要配

  • 目前,我已经开始使用ActiveMQ处理JMS主题。我已经通过JAVA代码(如下所述)创建了发布者和持久订阅者,并且在订阅者端也收到了消息。 Publisher.Java 订阅者.java 我对以下主题有一些疑问, 如何检查有多少订阅者使用 Java JMS 在主题中主动查找消息? 如何从主题中获取活动和持久订阅者列表? 我们是否可以删除主题中发布的消息? 在这些情况下帮助我。 提前致谢。

  • 我们有一个具有多个kafka spout任务的拓扑。每个spout任务都应该从一组Kafka主题中读取消息的子集。主题必须使用通配符(如aaa.bbb.*)来订阅。预期的行为是,所有spout任务将共同使用与通配符匹配的所有主题中的所有消息。每个消息只路由到单个spout任务(忽略失败场景)。当前是否支持此操作?

  • 日志中的错误 2020-05-28 15:52:53.597错误112469---[nio-8080-exec-1]O.a.C.C.C.[.[.[/].[dispatcherServlet]:servlet.Service()对于servlet[dispatcherServlet]在路径[]上下文中引发异常[请求处理失败;嵌套异常是java.lang.IllegalStateException:没

  • 看起来,PublishBuildArtifacts任务在发布环境中不可用。 https://docs.microsoft.com/de-de/azure/devops/pipelines/tasks/utility/publish-pipeline-artifact?view=azure-德沃斯 但是,当我们的客户从Azure存储库(通用软件包)中获取新的工件版本时,有机会通过发布管道发布这些工件