サイトアイコン 【TechGrowUp】

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. - softwaremill/elasticmq
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 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"
    }
}
モバイルバージョンを終了