有没有办法找到给定 AWS 账户 ID 具有发布(或任何其他)权限的 SNS 主题列表?
我的用例如下:
- 服务器程序允许不同的客户端将消息发布到其拥有的 SNS 主题上。服务器程序在各个 AWS 区域都有这些 SNS 主题。
- 在每个 AWS 区域中,每个客户端都被授予对 SNS 主题的“发布”权限。
- 客户端获得主题名称,并根据区域派生主题 ARN 并发布消息。
我想避免按 AWS 区域维护这些主题的 ARN,并将它们分发到客户端配置中,并且想知道客户端是否有办法根据主题名称和 AWS 区域派生主题 ARN ,通过 AWS 提供的一些 API(而不是将 ARN 形成为 aws:${region}:sns:${topicName}
。
最佳答案
我假设 ListTopicsResult 将仅返回您可以访问的主题的主题 arns。
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
*/
}
}
}
关于java - 获取具有发布权限的 AWS 账户的 SNS 主题列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20106702/