もう1か月前になりますが、5/7(木)JAWS-UG CLI専門支部 #152R SQS入門 に参加しました。 ブログの執筆をしておらず、ハンズオンもついていくのがやっとでした。 今日改めて復習しながらブログを書きます。
目次
- 目次
- イベントページ
- ハンズオンでやったこと
- Amazon Simple Queue Service (SQS)とは
- ハンズオン手順
- 1.SQSキューの構築
- 2.VisibilityTimeoutの更新
- 3.SQSキューへのメッセージ送信
- 4.SQSキューからのメッセージ受信
- ①環境変数に東京リージョンを指定します。
- ②変数[SQS_QUEUE_NAME]にSQSキュー名を指定します。
- ③SQSメッセージ用ディレクトリを指定します。
- ④ディレクトリを作成します。
- ⑤ディレクトリが存在することを確認します。
- ⑥SQSメッセージファイルを指定します。
- ⑦変数が正しく格納されているか、確認します。
- ⑧SQSキューのURLを取得します。
- ⑨SQSキューからメッセージを受信します。
- ⑩ReceiptHandleを取得します。
- ⑪ReceiptHandle値でメッセージを特定して、メッセージを削除します。
- ⑫SQSキューに利用可能なメッセージが残っていないこと(0であること)を確認します。
- 5.後片付け
- 最後に
イベントページ
ハンズオンでやったこと
以下の通りです。事前準備として、Cloud9上にハンズオン環境を構築しました。 ハンズオンでは、Cloud9のターミナルでコマンド実行します。
- SQSキューの構築
- VisibilityTimeoutの更新
- SQSキューへのメッセージ送信
- SQSキューからのメッセージ受信
Amazon Simple Queue Service (SQS)とは
■ 標準キューとFIFOキューについて
- 標準キュー
- 配信順序が保証されていないため、取得のタイミングによっては同一メッセージが2回配信されることもある。
- FIFOキュー
- 配信順序が保証されている。そのため、処理速度は標準キューよりは劣る。
■ショートポーリングとロングポーリングがある。
- ショートポーリング(デフォルト)
- リクエストを受けたら、メッセージの有無にかかわらず即レスポンスを返す。
- ロングポーリング
■ VisibilityTimeout(可視性タイムアウト)とは?
- あるクライアントがメッセージを受信中に、他のクライアントがメッセージを受信することを防ぐために設定するタイムアウト値。
- メッセージを受信しただけではSQSから削除されないため、このような仕組みが必要。
- デフォルト30秒。最大12時間まで設定可能。
ハンズオン手順
1.SQSキューの構築
①環境変数に東京リージョンを指定します。
- 環境変数を設定するときは
export
コマンドを使います。
export AWS_DEFAULT_REGION='ap-northeast-1'
②変数[SQS_QUEUE_NAME]にSQSキュー名を指定します。
SQS_QUEUE_NAME="handson-cli-sqs-queue"
③変数に正しいパラメータが格納されているか確認します。
cat << END # 0. AWS_DEFAULT_REGION:"ap-northeast-1" AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}" # 1. SQS_QUEUE_NAME:"handson-cli-sqs-queue" SQS_QUEUE_NAME="${SQS_QUEUE_NAME}" END
④SQSキューを作成します。
- SQSキューを作る場合は、
sqs create-queue
コマンドを使います。 - `--queue-name <キュー名>' でキュー名を指定します。
aws sqs create-queue --queue-name ${SQS_QUEUE_NAME}
⑤SQSキューが存在することを確認します。
- SQSキューの存在確認には、
sqs list-queues
コマンドを使います。 --queue-name-prefix <キュー名>
でキュー名を指定します。
aws sqs list-queues --queue-name-prefix ${SQS_QUEUE_NAME} \ --query "QueueUrls[?contains(@,\` ${SQS_QUEUE_NAME}\`)]" \ --output text
2.VisibilityTimeoutの更新
①環境変数に東京リージョンを指定します。
- 環境変数を設定するときは
export
コマンドを使います。
export AWS_DEFAULT_REGION='ap-northeast-1'
②変数[SQS_QUEUE_NAME]にSQSキュー名を指定します。
SQS_QUEUE_NAME="handson-cli-sqs-queue"
③変数[SQS_QUEUE_ATTRIBUTE_NAME]にSQSキューの属性名を指定します。
SQS_QUEUE_ATTRIBUTE_NAME="VisibilityTimeout"
④変数[SQS_QUEUE_ATTRIBUTE_VALUE]にSQSキュー属性値を指定します。
- 今回は60秒を指定します。
SQS_QUEUE_ATTRIBUTE_VALUE="60"
⑤正しいパラメータ値が格納されていることを確認します。
cat << END # 0. AWS_DEFAULT_REGION:"ap-northeast-1" AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}" # 1. SQS_QUEUE_NAME:"handson-cli-sqs-queue" SQS_QUEUE_NAME="${SQS_QUEUE_NAME}" # 2. SQS_QUEUE_ATTRIBUTE_NAME:"VisibilityTimeout" SQS_QUEUE_ATTRIBUTE_NAME="${SQS_QUEUE_ATTRIBUTE_NAME}" # 3. SQS_QUEUE_ATTRIBUTE_VALUE:"60" SQS_QUEUE_ATTRIBUTE_VALUE="${SQS_QUEUE_ATTRIBUTE_VALUE}" END
⑥SQSキューのURLを取得します。
- キューのURLを取得するために`sqs get-queue-url'コマンドを使います。
SQS_QUEUE_URL=$( \ aws sqs get-queue-url --queue-name ${SQS_QUEUE_NAME} \ --output text \ ) \ && echo ${SQS_QUEUE_URL}
⑦VisibilityTimeout値を60に更新します。
- キューの設定値を変更するためには
sqs set-queue-attributes
コマンドを使います。
aws sqs set-queue-attributes --queue-url ${SQS_QUEUE_URL} \ --attributes ${SQS_QUEUE_ATTRIBUTE_NAME}=${SQS_QUEUE_ATTRIBUTE_VALUE}
⑧VisibilityTimeout値を60に変更されたことを確認します。
aws sqs get-queue-attributes --queue-url ${SQS_QUEUE_URL} \ --attribute-names ${SQS_QUEUE_ATTRIBUTE_NAME} \ --query "Attributes.${SQS_QUEUE_ATTRIBUTE_NAME}" \ --output text
3.SQSキューへのメッセージ送信
①環境変数に東京リージョンを指定します。
- 環境変数を設定するときは
export
コマンドを使います。
export AWS_DEFAULT_REGION='ap-northeast-1'
②変数[SQS_QUEUE_NAME]にSQSキュー名を指定します。
SQS_QUEUE_NAME="handson-cli-sqs-queue"
③変数[SQS_MESSAGE_BODY]にSQSメッセージのボディを指定します。
SQS_MESSAGE_BODY='Hello World!'
④変数に正しいパラメータ値が格納されていることを確認します。
CAT << END # 0. AWS_DEFAULT_REGION:"ap-northeast-1" AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}" # 1. SQS_QUEUE_NAME:"handson-cli-sqs-queue" SQS_QUEUE_NAME="${SQS_QUEUE_NAME}" # 2. SQS_MESSAGE_BODY:"Hello World!" SQS_MESSAGE_BODY="${SQS_MESSAGE_BODY}" END
⑤SQSキューのURLを取得します。
SQS_QUEUE_URL=$( \ aws sqs get-queue-url \ --queue-name ${SQS_QUEUE_NAME} \ --output text \ ) \ && echo ${SQS_QUEUE_URL}
⑥SQSキューにメッセージを送信します。
- メッセージを送信するためには、
sqs send-message
コマンドを使います。 --queue-url "<キューURL>"
でキューURLを指定します。--message-body "<メッセージ>"
でメッセージを指定します。
aws sqs send-message --queue-url "${SQS_QUEUE_URL}" \ --message-body "${SQS_MESSAGE_BODY}"
⑦メッセージが送信されたこと(利用可能なメッセージが1であること)を確認します。
- キューの属性を取得するには
sqs get-queue-attributes
コマンドを使います。 --attribute-names
で利用可能なメッセージ[ApproximateNumberOfMessages]を指定します。
aws sqs get-queue-attributes \ --queue-url ${SQS_QUEUE_URL} \ --attribute-names ApproximateNumberOfMessages \ --query 'Attributes.ApproximateNumberOfMessages' \ --output text
4.SQSキューからのメッセージ受信
①環境変数に東京リージョンを指定します。
- 環境変数を設定するときは
export
コマンドを使います。
export AWS_DEFAULT_REGION='ap-northeast-1'
②変数[SQS_QUEUE_NAME]にSQSキュー名を指定します。
SQS_QUEUE_NAME="handson-cli-sqs-queue"
③SQSメッセージ用ディレクトリを指定します。
DIR_SQS_MESSAGE="${HOME}/environment/tmp-handson-cli-sqs"
④ディレクトリを作成します。
mkdir -p ${HOME}/environment/tmp-handson-cli-sqs
⑤ディレクトリが存在することを確認します。
ls -d ${HOME}/environment/tmp-handson-cli-sqs
⑥SQSメッセージファイルを指定します。
FILE_SQS_MESSAGE="${DIR_SQS_MESSAGE}/$(date +%Y-%m-%d)-${SQS_QUEUE_NAME}.json" \ && echo ${FILE_SQS_MESSAGE}
⑦変数が正しく格納されているか、確認します。
cat << END # 0. AWS_DEFAULT_REGION:"ap-northeast-1" AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}" # 1. SQS_QUEUE_NAME:"handson-cli-sqs-queue" SQS_QUEUE_NAME="${SQS_QUEUE_NAME}" # 2. DIR_SQS_MESSAGE:"${HOME}/environment/tmp-handson-cli-sqs" DIR_SQS_MESSAGE="${DIR_SQS_MESSAGE}" # 3. FILE_SQS_MESSAGE:"${HOME}/environment/tmp-handson-cli-sqs/2020-05-20-handson-cli-sqs-queue.json" FILE_SQS_MESSAGE="${FILE_SQS_MESSAGE}" END
⑧SQSキューのURLを取得します。
SQS_QUEUE_URL=$( \ aws sqs get-queue-url \ --queue-name ${SQS_QUEUE_NAME} \ --output text \ ) \ && echo ${SQS_QUEUE_URL}
⑨SQSキューからメッセージを受信します。
- メッセージを受信するには
sqs receive-message
コマンドを使います。
aws sqs receive-message --queue-url "${SQS_QUEUE_URL}" \ > ${FILE_SQS_MESSAGE} \ && cat ${FILE_SQS_MESSAGE}
⑩ReceiptHandleを取得します。
SQS_MESSAGE_RECEIPT_HANDLE=$( \ cat ${FILE_SQS_MESSAGE} \ | jp.py 'Messages[].ReceiptHandle' \ | sed 's/[]\"\[]//g' \ ) \ && echo ${SQS_MESSAGE_RECEIPT_HANDLE}
⑪ReceiptHandle値でメッセージを特定して、メッセージを削除します。
- メッセージを削除するには
sqs delete-message
コマンドを使います。
aws sqs delete-message --queue--url "${SQS_QUEUE_URL}" \ --receipt-handle ${SQS_MESSAGE_RECEIPT_HANDLE}
⑫SQSキューに利用可能なメッセージが残っていないこと(0であること)を確認します。
aws sqs get-queue-attributes \ --queue-url ${SQS_QUEUE_URL} \ --attribute-names ApproximateNumberOfMessages \ --query 'Attributes.ApproximateNumberOfMessages' \ --output text
5.後片付け
ハンズオン環境が不要な場合は、以下の作業を実施します。
最後に
ハンズオン当日は環境準備がおぼつかなくてついていくのがやっとでした。日を改めてじっくりとハンズオン環境を準備して、一つ一つコマンドの意味や挙動を理解しようとしながら取り組むことができ、理解が深まりました。2回ハンズオンを受けて復習もしたためか、コマンドで何をするかが少しずつ分かってきた気がします。SNS入門の復習もしてまたブログに書きます!
最後まで読んでいただき、ありがとうございました!