notebook

都内でWEB系エンジニアやってます。

Simple Quere Serviceを使ってみる

autoscalingの通知先として選べるので使いそう、ということで触ってみました

やってる事はいたってシンプルです

cliでqueueへメッセージを登録、同じくcliでqueueからメッセージを取得するだけ

事前にコマンドを発行するEC2にIAM Roleを適用させておくかcredentialsの登録をしておく必要があります

credentialsの用意

IAM Roleじゃない場合下記手順でキーを登録します

  • credentials-as.txt
AWSAccessKeyId=***
AWSSecretKey=***
export AWS_CREDENTIAL_FILE=filepath

queueリストを表示(登録前)

aws sqs list-queues --region ap-southeast-1

queueの作成

URLはエンドポイント、アカウントID、queue名っぽい(未確認)

aws sqs create-queue --queue-name sample  --region ap-southeast-1
{
    "QueueUrl": "https://ap-southeast-1.queue.amazonaws.com/111111111111/sample"
}

queueのリストを表示

aws sqs list-queues --region ap-southeast-1
{
    "QueueUrls": [
        "https://ap-southeast-1.queue.amazonaws.com/111111111111/sample"
    ]
}

メッセージの登録

基本的にはqueueのURL、リージョンを指定してあげる必要があるようです

aws sqs send-message --queue-url  https://ap-southeast-1.queue.amazonaws.com/111111111111/sample --message-body "test message" --region ap-southeast-1
{
    "MD5OfMessageBody": "c72b9698fa1927e1dd12d3cf26ed84b2",
    "MessageId": "4ad8e8f2-4478-4c5c-a67d-4fe832689878"
}

メッセージの受信

aws sqs receive-message --queue-url https://ap-southeast-1.queue.amazonaws.com/111111111111/sample --region ap-southeast-1
{
    "Messages": [
        {
            "Body": "test message",
            "ReceiptHandle": "AQEBQTSAy7clxU3MYjZvQlKAKROQHLY7KdAFRTxAwxZD2deqRtp30anXPLW4maSbgKVN9SBw9jDhM48duOi2VfezLkzujAby4wfiYa3zXkA93z5iX9h9ytHGxOA3nblrR79kRTb9T6ppIfGjWlgvubwC4gY3eAOnglgVL4LmaksTOlZ22F3XchcB2ff9MfQIIuVL5yap+P3GjjqA4lyCEGu/+MvCQt9ZjewKwYrxxHDHGlCHyrIQDbh5cZ0y5wnheI0fNPGak/zu9m3WSH/ZBKhMS3sfxylCBleY12NH1gRpFaivhkFhtrZb6rNjfagqU18TIvtpQQcYabrzje+1mNo9dSy4DE3zxGojEnoxoskNMSGs+QzOB77gb9mIJaxuPQ/kho3q93DqyOsdIQYu1NfGRQ==",
            "MD5OfBody": "c72b9698fa1927e1dd12d3cf26ed84b2",
            "MessageId": "4ad8e8f2-4478-4c5c-a67d-4fe832689878"
        }
    ]
}

受け取ったメッセージをもとに処理をさせたりする事が出来ます

autoscalingでのSQS利用も出来るようなので次回やってみます

メッセージの削除

処理が終ったらqueueを削除します

メッセージの受信時に得られるReceiptHandleの値を使って削除用のコマンドを叩きます

aws sqs delete-message --queue-url https://ap-southeast-1.queue.amazonaws.com/111111111111/sample --region ap-southeast-1 --receipt-handle "AQEBPOHXHziJPwmZW6WIhi6p2xAFikhUvkLyyTeHfbLbt5wukbcFi63eisXhOjdKuYqjA7Y9Q8j2V+UAIIbdEw3rtIhbobYEeugb+dgKEufKaOrcgf6PqLulPh6d9HyvVSbLAlm4/J983PBn0qi8IcSERg3hA8urlVRAC26DGNc2o2ze0tsZP5PWJwBjU3oUqbstWiNW8d/A3nGysbVVpXsnb26BLCpyslYTkiGqrwA5XWQp+YrpK2PCkpftIjg32X5I3vKzfnoVc93pBTQpoIG9cJ6Ha1WcZ5jYdt5cXPoNL9VLLac9ajNvIUhs9KaAXtFjEMHXEtWHqrg5lRNSgtNnQyXqGvtZFgyYLT7Tl1wOy4AMWSQ0GgNHU6Bhb9f52OlDkxRIkWzzo382u6C6/yIErQ=="

SQS自体は分散キューだそうで、色々調べた感じ「 queueの受信は一回以上はある 」らしいので二回以上読み込んでしまうことがあるらしいです

なので二重処理のチェックなどは実装する必要がありそうですね