SQS( Simple Queue Service )は完全マネージドのメッセージキューイングサービス。
各システム間でのメッセージ伝達に利用します。
データベースが情報の記録を目的としたものだとしたら、キューサービスはメッセージの配送を目的とする。
尚、SQSの標準キュー
はベストエフォートで処理されており、キューの配送の順序保証、重複配信の制御保証は行っていないので、配送先での処理で管理する必要がある。
順序保証、重複配信の制御保証をマネージドサービス側で行う場合は、FIFOキュー
としてサービス側でキューを作成する。
作成したQueueの基本要素
- queue-name: バッファリングするスペースを指す。SQSでキュー作成時に指定する。
- message-body: プッシュされたキューの名称。タイトルのようなもの。
- message-attributes: プッシュされたキューの構成要素。bodyがkeyだとしたらattributesはkeyが指すobject
bodyとattributesは
{"message-body":{ "attr1": "value1", "attr2": "valuie2" }}
のような関係。実際はattributesは予約されたキーを指定する必要がある。
AWS CLIからの操作
キューURLの確認
$ aws sqs get-queue-url --queue-name YOUR_QUEUE_NAME { "QueueUrl": "https://sqs.ap-northeast-1.amazonaws.com/.../YOUR_QUEUE_NAME" }
バッファ中のキュー数の確認
$ aws sqs get-queue-attributes --queue-url https://sqs.ap-northeast-1.amazonaws.com/.../YOUR_QUEUE_NAME --attribute-names ApproximateNumberOfMessages { "Attributes": { "ApproximateNumberOfMessages": "11" } }
キューのPUSH
message-attributes
は以下のようにDataType
とStringValue
(属性として持つ値)を使用して設定を行います。
$ aws sqs send-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/.../YOUR_QUEUE_NAME --message-body "Message From AWS CLI" --message-attributes '{"attr1":{"DataType":"String", "StringValue":"value of attr1"}}'
send-message — AWS CLI 1.18.74 Command Reference
Python Lambda関数からのQueue送信
boto3を使ったPython Lambda関数での、SQSメッセージ送信の例。
import boto3 def lambda_handler(event, context): sqs = boto3.resource('sqs') queue = sqs.get_queue_by_name(QueueName="your_queue_name") sqsresponse =queue.send_message( MessageBody="specify_message_body", MessageAttributes={ 'attr1': { 'DataType': 'String', 'StringValue': "value of attr1" }, 'attr2': { 'DataType': 'String', 'StringValue': "value of attr2" }, 'attr3': { 'DataType': 'String', 'StringValue': "value of attr3" } } )
リンク