AWS CLIを利用して、SQSのキューを作成し、キューを利用するために必要なそのURLを取得してみます。
前提条件
SQSへの権限
SQSに対してフル権限があること。
AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.10.6
- AWS CLI 1.6.10
aws --version
aws-cli/1.9.20 Python/2.7.5 Darwin/13.4.0 botocore/1.3.20
- 準備
=======
0.1. リージョンの決定
利用するリージョンを決めます。 (カレントユーザが利用するカレントリージョンも切り変わります。)
export AWS_DEFAULT_REGION='ap-northeast-1'
0.2. 変数の確認
プロファイルが想定のものになっていることを確認します。
aws configure list
Name Value Type Location
---- ----- ---- --------
profile sqs-prjz-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region ap-northeast-1 env AWS_DEFAULT_REGION
- 事前作業
===========
キュー名の決定
作成するキューの名前を決めます。
SQS_QUEUE_NAME=$(date +%Y%m%d)-handson-queue \
&& echo ${SQS_QUEUE_NAME}
そのリージョンでユニークである必要があります。
同名キューの確認
すでに同じ名前のキューが存在しないことを確認します。
aws sqs list-queues \
--queue-name-prefix ${SQS_QUEUE_NAME}
(戻り値なし)
- キューの作成
===============
2.1. キューの作成
キューを作成します。
cat << ETX
SQS_QUEUE_NAME: ${SQS_QUEUE_NAME}
ETX
aws sqs create-queue \
--queue-name ${SQS_QUEUE_NAME}
{
"QueueUrl": "https://ap-northeast-1.queue.amazonaws.com/XXXXXXXXXXXX/20160509-handson-queue"
}
2.2. キューの確認
作成したキューがキュー一覧に表示されることを確認します。
aws sqs list-queues \
--queue-name-prefix ${SQS_QUEUE_NAME}
{
"QueueUrls": [
"https://ap-northeast-1.queue.amazonaws.com/XXXXXXXXXXXX/20160509-handson-queue"
]
}
反映されるまでにタイムラグがあるようです。
- キューのURL取得
==================
SQSでキューを操作するときは、対象キューのURLを特定する必要があります。
この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/20160509-handson-queue
- キューの属性(Attributes)
===========================
SQSのキューの属性は、get-queue-attributesコマンドのオプションで属性名を指定することで確認することができます。
(属性名を指定しないと何も表示されません...)
キュー作成直後のデフォルトの属性を確認してみましょう。
aws sqs get-queue-attributes \
--queue-url ${SQS_QUEUE_URL} \
--attribute-names \
Policy \
VisibilityTimeout \
MaximumMessageSize \
MessageRetentionPeriod \
ApproximateNumberOfMessages \
ApproximateNumberOfMessagesNotVisible \
CreatedTimestamp \
LastModifiedTimestamp \
QueueArn \
ApproximateNumberOfMessagesDelayed \
DelaySeconds \
ReceiveMessageWaitTimeSeconds \
RedrivePolicy
{
"Attributes": {
"ApproximateNumberOfMessagesNotVisible": "0",
"VisibilityTimeout": "30",
"LastModifiedTimestamp": "1456735033",
"MaximumMessageSize": "262144",
"CreatedTimestamp": "1456735033",
"ApproximateNumberOfMessages": "0",
"ReceiveMessageWaitTimeSeconds": "0",
"DelaySeconds": "0",
"MessageRetentionPeriod": "345600",
"ApproximateNumberOfMessagesDelayed": "0",
"QueueArn": "arn:aws:sqs:ap-northeast-1:XXXXXXXXXXXX:20160509-handson-queue"
}
}
以下の属性は、キュー作成直後は値が存在しないようです。
- Policy
- RedrivePolicy
- キューの属性の変更 (VisibilityTimeout)
=========================================
SQSのキューの属性は、set-queue-attributesコマンドで変更が可能です。
ここでは、VisibilityTimeoutの値を変更してみましょう。
5.1. VisibilityTimeoutの確認
VisibilityTimeoutは、受信操作を行うとそのメッセージが見えなくなる一定の時間のことです。 Timeout前にそのメッセージに対して削除操作がされないと、再度キューに戻されます。
一つのメッセージを複数のクライアントが同時に取得しないための仕組みです。
キュー属性のVisibilityTimeoutは、キューにおけるVisibilityTimeoutのデフォルト値を設定します。
初期値は30秒です。
aws sqs get-queue-attributes \
--queue-url ${SQS_QUEUE_URL} \
--attribute-names VisibilityTimeout
{
"Attributes": {
"VisibilityTimeout": "30"
}
}
5.2. VisibilityTimeoutの変更
キュー属性のVisibilityTimeoutを60秒に変更してみましょう。
SQS_VTOUT=60
cat << ETX
SQS_QUEUE_URL: ${SQS_QUEUE_URL}
SQS_VTOUT: ${SQS_VTOUT}
ETX
aws sqs set-queue-attributes \
--queue-url ${SQS_QUEUE_URL} \
--attributes VisibilityTimeout=${SQS_VTOUT}
(戻り値なし)
5.3. VisibilityTimeoutの確認
キュー属性のVisibilityTimeoutが60秒になっていることを確認します。
aws sqs get-queue-attributes \
--queue-url ${SQS_QUEUE_URL} \
--attribute-names VisibilityTimeout
{
"Attributes": {
"VisibilityTimeout": "60"
}
}