Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Gestion de messages Amazon SQS volumineux à l'aide de Python et Amazon S3
Utilisez la bibliothèque client étendue Amazon SQS Amazon SQS pour Python avec Amazon S3 pour gérer les
Avec la bibliothèque client étendue Amazon SQS pour Python, vous pouvez :
-
Spécifiez si les charges utiles sont toujours stockées dans Amazon S3 ou uniquement stockées dans Amazon S3 lorsque la taille de la charge utile dépasse 256 Ko
-
Envoyer un message qui fait référence à un seul objet de message stocké dans un compartiment Amazon S3
-
Récupérez l'objet de charge utile correspondant dans un compartiment Amazon S3
-
Supprimer l'objet de charge utile correspondant d'un compartiment Amazon S3
Prérequis
Les conditions requises pour utiliser la bibliothèque client étendue Amazon SQS pour Python sont les suivantes :
-
Un AWS compte avec les informations d'identification nécessaires. Pour créer un AWS compte, accédez à la page d'AWS accueil
, puis choisissez Créer un AWS compte. Suivez les instructions à l’écran. Pour plus d'informations sur les informations d'identification, consultez la section Informations d'identification . -
Un AWS SDK : l'exemple de cette page utilise le SDK AWS Python Boto3. Pour installer et configurer le SDK, consultez la documentation du AWS SDK pour Python
dans le guide du développeur du AWS SDK pour Python -
Python 3.x (ou version ultérieure) et.
pip
-
La bibliothèque client étendue Amazon SQS pour Python, disponible auprès de PyPI
Note
Vous pouvez utiliser la bibliothèque client étendue Amazon SQS pour Python pour gérer les messages Amazon SQS à l'aide d'Amazon S3 uniquement avec le AWS SDK pour Python. Vous ne pouvez pas le faire avec la AWS CLI, la console Amazon SQS, l'API HTTP Amazon SQS ou toute autre solution. AWS SDKs
Configurer le stockage de messages
Le client Amazon SQS Extended utilise les attributs de message suivants pour configurer les options de stockage des messages Amazon S3 :
-
large_payload_support
: nom du compartiment Amazon S3 pour stocker les messages volumineux. -
always_through_s3
: SiTrue
, alors tous les messages sont stockés dans Amazon S3. DansFalse
le cas contraire, les messages inférieurs à 256 Ko ne seront pas sérialisés dans le compartiment s3. L’argument par défaut estFalse
. -
use_legacy_attribute
: Si tousTrue
les messages publiés utilisent l'attribut de message réservé Legacy (SQSLargePayloadSize
) au lieu de l'attribut de message réservé actuel (ExtendedPayloadSize
).
Gestion de messages Amazon SQS volumineux avec la bibliothèque client étendue pour Python
L'exemple suivant crée un compartiment Amazon S3 avec un nom aléatoire. Il crée ensuite une file d'attente Amazon SQS nommée MyQueue
et envoie un message qui est stocké dans un compartiment S3 et dont la taille est supérieure à 256 Ko à la file d'attente. Enfin, le code récupère le message, renvoie des informations sur ce dernier et le supprime, ainsi que la file d'attente et le compartiment.
import boto3 import sqs_extended_client #Set the Amazon SQS extended client configuration with large payload. sqs_extended_client = boto3.client("sqs", region_name="us-east-1") sqs_extended_client.large_payload_support = "amzn-s3-demo-bucket" sqs_extended_client.use_legacy_attribute = False # Create an SQS message queue for this example. Then, extract the queue URL. queue = sqs_extended_client.create_queue( QueueName = "MyQueue" ) queue_url = sqs_extended_client.get_queue_url( QueueName = "MyQueue" )['QueueUrl'] # Create the S3 bucket and allow message objects to be stored in the bucket. sqs_extended_client.s3_client.create_bucket(Bucket=sqs_extended_client.large_payload_support) # Sending a large message small_message = "s" large_message = small_message * 300000 # Shall cross the limit of 256 KB send_message_response = sqs_extended_client.send_message( QueueUrl=queue_url, MessageBody=large_message ) assert send_message_response['ResponseMetadata']['HTTPStatusCode'] == 200 # Receiving the large message receive_message_response = sqs_extended_client.receive_message( QueueUrl=queue_url, MessageAttributeNames=['All'] ) assert receive_message_response['Messages'][0]['Body'] == large_message receipt_handle = receive_message_response['Messages'][0]['ReceiptHandle'] # Deleting the large message # Set to True for deleting the payload from S3 sqs_extended_client.delete_payload_from_s3 = True delete_message_response = sqs_extended_client.delete_message( QueueUrl=queue_url, ReceiptHandle=receipt_handle ) assert delete_message_response['ResponseMetadata']['HTTPStatusCode'] == 200 # Deleting the queue delete_queue_response = sqs_extended_client.delete_queue( QueueUrl=queue_url ) assert delete_queue_response['ResponseMetadata']['HTTPStatusCode'] == 200