BLOG

AWS CloudFormation을 사용하여 Amazon SNS 구독 속성 관리하기
작성일: 2018-09-03

Amazon SNS는 분산 시스템 및 마이크로 서비스를 분리 할 수 있는 완벽하게 관리되는 pub /sub 메시징이벤트 기반 컴퓨팅 서비스입니다. 기본적으로 게시자 시스템이 Amazon SNS 주제에 메시지를 게시하면 주제에 가입된 모든 시스템에 메시지 사본이 수신됩니다. Amazon SNS 구독 속성을 사용하면 이 기본 행동을 사용자 정의하고  Amazon SNS를 유스 케이스에 더욱 자연스럽게 맞출 수 있습니다. 사용 가능한 Amazon SNS 구독 속성 세트에는 FilterPolicy, DeliveryPolicyRawMessageDelivery가 포함됩니다.

Amazon SNS 구독 속성은 AWS 관리 콘솔을 통해 직접 관리하거나 AWS 개발 툴 (SDK 및 AWS CLI)를 통해 프로그래밍 방식으로 관리 할 수 ​​있습니다. 이제 AWS CloudFormation 템플릿을 통해 프로비저닝을 자동화할 수 있습니다. AWS CloudFormation을 사용하면 간단한 텍스트 파일을 사용하여 자동화된 보안 방식으로 AWS 리전및 계정의 메시징 유스 케이스 대해 Amazon SNS 리소스를 모델링하고 프로비저닝 할 수 있습니다.

다음 섹션에서는 Amazon SNS 구독을 동시에 만들고 AWS CloudFormation 템플릿을 통해 속성을 설정하는 방법에 대해 설명합니다.

 

FilterPolicy 속성 설정

FilterPolicy 속성은 딜리버리 프로토콜과 상관없이 메시지 필터링의 내용에서 유효하며 구독자가 주제에서 받을 것으로 예상되는 메시지 유형을 정의합니다. 따라서 FilterPolicy 속성을 적용하여 구독자의 메시지 필터링 논리와 게시자의 메시지 라우팅 논리를 오프로드할 수 있습니다.

AWS CloudFormation 템플릿에서 FilterPolicy 속성을 설정하려면 다음 JSON snippet의 구문을 사용하십시오. 이 snippet은 AWS Lambda 함수가 엔드포인트인 Amazon SNS 구독을 만듭니다. 동시에 이 코드는 키가 “pet”이고 속성 값이 “dog”또는 “cat”인 속성을 가진 메시지를 일치시키는 구독 필터 정책도 설정합니다.

{

   “Resources”: {

      “mySubscription”: {

         “Type” : “AWS::SNS::Subscription”,

         “Properties” : {

            “Protocol”: “lambda”,

            “Endpoint”: “arn:aws:lambda:us-east-1:000000000000:function:SavePet”,

            “TopicArn”: “arn:aws:sns:us-east-1:000000000000:PetTopic”,

            “FilterPolicy”: {

               “pet”: [“dog”, “cat”]

            }

         }

      }

   }

}

 

DeliveryPolicy 속성 설정

DeliveryPolicy 속성은 HTTP 엔드 포인트에 대한 메시지 전달의 내용에서 유효하며 딜리버리재시도 (Delivery retry) 정책을 정의합니다. DeliveryPolicy 속성을 적용하여 구독자가 예상하는 최대 재시도 횟수, 각 재시도 간의 시간 지연 및 백 오프 기능을 제어 할 수 있습니다. 구독하는 HTTP 서버에서 처리 할 수 있는 트래픽 볼륨에 따라 이 값을 미세 조정해야 합니다.

AWS CloudFormation 템플릿에서 DeliveryPolicy 속성을 설정하려면 다음 JSON snippet의 구문을 사용하십시오. 이 snippet은 엔드포인트가 HTTP 주소인 Amazon SNS 구독을 만듭니다. 또한 이 코드는 선형 백 오프 기능을 사용하여 이 구독에 대해 10 회 재시도 딜리버리 정책을 설정합니다.

{

   “Resources”: {

      “mySubscription”: {

         “Type” : “AWS::SNS::Subscription”,

         “Properties” : {

            “Protocol”: “https”,

            “Endpoint”: “https://api.myendpoint.ca/pets”,

            “TopicArn”: “arn:aws:sns:us-east-1:000000000000:PetTopic”,

            “DeliveryPolicy”: {

               “healthyRetryPolicy”: {

                  “numRetries”: 10,

                  “minDelayTarget”: 10,

                  “maxDelayTarget”: 30,

                  “numMinDelayRetries”: 3,

                  “numMaxDelayRetries”: 7,

                  “numNoDelayRetries”: 0,

                  “backoffFunction”: “linear”

               }

            }

         }

      }

   }

}

 

RawMessageDelivery 속성 설정

RawMessageDelivery 속성은 Amazon SQS 대기열 및 HTTP 엔드포인트에 대한 메시지 전달 컨텍스트에서 유효합니다. 이 Boolean 속성을 사용하면 구독자가 게시된 모든 메시지를 Amazon SNS 메타 데이터로 꾸미기 위해 기본적으로 생성되는 JSON 형식을 처리 할 필요가 없습니다. RawMessageDelivery를 true로 설정하면 두 가지 결과가 나타납니다. 먼저 메시지가 메타 데이터가 추가되지 않은 상태로 제공됩니다. 둘째, 가입 엔드 포인트가 Amazon SQS 대기열일 때 메시지 속성이 Amazon SNS에서 Amazon SQS로 전파됩니다.

AWS CloudFormation 템플릿에서 RawMessageDelivery 속성을 설정하려면 다음 JSON snippet의 구문을 사용하십시오. 이 snippet은 엔드 포인트가 Amazon SQS 대기열인 Amazon SNS 가입을 생성합니다. 이 코드는 구독에 대한 원시 메시지 전달을 가능하게 하여 Amazon SNS 메타 데이터가 메시지 페이로드에 추가되는 것을 방지합니다.

{

   “Resources”: {

      “mySubscription”: {

         “Type” : “AWS::SNS::Subscription”,

         “Properties” : {

            “Protocol”: “sqs”,

            “Endpoint”: “arn:aws:sqs:us-east-1:000000000000:PetQueue”,

            “TopicArn”: “arn:aws:sns:us-east-1:000000000000:PetTopic”,

            “RawMessageDelivery”: “true”

         }

      }

   }

}

 

유스케이스에 구독 속성 적용하기

모든 것이 완벽히 이루어지는 것은 다음 절차를 따릅니다. 다음 예는 Amazon EC2 인스턴스에서 호스팅되는 다음 분산 시스템으로 작동하는 자동차 판매 회사를 기반으로 합니다.

  • Car-Dealer-System – 자동차 구매자가 주문한 프론트 오피스 시스템
  • ERP 시스템 – 재무, 회계, 인적 자원 및 관련 비즈니스 활동을 관리하는 백 오피스 시스템 인 ERP (Enterprise Resource Planning)
  • CRM 시스템 – 고객 관계 관리, 자동차 구매자의 프로파일 정보 저장 및 영업 워크 플로 실행을 담당하는 백 오피스 시스템
  • SCM 시스템 – 공급망 관리, 재고 추적 및 수요 예측 및 계획을 관리하는 백 오피스 시스템

 

 

 

주문이 자동차 딜러 시스템에 배치 될 때 마다 이 이벤트는 이 유형의 이벤트에 관심이 있는 모든 백 오피스 시스템에 방송됩니다. 위의 다이어그램에서 볼 수 있듯이 회사는 AWS Messaging 서비스를 사용하여 분산 시스템을 분리하여 아키텍처의 확장성과 유지 관리성을 향상시켰습니다. 사용된 대기열 및 주제는 다음과 같습니다.

  • Car-Sales – 자동차 판매 업체 시스템에서 메시지를 받는 Amazon SNS 주제입니다. 자동차 구매자가 주문한 모든 주문은 이 주제에 게시된 다음 구독자 (Amazon SQS 대기열 2 개와 HTTP 엔드포인트 1 개)로 전달됩니다.
  • ERP 통합 – 자동차 판매 업체 시스템에서 발주한 주문을 ERP 시스템에 공급하는 Amazon SQS 대기열입니다. ERP는 수익을 추적하고 관련 회계 프로세스를 트리거하기 위해이 대기열에서 메시지를 가져옵니다.
  • CRM 통합 – 자동차 판매 업체 시스템에서 발주한 주문을 사용하여 CRM 시스템에 공급하는 Amazon SQS 대기열입니다. CRM은이 대기열에서 메시지를 가져와 자동차 구매자의 관심사를 추적하고 영업 워크플로를 업데이트합니다.

이 회사는 다음과 같은 세 가지 Amazon SNS 구독을 설정하였습니다.

  • 첫 번째 구독은 ERP 통합 대기열을 참조합니다. 이 구독에는 RawMessageDelivery 속성이 true로 설정되어 있습니다. 따라서 메시지 페이로드에 메타 데이터가 추가되지 않고 메시지 속성이 Amazon SNS에서 Amazon SQS로 전달됩니다.
  • 두 번째 구독은 CRM 통합 대기열을 참조합니다. 첫 번째 가입과 마찬가지로 RawMessageDelivery 속성도 true로 설정되어 있습니다. 또한 FilterPolicy 속성이 { “buyer-class”: [ “vip”]}로 설정되어 있습니다. 이 정책은 VIP 구매자가 발주한 주문만 CRM 시스템에서 관리되고 다른 구매자의 주문은 필터링되지 않도록 정의합니다.
  • 세 번째 구독은 SCM 시스템을 제공하는 HTTP 엔드포인트를 가리킵니다. ERP 및 CRM과 달리 SCM 시스템은 자체 HTTP API를 제공합니다. 따라서 HTTP 엔드포인트는 중간에 대기열없이 항목에 직접 가입했습니다. 이 구독에는 지수 백오프기능을 사용하여 재시도 횟수를 20으로 제한하는 DeliveryPolicy가 있습니다.

하지만 회사는 이러한 리소스를 모두 수동으로 만들지 않았습니다. 이들은 이 인프라를 버전 관리가 가능한 코드로 전환하고 이러한 인프라를 자동화된 방식으로 신속하게 가동 및 해체할 수 있는 기능을 원했습니다. 따라서 Amazon SNS 주제, Amazon SNS 구독, Amazon SNS 구독속성 및 Amazon SQS 대기열과 같은 AWS 메시징 리소스를 관리하기 위해 AWS CloudFormation 템플릿을 만들었습니다.

 

AWS CloudFormation 템플릿 실행하기

이제 이 AWS CloudFormation 템플릿을 직접 실행할 준비가되었습니다. AWS 계정에서 이 아키텍처를 bootstrap 하기 위해서는 다음을 수행하십시오.

  1. 리포지토리에서 샘플 AWS CloudFormation 템플릿을 다운로드하십시오.
  2. AWS CloudFormation 콘솔로 이동하십시오.
  3. 스택 생성을 선택하십시오.
  4. 템플릿 선택에서 템플릿에 Amazon S3로 업로드하도록 선택하고 Browse를 선택하십시오.
  5. 다운로드한 템플릿을 선택하고 다음을 선택하십시오.
  6. 세부 사항 지정 :
  • 다음 스택 이름을 입력하십시오 : Car-Dealer-Stack.
  • 주제에 등록 할 HTTP 엔드 포인트를 입력하십시오. HTTP 엔드 포인트가 없으면 임시 엔드 포인트를 작성하십시오.
  • 다음을 선택하십시오.

7. 옵션에서 다음을 선택하십시오.

8. 리뷰를 위해 생성을 선택하십시오.

9. 스택 생성 프로세스가 완료 될 때까지 기다리십시오.

 

이제 모든 인프라가 갖추어 졌으므로 다음과 같이 AWS CloudFormation 템플릿에서 설정한 Amazon SNS 구독 속성을 확인하십시오.

  1. Amazon SNS 콘솔로 이동하십시오.
  2. 주제를 선택한 다음 Car-Sales (자동차 판매)와 관련된 RNA를 선택하십시오.
  3. 첫 번째 구독 확인 :
  • ERP 통합 (Amazon SQS 프로토콜)과 관련된 구독을 선택하십시오.
  • 기타 구독 작업을 선택한 다음 구독 속성 편집을 선택하십시오.
  • 원시 메시지 전달이 활성화되어 있고 취소를 선택하면 되돌아갑니다.
  1. 두 번째 구독 확인 :
  • CRM 통합 (Amazon SQS 프로토콜)과 관련된 구독을 선택하십시오.
  • 기타 구독 작업을 선택한 다음 구독 속성 편집을 선택하십시오.
  • 원시 메시지 전달이 사용 가능한지 확인한 다음 취소를 선택하면 되돌아갑니다.
  • 기타 구독 작업을 선택한 다음 구독 필터 정책 편집을 선택하십시오.
  • 필터 정책이 설정되고 취소를 선택하여 되돌아갑니다.

5. 세 번째 구독을 확인하십시오.

6. 세 번째 구독 확인 :

  • SCM 시스템 (HTTP 프로토콜)과 관련된 구독을 선택하십시오.
  • 기타 구독 작업을 선택하고 구독 전송 정책 편집을 선택하십시오.
  • 고급보기를 선택하십시오.
  • 지수 전달 재시도 정책이 설정된 다음 취소를 선택하여 되돌아갑니다.

 

모든 구독 속성을 확인했으므로 다음과 같이 AWS CloudFormation 스택을 삭제할 수 있습니다.

  1. AWS CloudFormation 콘솔로 이동하십시오.
  2. 스택 목록에서 Car-Dealer-Stack을 선택합니다.
  3. 작업 선택, 스택 삭제를 선택한 다음 네 삭제를 선택하십시오.
  4. 스택 삭제 프로세스가 완료 될 때까지 기다리십시오.

이제 다 끝났습니다. 이 연습에서 작성한 Amazon SNS 및 Amazon SQS 리소스를 모두 AWS 계정에서 삭제했습니다.

 

요약

AWS CloudFormation 템플릿을 사용하면 Amazon SNS 구독 및 해당 속성 (예 : FilterPolicy, DeliveryPolicy 및 RawMessageDelivery)을 자동으로 안전하게 생성 할 수 있습니다. Amazon SNS 구독 속성에 대한 AWS CloudFormation 지원은 현재 모든 AWS 리전에서 사용할 수 있습니다.

가격에 대한 자세한 내용은 AWS CloudFormation 가격 책정을 참조하십시오. AWS CloudFormation 템플릿을 통해 Amazon SNS 리소스를 설정하는 방법에 대한 자세한 내용은 다음을 참조하십시오.

 

원문 URL: https://aws.amazon.com/ko/blogs/compute/managing-amazon-sns-subscription-attributes-with-aws-cloudformation/

** 메가존클라우드 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.