2016-09-13 1 views
1

HintergrundBoto3 SNS eine Wildcard veröffentlicht Thema ARN

AWS-Dienste regional sind (z us-west-2, us-east-1) und die boto3 Bibliothek erfordert, dass Sie einen Standardbereich zu setzen, bevor Sie den Client oder Ressourcen zugreifen. Die Dokumentation here zeigt jedoch, dass Sie ein SNS Topic ARN mit einem Platzhalter für die Region haben können. Die Dokumentation sagt:

Dokumentation: Amazon Simple Notification Service (Amazon SNS)

Syntax:

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

Beispiele:

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

-Code

Wenn ich SNS-Ressource/-Client von Boto3 zum Veröffentlichen in einem Topic-ARN (mit einem Platzhalter für die Region) verwende, erhalte ich den folgenden Fehler. Wenn ich keinen Platzhalter für die Region habe (z. B. us-west-2), funktioniert alles. Ich schaute in die Boto3-Bibliothek und es scheint nur Werte in einem JSON-Mapping zu ersetzen (z. B. fügt Topic String), so dass ich nicht verstehe, warum dies ein ungültiger Parameter wäre, wenn die obige Dokumentation zeigt, dass es gültig ist.

import boto3 

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

Fehlermeldung

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 

Antwort

2

Die Dokumentation zeigt nicht, dass es für den Kontext gültig ist, in dem Sie es verwenden. Sie können die Dokumentation falsch anwenden oder falsch interpretieren, wodurch die Anwendbarkeit von Mustern und Literalen verfälscht wird. Publish benötigt ein Literal und erwähnt keine Platzhalter in relevant section der Dokumente der zugrunde liegenden API.

You can use wildcards as part of the resource ARN bei der Angabe der Ressource, für die eine IAM-Richtlinienanweisung gilt, wenn der jeweilige Dienst Richtlinien auf Ressourcenebene unterstützt.

Von der SNS spezifischen Dokumentation Politik Sprache:

Für Amazon SNS, Themen sind die einzige Art Ressource, die Sie in einer Richtlinie angeben können. Im Folgenden finden Sie das ARN-Format (Amazon Resource Name) für Themen.

Beispiel

Wenn Sie in jedem der verschiedenen Regionen, die Amazon SNS unterstützt ein Thema namens my_topic hatte, um die Themen der folgenden ARN angeben könnte.

arn:aws:sns:*:123456789012:my_topic

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

Allerdings ist dies alles gilt nur für Maßnahmen, die auch Muster wie arn:aws:sns:*:123456789012:bob_* unterstützen, und ein solches Muster würde (vielleicht mehr intuitiv) kein gültiges Thema sein, Publish Anfrage.

Verwandte Themen