Erweiterte Amazon SNS SNS-Clientbibliothek für Python - Amazon Simple Notification Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erweiterte Amazon SNS SNS-Clientbibliothek für Python

Voraussetzungen

Im Folgenden sind die Voraussetzungen für die Verwendung der Amazon SNS Extended Client Library für Python aufgeführt:

  • Ein AWS SDK.

    Das Beispiel auf dieser Seite verwendet das AWS Python-SDK Boto3. Informationen zur Installation und Einrichtung des SDK finden Sie in der Dokumentation zum AWS -SDK für Python.

  • Und AWS-Konto mit den richtigen Anmeldeinformationen.

    Um ein Konto zu erstellen AWS-Konto, navigieren Sie zur AWS Startseite und wählen Sie dann Create an AWS Account aus. Folgen Sie den Anweisungen.

    Weitere Informationen zu Anmeldeinformationen finden Sie unter Anmeldeinformationen im Entwicklerhandbuch zu AWS -SDK für Python.

  • Python 3.x (oder höher) und Pip.

  • Die erweiterte Amazon SNS Extended Client Library für Python (ist auch verfügbar von Maven) enthalten.

Konfigurieren der Nachrichtenspeicherung

Die folgenden Attribute sind auf Boto3 Amazon SNS Client, Topic und PlatformEndpointObjekten zur Konfiguration der Amazon S3 S3-Nachrichtenspeicheroptionen verfügbar.

  • large_payload_support – der Name des Amazon-S3-Buckets zum Speichern großer Nachrichten.

  • message_size_threshold – der Schwellenwert für das Speichern der Nachricht im großen Nachrichten-Bucket. Der Wert darf nicht kleiner als 0 oder größer als 262144 sein. Der Standardwert ist 262144.

  • always_through_s3 – bei True werden alle Nachrichten in Amazon S3 gespeichert. Der Standardwert ist False.

  • s3 – das resource-Objekt von Boto3 Amazon S3, das zum Speichern von Objekten in Amazon S3 verwendet wird. Verwenden Sie dies, wenn Sie die Amazon-S3-Ressource steuern möchten (z. B. eine benutzerdefinierte Konfiguration oder Anmeldeinformationen für Amazon S3). Wenn dies nicht bereits bei der ersten Verwendung festgelegt wurde, ist die Standardeinstellung boto3.resource("s3").

Beispiel: Veröffentlichen von Nachrichten in Amazon SNS mit einer in Amazon S3 gespeicherten Nutzlast

Wie das aussehen kann, sehen Sie am nachfolgenden Beispielcode:

  • Erstellen Sie Beispiele für ein Amazon-SNS-Thema und eine Amazon-SQS-Warteschlange.

  • Die abonnierte Queue kann nun Nachrichten vom Thema empfangen.

  • Veröffentlichen Sie eine Testnachricht.

  • Die Nachrichtennutzlast wird in Amazon S3 gespeichert und der Verweis darauf wird veröffentlicht.

  • Drucken Sie die veröffentlichte Nachricht aus der Warteschlange zusammen mit der aus Amazon S3 abgerufenen Originalnachricht aus.

Um eine große Nachricht zu veröffentlichen, verwenden Sie die Amazon SNS Extended Client Library für Python. Die Nachricht, die Sie senden, verweist auf ein Amazon-S3-Objekt, das den tatsächlichen Nachrichteninhalt enthält.

import boto3 import sns_extended_client from json import loads s3_extended_payload_bucket = "extended-client-bucket-store" TOPIC_NAME = "TOPIC-NAME" QUEUE_NAME = "QUEUE-NAME" # Create an helper to fetch message from S3 def get_msg_from_s3(body): json_msg = loads(body) s3_client = boto3.client("s3") s3_object = s3_client.get_object( Bucket=json_msg[1].get("s3BucketName"), Key=json_msg[1].get("s3Key") ) msg = s3_object.get("Body").read().decode() return msg # Create an helper to fetch and print message SQS queue and S3 def fetch_and_print_from_sqs(sqs, queue_url): """Handy Helper to fetch and print message from SQS queue and S3""" message = sqs.receive_message( QueueUrl=queue_url, MessageAttributeNames=["All"], MaxNumberOfMessages=1 ).get("Messages")[0] message_body = message.get("Body") print("Published Message: {}".format(message_body)) print("Message Stored in S3 Bucket is: {}\n".format(get_msg_from_s3(message_body))) # Initialize the SNS client and create SNS Topic sns_extended_client = boto3.client("sns", region_name="us-east-1") create_topic_response = sns_extended_client.create_topic(Name=TOPIC_NAME) demo_topic_arn = create_topic_response.get("TopicArn") # Create and subscribe an SQS queue to the SNS client sqs = boto3.client("sqs") demo_queue_url = sqs.create_queue(QueueName=QUEUE_NAME).get("QueueUrl") demo_queue_arn = sqs.get_queue_attributes(QueueUrl=demo_queue_url, AttributeNames=["QueueArn"])["Attributes"].get("QueueArn") # Set the RawMessageDelivery subscription attribute to TRUE sns_extended_client.subscribe(TopicArn=demo_topic_arn, Protocol="sqs", Endpoint=demo_queue_arn, Attributes={"RawMessageDelivery":"true"}) sns_extended_client.large_payload_support = s3_extended_payload_bucket # To store all messages content in S3, set always_through_s3 to True # In the example, we set message size threshold as 32 bytes, adjust this threshold as per your usecase # Message will only be uploaded to S3 when its payload size exceeded threshold sns_extended_client.message_size_threshold = 32 sns_extended_client.publish( TopicArn=demo_topic_arn, Message="This message should be published to S3 as it exceeds the message_size_threshold limit", ) # Print message stored in s3 fetch_and_print_from_sqs(sqs, demo_queue_url)

Ausgabe

Published Message: [ "software.amazon.payloadoffloading.PayloadS3Pointer", { "s3BucketName": "extended-client-bucket-store", "s3Key": "xxxx-xxxxx-xxxxx-xxxxxx" } ] Message Stored in S3 Bucket is: This message should be published to S3 as it exceeds the message_size_threshold limit