ハンズオン(簡易版): SQS入門

2.2. SQSキューからのメッセージ受信+削除 (handson-cli-sqs-1st-queue)

手順の目的

SQSキュー"handson-cli-sqs-1st-queue"のメッセージを受信・削除します。

設定値の指定

設定値の指定

手順に必要な設定値を変数に格納をします。

0. リージョンの指定

リージョンを指定します。

環境変数の設定:

export AWS_DEFAULT_REGION='ap-northeast-1'

1. SQSキュー名

SQSキュー名を指定します。

変数の設定:

SQS_QUEUE_NAME="handson-cli-sqs-1st-queue"

2. 受信中メッセージ用ディレクトリ

受信中メッセージ用ディレクトリを指定します。

変数の設定:

DIR_SQS_MESSAGE_RECEIVE_IN_COMMING="${HOME}/environment/tmp-handson-cli-sqs-1st/incomming"

ディレクトリが存在することを確認し、存在しない場合は作成します。

コマンド:

ls -d ${DIR_SQS_MESSAGE_RECEIVE_IN_COMMING} > /dev/null 2>&1 \
  || mkdir -p ${DIR_SQS_MESSAGE_RECEIVE_IN_COMMING}

結果(例):

(出力なし)

3. 受信済メッセージ用ディレクトリ

受信済メッセージ用ディレクトリを指定します。

変数の設定:

DIR_SQS_MESSAGE_RECEIVED="${HOME}/environment/tmp-handson-cli-sqs-1st/received"

ディレクトリが存在することを確認し、存在しない場合は作成します。

コマンド:

ls -d ${DIR_SQS_MESSAGE_RECEIVED} > /dev/null 2>&1 \
  || mkdir -p ${DIR_SQS_MESSAGE_RECEIVED}

結果(例):

(出力なし)

4. 削除済メッセージ用ディレクトリ

削除済メッセージ用ディレクトリを指定します。

変数の設定:

DIR_SQS_MESSAGE_DELETED="${HOME}/environment/tmp-handson-cli-sqs-1st/deleted"

ディレクトリが存在することを確認し、存在しない場合は作成します。

コマンド:

ls -d ${DIR_SQS_MESSAGE_DELETED} > /dev/null 2>&1 \
  || mkdir -p ${DIR_SQS_MESSAGE_DELETED}

結果(例):

(出力なし)

設定値の確認

各変数に正しい設定値が格納されていることを確認します。

変数の確認:

cat << END

  # 0. AWS_DEFAULT_REGION:"ap-northeast-1"
       AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}"

  # 1. SQS_QUEUE_NAME:"handson-cli-sqs-1st-queue"
       SQS_QUEUE_NAME="${SQS_QUEUE_NAME}"
  # 2. DIR_SQS_MESSAGE_RECEIVE_IN_COMMING:"${HOME}/environment/tmp-handson-cli-sqs-1st/incomming"
       DIR_SQS_MESSAGE_RECEIVE_IN_COMMING="${DIR_SQS_MESSAGE_RECEIVE_IN_COMMING}"
  # 3. DIR_SQS_MESSAGE_RECEIVED:"${HOME}/environment/tmp-handson-cli-sqs-1st/received"
       DIR_SQS_MESSAGE_RECEIVED="${DIR_SQS_MESSAGE_RECEIVED}"
  # 4. DIR_SQS_MESSAGE_DELETED:"${HOME}/environment/tmp-handson-cli-sqs-1st/deleted"
       DIR_SQS_MESSAGE_DELETED="${DIR_SQS_MESSAGE_DELETED}"

END

下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。

処理の実行

SQSキューのURLを取得します。

コマンド:

sqs_queue_url=$( \
  aws sqs get-queue-url \
    --queue-name ${SQS_QUEUE_NAME} \
    --output text \
) \
 && echo ${sqs_queue_url}

結果(例):

https://ap-northeast-1.queue.amazonaws.com/XXXXXXXXXXXX/handson-cli-sqs-1st-queue

SQSキューからのメッセージ受信

メッセージ受信ファイル名を指定します。

変数の設定:

file_sqs_message_receive_in_comming="${DIR_SQS_MESSAGE_RECEIVE_IN_COMMING}/$(date +%s)-$$.json" \
  && echo ${file_sqs_message_receive_in_comming}

結果(例):

${HOME}/environment/tmp-handson-cli-sqs-1st/incomming/16xxxxxxxx-xxxx.json

SQSキューからメッセージを受信します。

変数の確認:

cat << END

  # sqs_queue_url:"https://ap-northeast-1.queue.amazonaws.com/XXXXXXXXXXXX/handson-cli-sqs-1st-queue"
    sqs_queue_url="${sqs_queue_url}"
  # file_sqs_message_receive_in_comming:"${HOME}/environment/tmp-handson-cli-sqs-1st/incomming/16xxxxxxxx-xxxx.json"
    file_sqs_message_receive_in_comming="${file_sqs_message_receive_in_comming}"

END

コマンド:

aws sqs receive-message \
  --queue-url "${sqs_queue_url}" \
  > ${file_sqs_message_receive_in_comming} \
    && cat ${file_sqs_message_receive_in_comming}

結果(例):

{
    "Messages": [
        {
            "Body": "Hello World!",
            "ReceiptHandle": "AQEBUo4y+XVuRSe4jMv0QM6Ob1viUnPbZ64WI01+Kmj6erhv192m80m+wgyob+zBgL4OMT+bps4KR/q5WK+W3tnno6cCFuwKGRM4OQGM9omMkK1F+ZwBC49hbl7UlzqAqcSrHfxyDo5x+xEyrEyL+sFK2MxNV6d0mF+7WxXTboyAu7JxIiKLG6cUlkhWfk3W4/Kghagy5erwRhwTaKtmF+7hw3Y99b55JLFTrZjW+/Jrq9awLCedce0kBQ3d2+7pnlpEcoY42+7T1dRI2s7um+nj5TIUpx2oSd9BWBHCjd8UQjmyye645asrWMAl1VCvHZrHRIG/v3vgq776e1mmi9pGxN96IW1aDZCQ1CSeqTFASe4=",
            "MD5OfBody": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "MessageId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        }
    ]
}

メッセージIDを取得します。

メッセージのメッセージIDを取得します。

変数の設定:

SQS_MESSAGE_MESSAGE_ID=$( \
  cat ${file_sqs_message_receive_in_comming} \
    | jp.py 'Messages[0].MessageId' \
    | sed 's/"//g' \
) \
  && echo ${SQS_MESSAGE_MESSAGE_ID}

結果(例):

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

受信済メッセージの保存ファイル名を指定します。

変数の設定:

file_sqs_message_received="${DIR_SQS_MESSAGE_RECEIVED}/${SQS_MESSAGE_MESSAGE_ID}.json" \
  && echo ${file_sqs_message_received}

結果(例):

${HOME}/environment/tmp-handson-cli-sqs-1st/received/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json

受信メッセージの受信済メッセージ用ディレクトリへの移動

メッセージを受信済メッセージ用ディレクトリへ移動します。

コマンド:

mv ${file_sqs_message_receive_in_comming} \
  ${file_sqs_message_received}

結果(例):

(出力なし)

メッセージの削除

メッセージの受信ハンドルを取得します。

コマンド:

SQS_MESSAGE_RECEIPT_HANDLE=$( \
  cat ${file_sqs_message_received} \
  | jp.py 'Messages[].ReceiptHandle' \
  | sed 's/[]\"\[]//g' \
) \
  && echo ${SQS_MESSAGE_RECEIPT_HANDLE}

結果(例):

AQEBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=

SQSキューからメッセージを削除します。

変数の確認:

cat << END

  # sqs_queue_url:"https://ap-northeast-1.queue.amazonaws.com/XXXXXXXXXXXX/handson-cli-sqs-1st-queue"
    sqs_queue_url="${sqs_queue_url}"
  # SQS_MESSAGE_RECEIPT_HANDLE:"AQEBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx="
    SQS_MESSAGE_RECEIPT_HANDLE="${SQS_MESSAGE_RECEIPT_HANDLE}"

END

コマンド:

aws sqs delete-message \
  --queue-url "${sqs_queue_url}" \
  --receipt-handle ${SQS_MESSAGE_RECEIPT_HANDLE}

結果(例):

(出力なし)

削除済メッセージの保存ファイル名を指定します。

変数の設定:

file_sqs_message_deleted="${DIR_SQS_MESSAGE_DELETED}/${SQS_MESSAGE_MESSAGE_ID}.json" \
  && echo ${file_sqs_message_deleted}

結果(例):

${HOME}/environment/tmp-handson-cli-sqs-1st/deleted/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json

メッセージを削除済メッセージ用ディレクトリへ移動します。

コマンド:

mv ${file_sqs_message_received} \
  ${file_sqs_message_deleted}

結果(例):

(出力なし)

完了確認

「SQSキュー"handson-cli-sqs-1st-queue"のメッセージ数が"0"である。」ことを確認します。

コマンド:

aws sqs get-queue-attributes \
  --queue-url ${sqs_queue_url} \
  --attribute-names ApproximateNumberOfMessages \
  --query 'Attributes.ApproximateNumberOfMessages' \
  --output text

結果(例):

0

「削除済SQSメッセージファイル"${HOME}/environment/tmp-handson-cli-sqs-1st/deleted/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json"が存在する。」ことを確認します。

コマンド:

ls ${file_sqs_message_deleted}

結果(例):

${HOME}/environment/tmp-handson-cli-sqs-1st/deleted/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json

手順の完了

(参考) マネジメントコンソールの確認

キュー一覧(画面)

  • 検索欄にキュー名"handson-cli-sqs-1st-queue"を入力します。

  • キュー名"handson-cli-sqs-1st-queue"(リンク)をクリックします。

キュー詳細(画面)

  • 詳細欄下部の"さらに表示"をクリックします。

  • "利用可能なメッセージ"が"0"であることを確認します。