Docker構築
Dockerfile作成
今回はSQSと互換性のある、ElasticMQというものを使ってSQSをローカルで実現します。下記のコードをDockerfileにコピペしてください。
※最新のelasticmq-serverのバージョンが変わっているかもしれないので、変わっている場合はバージョンを変更してください。
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]で設定しましょう。
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"
}
}