Amazon SQSをDockerを使ってローカルで実行

Amazon SQSのアイキャッチ画像プログラミング

Docker構築

Dockerfile作成

 今回はSQSと互換性のある、ElasticMQというものを使ってSQSをローカルで実現します。下記のコードをDockerfileにコピペしてください。
 ※最新のelasticmq-serverのバージョンが変わっているかもしれないので、変わっている場合はバージョンを変更してください。

GitHub - softwaremill/elasticmq: In-memory message queue with an Amazon SQS-compatible interface. Runs stand-alone or embedded.
In-memory message queue with an Amazon SQS-compatible interface. Runs stand-alone or embedded. - GitHub - softwaremill/elasticmq: In-memory message queue with a...
FROM java:8

ADD https://s3-eu-west-1.amazonaws.com/softwaremill-public/elasticmq-server-1.2.0.jar /elasticmq/elasticmq-server-1.2.0.jar
EXPOSE 9324
ENTRYPOINT ["java","-jar","/elasticmq/elasticmq-server-1.2.0.jar"]

Dockerのビルド

 Dockerfileがあるディレクトリで、下記コマンドを叩きます。 [-t]はタグ名をつけるためのオプションなので、好きなものに変更して大丈夫です。

docker build -t sqs/elasticmq:1.2.0 .

 これで、Dockerの構築が終わったので、次からAWS SQSのCLIで確認していきます。

AWS SQSのコマンド実行

SQSの動作確認

 まず下記コマンドを叩いてみましょう。もし何も表示されなければ動作しているので問題ありません。

aws sqs list-queues --endpoint-url http://localhost:9324

 下記が表示されてしまっている場合は、AWSの公式を参考に[aws configure]で設定しましょう。

AWS CLI を設定する - AWS Command Line Interface
AWS Command Line Interface (AWS CLI) を設定し、AWS とやり取りするための設定を指定します。
You must specify a region. You can also configure your region by running "aws configure".

キューの作成

 キューの作成は[create-queue]で実行します。 キューの名前を[–queue-name]で設定するので、好きなものをつけてください。今回は[queue]という名前を設定しています。

aws sqs create-queue --queue-name queue --endpoint-url http://localhost:9324

 キューの作成に成功したら、QueueUrlが返されるので、こちらは後ほども使うので取っておきましょう。

{
    "QueueUrl": "http://localhost:9324/000000000000/queue"
}

メッセージの作成

 メッセージの作成は[send-message]コマンドで実行します。また、[–queue-url]には先ほどキューを作成したときのURLを代入しましょう。

aws sqs send-message --queue-url http://localhost:9324/000000000000/queue --message-body "123456789012345" --endpoint-url http://localhost:9324

 メッセージが作成されると下記のようなレスポンスが返ってきます

{
    "MD5OfMessageBody": "ad5222e305a2d133d529f038caa88e1a",
    "MessageId": "38a69463-55be-46ab-9e59-81357491a8df"
}

メッセージの取得

 メッセージの取得には[receive-message]コマンドを使います。

aws sqs receive-message --queue-url http://localhost:9324/000000000000/queue --endpoint-url http://localhost:9324

 レスポンスは下記のようになります。メッセージは配列で返されます。また、ReceiptHandleはメッセージを一意に特定するもので、メッセージの削除などにも利用されます。

{
    "Messages": [
        {
            "MessageId": "38a69463-55be-46ab-9e59-81357491a8df",
            "ReceiptHandle": "38a69463-55be-46ab-9e59-81357491a8df#83dc385b-9cf9-4d39-8312-5881d683d40c",
            "MD5OfBody": "ad5222e305a2d133d529f038caa88e1a",
            "Body": "123456789012345"
        }
    ]
}

 ※SQSは可視性タイムアウトがデフォルトで30秒のため、一度取得したメッセージは30秒経つまで取得できないので、ご注意ください。

メッセージの削除

 メッセージの削除は[delete-message]コマンドを使います。[–receipt-handle]にメーセージのReceiptHandleを代入するとメッセージが削除できます。

aws sqs delete-message --queue-url http://localhost:9324/000000000000/queue --receipt-handle 38a69463-55be-46ab-9e59-81357491a8df#83dc385b-9cf9-4d39-8312-5881d683d40c --endpoint-url http://localhost:9324

 削除後のレスポンスはありません。

メッセージの可視性タイムアウトの変更

 メッセージの可視性タイムアウトを変更したい場合は、[change-message-visibility]コマンドを使います。[–visibility-timeout]に変更する値をいれましょう。

aws sqs change-message-visibility --queue-url http://localhost:9324/000000000000/queue --visibility-timeout 0 --receipt-handle 38a69463-55be-46ab-9e59-81357491a8df#83dc385b-9cf9-4d39-8312-5881d683d40c --endpoint-url http://localhost:9324

 削除後のレスポンスはありません。

キューのURLを忘れた場合

 キューのURLを忘れた場合は、[get-queue-url]を使います。[–queue-name]に知りたいキューの名前を入れます。

aws sqs get-queue-url --queue-name queue --endpoint-url http://localhost:9324

 レスポンスは下記のようになります。

{
    "QueueUrl": "http://localhost:9324/000000000000/queue"
}

queue を消したい場合

 キューを消したい場合は、[delete-queue]を使います。

aws sqs delete-queue --queue-url http://localhost:9324/000000000000/queue --endpoint-url http://localhost:9324

 削除後のレスポンスはありません。

queue の一覧を表示したい場合

 キューの一覧を表示したい場合は、[list-queues]コマンドを使います。

aws sqs list-queues --endpoint-url http://localhost:9324

 QueueUrlsの中に、配列でキューのURLの一覧が返されます。

{
    "QueueUrls": [
        "http://localhost:9324/000000000000/queue"
    ]
}

キューのattributeを取得したい時

 キューのattributeを取得したいときは、[get-queue-attributes]を使用します。

aws sqs get-queue-attributes --queue-url http://localhost:9324/000000000000/queue --attribute-names All --endpoint-url http://localhost:9324
{
    "Attributes": {
        "VisibilityTimeout": "30",
        "DelaySeconds": "0",
        "ReceiveMessageWaitTimeSeconds": "0",
        "ApproximateNumberOfMessages": "0",
        "ApproximateNumberOfMessagesNotVisible": "1",
        "ApproximateNumberOfMessagesDelayed": "0",
        "CreatedTimestamp": "1629253476",
        "LastModifiedTimestamp": "1629253476",
        "QueueArn": "arn:aws:sqs:elasticmq:000000000000:queue"
    }
}
最後まで読んで頂きありがとうございます!

面白かった、参考になった、と少しでも感じて頂けましたら
ブログランキング上位になるための応援をして頂けないでしょうか!
今後も面白い記事を更新していきますので、ぜひ宜しくおねがいします!
プログラミング
【TechGrowth】

コメント