Libreria client estesa Amazon SNS per Python - Amazon Simple Notification Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Libreria client estesa Amazon SNS per Python

Prerequisiti

Di seguito sono indicati i prerequisiti per l’utilizzo della Libreria client ampia di Amazon SNS per Python:

  • Un AWS SDK.

    L'esempio in questa pagina utilizza AWS Python SDK Boto3. Per installare e configurare l'SDK, consultare la documentazione SDK AWS per Python.

  • E Account AWS con le credenziali appropriate.

    Per crearne uno Account AWS, vai alla AWS home page, quindi scegli Crea un AWS account. Segui le istruzioni.

    Per ulteriori informazioni sulle credenziali, consultare Credenziali nella Guida per sviluppatori di SDK AWS per Python.

  • Python 3.x (o versioni successive) e pip.

  • La libreria client ampia di Amazon SNS per Python (disponibile anche da PyPI).

Configurazione dello storage dei messaggi

Gli attributi seguenti sono disponibili su Boto3 Amazon SNS Client, Topic PlatformEndpointe Objects per configurare le opzioni di storage dei messaggi di Amazon S3.

  • large_payload_support – Il nome del bucket Amazon S3 per archiviare messaggi di grandi dimensioni.

  • message_size_threshold – La soglia per l'archiviazione del messaggio nel bucket dei messaggi di grandi dimensioni. Non può essere minore di 0 o maggiore di 262144. Il valore predefinito è 262144.

  • always_through_s3 – Se True, tutti i messaggi vengono archiviati in Amazon S3. Il valore predefinito è False.

  • s3 – L'oggetto resource di Boto3 Amazon S3 utilizzato per archiviare oggetti in Amazon S3. Utilizzalo se desideri controllare la risorsa Amazon S3 (ad esempio, una configurazione o credenziali Amazon S3 personalizzate). Se non è stato impostato in precedenza al primo utilizzo, l'impostazione predefinita è boto3.resource("s3").

Esempio: pubblicazione di messaggi su Amazon SNS con payload memorizzato in Amazon S3

L'esempio di codice seguente mostra come:

  • Crea un argomento Amazon SNS di esempio e una coda Amazon SQS.

  • Iscriviti alla coda per ricevere messaggi dall'argomento.

  • Pubblicare un messaggio di prova.

  • Il payload del messaggio è memorizzato in Amazon S3 e il riferimento ad esso è pubblicato.

  • Stampa il messaggio pubblicato dalla coda insieme al messaggio originale recuperato da Amazon S3.

Per pubblicare un messaggio di grandi dimensioni, utilizza la Libreria client ampia di Amazon SNS per Python. Il messaggio che invii fa riferimento a un oggetto Amazon S3 contenente il contenuto effettivo del messaggio.

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)

Output

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