あめがえるのITブログ

頑張りすぎない。ほどほどに頑張るブログ。

Amazon SQSをPythonから操作してみた

今日はAmazon SQSをPythonから操作します!(`□´)

◆やること

CloudShellでPythonの対話モードからAmazon SQSを操作

◆実践!

1.キュー作成
・CloudShellへログインし、下記を実行

$ python3 -V
Python 3.7.16
$ python3
>>> import boto3
>>> queue_name = 'Test1'
>>> sqs = boto3.resource('sqs')
>>> sqs.create_queue(QueueName=queue_name)
※対話モードから抜ける場合は[ctrl]+[D]

2.キュー確認
・同じくCloudShellから下記を実行

$ python3
>>> import boto3
>>> queue_name = 'Test1'
>>> sqs = boto3.resource('sqs')
>>> print(sqs.get_queue_by_name(QueueName=queue_name))

3.メッセージ送信
・同じくCloudShellから下記を実行

$ python3
>>> import boto3
>>> queue_name = 'Test1'
>>> sqs = boto3.resource('sqs')
>>> queue = sqs.get_queue_by_name(QueueName=queue_name)
>>> msg_list = [
...{ 'Id': '1','MessageBody': 'Test1'},
...{ 'Id': '2','MessageBody': 'Test2'}
...]
>>> response = queue.send_messages(Entries=msg_list)
>>> print(response)
{'Successful': [{'Id': '1', 'MessageId': 'bfa16478-d76e-4435-bfe4-8732ecc64f1e', 'MD5OfMessageBody': '0cbc6611f5540bd0809a388dc95a615b'}, {'Id': '2', 'MessageId': 'fa166289-9bf3-42e7-ae95-a28a11f86ce9', 'MD5OfMessageBody': 'c454552d52d55d3ef56408742887362b'}], 'ResponseMetadata': {'RequestId': 'faffe300-e39d-59b8-b3aa-bfca27b6bd80', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'faffe300-e39d-59b8-b3aa-bfca27b6bd80', 'date': 'Tue, 02 May 2023 07:55:23 GMT', 'content-type': 'text/xml', 'content-length': '664'}, 'RetryAttempts': 0}}
こんな感じのが返ってきたら成功!

4.メッセージ取得

$ python3
>>> import boto3
>>> queue_name = 'Test1'
>>> sqs = boto3.resource('sqs')
>>> queue = sqs.get_queue_by_name(QueueName=queue_name)
>>> messages = queue.receive_messages(
...MessageAttributeNames=['All'],
...MaxNumberOfMessages=10
...)
>>> messages[0]
sqs.Message(queue_url='https://sqs.ap-northeast-1.amazonaws.com/xxxx/Test1', receipt_handle='AQEBdwtvvMvVQs+bFVVXLsXn6aqRvMda6RwuzU3f2KBstLA7mpKMsN1gnfqHU7RtSvHB5H2UAYtpmfalcAiWV1hcGFYG7Gf+hHclMSvaioTLDG7bgRawQktXXDYVcQNUppHR8XNWLhoqn/ZfWBQix/OsIs5pxNz5/j3hH8tB9+/3ulnYLCyqUoFtS3n03XIFaQaETLKLYYBpzBYmpIBqm92RUT+juN8DwA8rPpVWpRmDY8fBKTeLg4CMdD3Ysr+NKhxZPAYa/BzxdUEINH/xO+ZSisBOCoTzzLh9mZQMWpoTRHIsi4wQ9xzBatkj/MUh1fhbiJaz4fDDUYwbe/3o2cVhKkx39WGXYU72eNorEeaxGNu4z8ary94jKkvLw94vuOxOCoYTnwQ6tyKvh+5ZRsiARQ==')

5.メッセージ削除

$ python3
>>> import boto3
>>> queue_name = 'Test1'
>>> sqs = boto3.resource('sqs')
>>> queue = sqs.get_queue_by_name(QueueName=queue_name)
>>> messages = queue.receive_messages(
...MessageAttributeNames=['All'],
...MaxNumberOfMessages=10
...)

・すべて削除する場合:
>>> for message in messages:
...  message.delete()
※注意:ここの...の後ろにはスペースが必要!
・1つずつ削除する場合
>>> messages[0].delete()

◆後処理

1.キュー削除

$ python3
>>> import boto3
>>> queue_name = 'Test1'
>>> sqs = boto3.resource('sqs')
>>> queue = sqs.get_queue_by_name(QueueName=queue_name)
>>> response = queue.delete()
>>> print(response)
{'ResponseMetadata': {'RequestId': '51c323e1-1b21-5123-8fa9-7f2bd4c7f115', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '51c323e1-1b21-5123-8fa9-7f2bd4c7f115', 'date': 'Tue, 02 May 2023 08:45:26 GMT', 'content-type': 'text/xml', 'content-length': '211'}, 'RetryAttempts': 0}}

◆感想

CloudShellが正しいコマンドを打ち込んでるのにやたらInternal Server Errorをやたら吐くのであまり進まなかった。。 やり方が悪いのか、、(´Д`。)