ハンズオン(簡易版): SQS基礎 (キュー)

4.2. SQSキュー属性の更新 (Policy: scenario-cli-sqs-basic_queue-queue)

手順の目的

SQSキュー"scenario-cli-sqs-basic_queue-queue"のキューポリシーを更新します。

設定値の指定

設定値の指定

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

0. リージョンの指定

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

環境変数の設定:

export AWS_DEFAULT_REGION='ap-northeast-1'

1. SQSキュー名

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

変数の設定:

SQS_QUEUE_NAME="scenario-cli-sqs-basic_queue-queue"

2. SQSキューポリシードキュメント

SQSキューポリシードキュメント用ディレクトリを指定します。

変数の設定:

DIR_SQS_QUEUE_POLICY_DOC="${HOME}/environment/conf-scenario-cli-sqs-basic_queue"

SQSキューポリシードキュメントを指定します。

変数の設定:

FILE_SQS_QUEUE_POLICY_DOC="${DIR_SQS_QUEUE_POLICY_DOC}/${SQS_QUEUE_NAME}-queue-policy.json" \
  && echo ${FILE_SQS_QUEUE_POLICY_DOC}

結果(例):

${HOME}/environment/conf-scenario-cli-sqs-basic_queue/scenario-cli-sqs-basic_queue-queue-queue-policy.json

設定値の確認

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

変数の確認:

cat << END

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

  # 1. SQS_QUEUE_NAME:"scenario-cli-sqs-basic_queue-queue"
       SQS_QUEUE_NAME="${SQS_QUEUE_NAME}"
  # 2. FILE_SQS_QUEUE_POLICY_DOC:"${HOME}/environment/conf-scenario-cli-sqs-basic_queue/scenario-cli-sqs-basic_queue-queue-queue-policy.json"
       FILE_SQS_QUEUE_POLICY_DOC="${FILE_SQS_QUEUE_POLICY_DOC}"

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/scenario-cli-sqs-basic_queue-queue

ポリシードキュメントを文字列化します。

変数の設定:

STRING_SQS_QUEUE_POLICY_DOC=$( \
  cat ${FILE_SQS_QUEUE_POLICY_DOC} \
  | tr -d '\n' \
  | tr -d '[:blank:]' \
  | sed 's/\"/\\\"/g') \
  && echo ${STRING_SQS_QUEUE_POLICY_DOC}

結果(例):

{\"Version\":\"2012-10-17\",\"Id\":\"UseCaseAllow\",\"Statement\":[{\"Sid\":\"AllowSend\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"arn:aws:iam::953640472020:root\"]},\"Action\":[\"sqs:SendMessage\"],\"Resource\":\"arn:aws:sqs:ap-northeast-1:XXXXXXXXXXXX:scenario-cli-sqs-basic_queue-queue\"}]}

SQSキューポリシーを更新します。

変数の確認:

cat << END

  # sqs_queue_url:"https://ap-northeast-1.queue.amazonaws.com/XXXXXXXXXXXX/scenario-cli-sqs-basic_queue-queue"
    sqs_queue_url="${sqs_queue_url}"
  # STRING_SQS_QUEUE_POLICY_DOC:"{\\"Version\\":\\"2012-10-17\\",\\"Id\\":\\"UseCaseAllow\\",\\"Statement\\":[{\\"Sid\\":\\"AllowSend\\",\\"Effect\\":\\"Allow\\",\\"Principal\\":{\\"AWS\\":[\\"953640472020\\"]},\\"Action\\":[\\"sqs:SendMessage\\"],\\"Resource\\":\\"arn:aws:sqs:ap-northeast-1:XXXXXXXXXXXX:scenario-cli-sqs-basic_queue-queue\\"}]}"
    STRING_SQS_QUEUE_POLICY_DOC='${STRING_SQS_QUEUE_POLICY_DOC}'

END

コマンド:

aws sqs set-queue-attributes \
  --queue-url ${sqs_queue_url} \
  --attributes $(echo '{"Policy":"'$(echo ${STRING_SQS_QUEUE_POLICY_DOC})'"}')

結果(例):

(出力なし)

完了確認

「SQSキュー"scenario-cli-sqs-basic_queue-queue"にキューポリシーが存在する。」ことを確認します。

コマンド:

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

結果(例):

{\"Version\":\"2012-10-17\",\"Id\":\"UseCaseAllow\",\"Statement\":[{\"Sid\":\"AllowSend\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"arn:aws:iam::953640472020:root\"]},\"Action\":[\"sqs:SendMessage\"],\"Resource\":\"arn:aws:sqs:ap-northeast-1:XXXXXXXXXXXX:scenario-cli-sqs-basic_queue-queue\"}]}

手順の完了

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

キュー一覧(画面)

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

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

キュー詳細(画面)

  • "アクセスポリシー"(タブ)をクリックします。

  • ポリシードキュメントが表示されていればOKです。