2016-04-07 26 views
5

Ho iniziato a lavorare con AWS SNS per inviare notifiche push alla mia app. Oggi, per ottenere un argomento a cui voglio inviare notifiche push, ho bisogno di caricare tutti gli argomenti - usando l'elenco di funzioni del client SNSTopics() - e controllare ciascun argomento per vedere se l'ARN ha il nome dell'argomento che sto cercando per.AWS SNS argomento per nome

Penso che sia un modo molto inefficiente per ottenere un argomento ARN e vorrei sapere se esiste un modo più efficiente per ottenere queste informazioni, ad esempio una funzione getTopicByName o qualcos'altro.

In caso contrario, mi piacerebbe sapere se l'ARN è immutabile e se è possibile archiviare l'argomento ARN nel mio database?

Grazie.

risposta

4

Non conosco alcun modo per cercare un argomento SNS per nome.

L'ARN è immutabile. Non cambierà per la durata dell'argomento SNS. In particolare, secondo the documentation un ARN per un argomento di SNS è nel seguente formato:

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

Quindi l'unico modo per ARN del tema SNS per cambiare potrebbe essere quella di cambiare il nome (nel qual caso la vostra ricerca anche per nome si romperà), o eliminare l'argomento e ricrearlo in una nuova regione o in un account completamente diverso, nel qual caso non sarebbe più lo stesso argomento.

+0

Grazie uomo, in ultimo dubbio, questa regola di Arn funziona per qualsiasi arn (argomento, endpoint, applicazione, ecc)? – GodFather

+0

Sì, non dovrebbero cambiare –

7

Se sai che l'argomento esiste già o non ti interessa se viene creato, un approccio molto più diretto è semplicemente chiamare CreateTopic. Dato un nome, CreateTopic restituirà l'argomento esistente, incluso l'ARN.

3

Se l'argomento è già disponibile, è possibile utilizzare il metodo "createTopic" come segue. Con questo se il richiedente possiede già un argomento con il nome specificato, l'ARN di tale argomento viene restituito senza creare un nuovo argomento. In AWS Java SDK, il codice sarà simile a questo.

AWSCredentialsProvider provider = new ProfileCredentialsProvider(); 
    AmazonSNS sns = AmazonSNSClientBuilder.standard().withCredentials(provider).build(); 
    CreateTopicResult createRes = sns.createTopic("HelloTopic"); 

Poi utilizzando CreateTopicResult è possibile ottenere l'ARN Tema e pubblicare il messaggio

sns.publish(new PublishRequest(createRes.getTopicArn(), "Hello World"));