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

4.1. SQSキューポリシードキュメントの作成 (scenario-cli-sqs-basic_queue-queue)

手順の目的

SQSキュー"scenario-cli-sqs-basic_queue-queue"のポリシードキュメントを作成します。

設定値の指定

設定値の指定

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

1. SQSキュー名

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

変数の設定:

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

2. プリンシパルAWS ID

プリンシパルAWS IDを指定します。

変数の設定:

AWS_ID_PRINCIPAL='953640472020'

3. SQSキューポリシードキュメント用ディレクトリ

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

変数の設定:

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

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

コマンド:

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

結果(例):

(出力なし)

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

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

  # 1. SQS_QUEUE_NAME:"scenario-cli-sqs-basic_queue-queue"
       SQS_QUEUE_NAME="${SQS_QUEUE_NAME}"
  # 2. AWS_ID_PRINCIPAL:"953640472020"
       AWS_ID_PRINCIPAL="${AWS_ID_PRINCIPAL}"
  # 3. DIR_SQS_QUEUE_POLICY_DOC:"${HOME}/environment/conf-scenario-cli-sqs-basic_queue"
       DIR_SQS_QUEUE_POLICY_DOC="${DIR_SQS_QUEUE_POLICY_DOC}"
  # 4. 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

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

コマンド:

sqs_queue_arn=$( \
  aws sqs get-queue-attributes \
    --queue-url ${sqs_queue_url} \
    --attribute-names QueueArn \
    --query 'Attributes.QueueArn' \
    --output text \
) \
  && echo ${sqs_queue_arn}

結果(例):

arn:aws:sqs:ap-northeast-1:XXXXXXXXXXXX:scenario-cli-sqs-basic_queue-queue

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

変数の確認:

cat << END

  # sqs_queue_arn:"arn:aws:sqs:ap-northeast-1:XXXXXXXXXXXX:scenario-cli-sqs-basic_queue-queue"
    sqs_queue_arn="${sqs_queue_arn}"
  # AWS_ID_PRINCIPAL:"953640472020"
    AWS_ID_PRINCIPAL="${AWS_ID_PRINCIPAL}"
  # 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

コマンド:

cat << EOF > ${FILE_SQS_QUEUE_POLICY_DOC}
{
   "Version": "2012-10-17",
   "Id": "UseCaseAllow",
   "Statement" : [{
     "Sid": "AllowSendAndReceive",
      "Effect": "Allow",
      "Principal": {
         "AWS": [
            "${AWS_ID_PRINCIPAL}"
         ]
      },
      "Action": [
         "sqs:SendMessage",
         "sqs:ReceiveMessage"
      ],
      "Resource": "${sqs_queue_arn}"
   }]
}
EOF

cat ${FILE_SQS_QUEUE_POLICY_DOC}

結果(例):

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

JSONファイルを作成したら、フォーマットが壊れてないか必ず確認します。

コマンド:

cat ${FILE_SQS_QUEUE_POLICY_DOC} \
  |  python3 -m json.tool \
  > /dev/null

結果(例):

(出力なし)

注釈

エラーが出力されなければOKです。

完了確認

本手順の主処理は、以下の完了条件を満たしたときに成功したものとします。

完了条件1: SQSキューポリシードキュメント"${HOME}/environment/conf-scenario-cli-sqs-basic_queue/scenario-cli-sqs-basic_queue-queue-queue-policy.json"が存在する。

「SQSキューポリシードキュメント"${HOME}/environment/conf-scenario-cli-sqs-basic_queue/scenario-cli-sqs-basic_queue-queue-queue-policy.json"が存在する。」ことを確認します。

コマンド:

ls ${FILE_SQS_QUEUE_POLICY_DOC}

結果(例):

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

手順の完了