[aws] sqs メッセージの送受信


概要

業務でSQSを使用する機会があったため、その際に行った動作確認方法をまとめます。

SQSとは

SQS(Amazon Simple Queue Service)はメッセージキューであり、データの送受信を仲介する役割を持つサービスです。
メッセージブローカとして有名なRabbitMQとほぼ同じ機能を持っています。

SQSを使用する利点は以下の通りです。
https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html

  • セキュリティ
    • AWS KMS で管理されたキーを使用してキューのメッセージのコンテンツを保護するため、重要なデータを送信することが可能
  • 耐久性
    • メッセージの安全性を確保するため、 Amazon SQS 複数のサーバーに保存
  • 可用性
    • 冗長なインフラストラクチャを使用して同時実行性が高いメッセージへのアクセスと、メッセージの作成と消費のための高い可用性
  • スケーラビリティ
    • プロビジョニング指示を必要とせずに負荷の増大やスパイクに対応
  • 信頼性
    • 複数のプロデューサーがメッセージを送信するのと同時に、複数のコンシューマーがメッセージを受信
  • カスタマイズ
    • ユーザ側である程度カスタマイズすることが可能

キューの作成

データの送受信を行う前に、キューを作成する必要があります。
AWS コンソール サービス → sqs → キューの作成 の手順で作成します。

キューには標準FIFOがありますが、動作確認を行うだけなので今回は標準とします。

データの送信

データの送信方法は以下の通りです。
事前にaws configureを設定しておく必要があります。

import boto3
import json

que_name = 'test_que'
sqs = boto3.resource('sqs')
queue = sqs.get_queue_by_name(QueueName=que_name)

def sqs_send_msg():

    msg = [{'Id': '1', 'MessageBody': json.dumps([{'result': "msg_1"}])}]
    response = queue.send_messages(Entries=msg)

    print(response)
    return response

sqs_send_msg()

データの受信

sqsのurlを指定してsqsとの通信を行うことも可能です。
urlはAWSコンソール画面から確認できます。

import boto3
import json

sqs = boto3.client('sqs')
queue_url = "https://sqs.ap-northeast-1.amazonaws.com/xxxxxxxxxxxx/test_que"

def sqs_receive_msg():
    msg = sqs.receive_message(QueueUrl=queue_url, MaxNumberOfMessages=10)
    print(msg)

sqs_receive_msg()