ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS CLI 로 SQS 일괄 생성 및 일괄 삭제
    AWS 2024. 4. 12. 12:23

    만약 다음과 같이 많은 queue를 생성해야 하는 경우, aws cli를 활용할 수 있습니다.

    SQS 일괄 생성 스크립트

    #!/bin/bash
    
    # AWS 리전과 계정 ID 자동 감지
    REGION=$(aws configure get region)
    
    # 큐 이름 정의
    declare -a queues=(
    "dev-order_queue"
    "dev-order_queue_dlq"
    "dev-payment_queue"
    "dev-payment_queue_dlq"
    "stage-order_queue"
    "stage-order_queue_dlq"
    "stage-payment_queue"
    "stage-payment_queue_dlq"
    "prod-order_queue"
    "prod-order_queue_dlq"
    "prod-payment_queue"
    "prod-payment_queue_dlq"
    )
    
    # 큐 생성 및 설정
    for queue in "${queues[@]}"
    do
      echo "Creating $queue..."
      if [[ $queue == *"_dlq" ]]; then
        # DLQ 생성
        aws sqs create-queue --queue-name $queue --region $REGION
      else
        # 일반 큐 생성
        QUEUE_URL=$(aws sqs create-queue --queue-name $queue --region $REGION --attributes '{
            "VisibilityTimeout": "120",
            "MessageRetentionPeriod": "86400",
            "MaximumMessageSize": "262144",
            "DelaySeconds": "10"
        }' --query 'QueueUrl' --output text)
        
        # DLQ와 연결
        DLQ_NAME="${queue%-Queue}-DLQ"
        DLQ_ARN=$(aws sqs get-queue-url --queue-name $DLQ_NAME --region $REGION --query 'QueueUrl' | xargs -I {} aws sqs get-queue-attributes --queue-url {} --attribute-names QueueArn --query 'Attributes.QueueArn' --output text)
        
        aws sqs set-queue-attributes --queue-url $QUEUE_URL --attributes '{
            "RedrivePolicy": "{\"maxReceiveCount\":\"5\", \"deadLetterTargetArn\":\"'$DLQ_ARN'\"}"
        }'
      fi
    done
    
    echo "All queues created and configured successfully!"

    스크립트 사용 방법

    1. 위 스크립트를 .sh 파일로 저장합니다 (예: create_configure_queues.sh).
    2. 해당 스크립트 파일을 실행할 수 있는 위치로 이동합니다.
    3. 스크립트에 실행 권한을 부여합니다: chmod +x create_configure_queues.sh
    4. 스크립트를 실행합니다: ./create_configure_queues.sh

    큐 생성 옵션

    VisibilityTimeout
    초(second) 단위입니다. 이 설정은 메시지가 수신된 후 다른 수신자에게 보이지 않도록 설정하는 시간을 의미합니다. 여기서 "120"은 메시지가 수신되고 난 후 120초 동안 다른 수신자가 해당 메시지를 볼 수 없게 합니다.

    MessageRetentionPeriod
    역시 초(second) 단위입니다. 이는 메시지가 SQS 큐에 보관되는 최대 시간을 설정합니다. "86400"은 하루(24시간 × 60분 × 60초) 동안 메시지가 큐에 유지됨을 의미합니다.

    MaximumMessageSize
    바이트(byte) 단위입니다. 이 값은 큐에 보낼 수 있는 메시지의 최대 크기를 제한합니다. "262144" 바이트는 약 256KB를 의미합니다.

    DelaySeconds
    이 설정도 초(second) 단위입니다. 이는 메시지가 큐에 도착한 후 소비자가 메시지를 볼 수 있도록 되기까지 지연되는 시간을 설정합니다. "10"은 메시지가 큐에 도착한 후 10초 동안 대기하게 됨을 의미합니다.

    RedrivePolicy.maxReceiveCount
    이 값은 메시지가 주 큐에서 수신될 수 있는 최대 횟수를 지정합니다. 이 횟수를 초과하면 메시지는 자동적으로 DLQ로 이동합니다. 예를 들어, "maxReceiveCount":"5"라고 설정하면, 메시지가 5회 수신되고 여전히 처리되지 않았다면, 그 이후에는 DLQ로 전송됩니다.

    위 파일을 만들고, 실행권한을 줘야 합니다.
    chmod +x create-sqs-queues.sh

     

    혹시, 삭제하려는 경우, 다음 스크립트를 실행해서 삭제 합니다.

    #!/bin/bash
    
    # AWS 리전 설정
    REGION=$(aws configure get region)
    
    # 큐 이름 정의
    declare -a queues=(
    "dev-order_queue"
    "dev-order_queue_dlq"
    "dev-payment_queue"
    "dev-payment_queue_dlq"
    "stage-order_queue"
    "stage-order_queue_dlq"
    "stage-payment_queue"
    "stage-payment_queue_dlq"
    "prod-order_queue"
    "prod-order_queue_dlq"
    "prod-payment_queue"
    "prod-payment_queue_dlq"
    )
    
    # 큐 삭제
    for queue in "${queues[@]}"
    do
      echo "Deleting $queue..."
      QUEUE_URL=$(aws sqs get-queue-url --queue-name $queue --region $REGION --query 'QueueUrl' --output text)
      if [ ! -z "$QUEUE_URL" ]; then
        aws sqs delete-queue --queue-url $QUEUE_URL
        echo "$queue deleted successfully."
      else
        echo "Failed to delete $queue or queue does not exist."
      fi
    done
    
    echo "All specified queues have been processed for deletion."

    스크립트 사용 방법

    1. 위 스크립트를 .sh 파일로 저장합니다 (예: delete-queues.sh).
    2. 해당 스크립트 파일을 실행할 수 있는 위치로 이동합니다.
    3. 스크립트에 실행 권한을 부여합니다: chmod +x delete-queues.sh
    4. 스크립트를 실행합니다: ./delete-queues.sh

    'AWS' 카테고리의 다른 글

    Amazon SQS 에 대해 알아보자  (0) 2024.04.12

    댓글

Designed by Tistory.