2

有没有办法找到给定 AWS 账户 ID 具有 PUBLISH(或任何其他)权限的 SNS 主题列表?

我的用例如下:

  1. 服务器程序允许不同的客户端将消息发布到它拥有的 SNS 主题上。服务器程序在各个 AWS 区域都有这些 SNS 主题。
  2. 在每个 AWS 区域中,每个客户端都被授予对 SNS 主题的“发布”权限。
  3. 客户端被赋予主题的名称,并且基于区域,它必须派生主题 ARN 并发布消息。

我想避免按 AWS 区域维护这些主题的 ARN 并将它们分发到客户端配置中,并且想知道客户端是否可以通过一些方法根据主题名称和 AWS 区域派生主题 ARN AWS 提供的 API(而不是以aws:${region}:sns:${topicName}.

4

1 回答 1

2

我假设 ListTopicsResult 只会返回您可以访问的主题的主题。

import java.util.List;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.sns.AmazonSNSClient;
import com.amazonaws.services.sns.model.ListTopicsRequest;
import com.amazonaws.services.sns.model.ListTopicsResult;
import com.amazonaws.services.sns.model.Topic;

public class TestSNS {
    public static void main(String[] args) {
        AWSCredentials credentials = new BasicAWSCredentials(args[0], args[1]);
        AmazonSNSClient snsClient = new AmazonSNSClient(credentials);

        ListTopicsResult listTopicsResult = snsClient.listTopics();
        String nextToken = listTopicsResult.getNextToken();
        List<Topic> topics = listTopicsResult.getTopics();

        // ListTopicResult contains only 100 topics hence use next token to get
        // next 100 topics.
        while (nextToken != null) {
            listTopicsResult = snsClient.listTopics(nextToken);
            nextToken = listTopicsResult.getNextToken();
            topics.addAll(listTopicsResult.getTopics());
        }

        // Display all the Topic ARN's
        for (Topic topic : topics) {
            System.out.println(topic);
            /*
             * perform your actions here
             */
        }
    }
}
于 2014-08-29T04:24:47.710 回答