본문 바로가기

Cloud AWS

Amazon AWS :: SNS와 SQS 활용

 

 

 


Amazon AWS :: SNS와 SQS 활용


본자료는 저자의 허락하에 공유되는 자료입니다.

국내 전문 CDN 사업자인 GS네오텍은 2015년에 Amazon Web Service의 AWS Premier Consulting 파트너로서 WiseN 이라는 서비스 브랜드로 클라우드 사업을 함께 하고 있습니다. 


아마존 SNS와 SQS 활용

다루는 내용

  • Auto Scaling 이벤트 발생시 알림 발송을 위해 Simple Notification Service (SNS) 사용하기
  • SNS 알림을 아마존 Simple Queue Service (SQS)에 푸시하기
  • 콘솔에서 아마존 SQS 큐의 내용 확인하기
  • S3에 간단한 웹 사이트를 구축하고, 동적으로 발생하는 데이터를 아마존 DynamoDB에 기록함과 동시에 S3 데이터 업데이트하기

실습


CloudFormation을 사용하여 전체적인 동작 상태를 먼저 이해하고, 구체적인 설정 내용을 살펴보도록 한다.

CloudFormation으로 환경 구성

템플릿 실행

  1. 콘솔에서 EC2 클릭
  2. 왼쪽 메뉴에서 Key Pairs 클릭
  3. Create Key Pair 클릭
    ∙ Key Pair name : ec2_keypair
    Create 클릭
    ∙ ec2_keypair.pem 파일 저장
  4. 콘솔에서 CloudFormation 클릭
  5. Create New Stack 클릭
  6. Select Template 섹션
    Name : dynamic-registration-arang
    Source : Specify an Amazon S3 template URL
     https://us-west-2-aws-training.s3.amazonaws.com/awsu-spl/spl08-dynamic-registrations/spl08-dynamic-registrations.template
    Next 클릭
  7. Specify Parameters 섹션
    KeyName : ec2_keypair
    Next 클릭
  8. Options 섹션
    Key : dynamic-stack
    Value : test
    Next 클릭
  9. Review 섹션
    I acknowledge that this template might cause AWS CloudFormation to create IAM resources. : 체크
    Create 클릭
  10. 스택의 Status가 CREATE_COMPLETE 될 때까지 기다린다.

SQS 큐 메시지 확인

  1. 콘솔에서 SQS 클릭
  2. CloudFormation이 생성한 큐 선택
    ∙ 예: dynamic-registration-arang-ASNotificationsQueue-14XQGUNO2FNYI
  3. Queue Actions 클릭
  4. View/Delete Messages 클릭
  5. Start Polling for Messages 클릭
  6. Stop Now 클릭
  7. Close 클릭

알림을 위해 QueueWatcher 실행

  1. 콘솔에서 CloudFormation 클릭
  2. dynamic-registration-arang 스택 선택
  3. Update Stack 클릭
  4. Select Template 섹션
    Source : Specify an Amazon S3 template URL
     https://us-west-2-aws-training.s3.amazonaws.com/awsu-spl/spl08-dynamic-registrations/spl08-dynamic-registrations.template
    Next 클릭
  5. Specify Parameters 섹션
    QueueWatcherCount : 1
    Next 클릭
  6. Options 섹션
    Next 클릭
  7. Review 섹션
    I acknowledge that this template might cause AWS CloudFormation to create IAM resources. : 체크
    Update 클릭
  8. Outputs 탭 클릭
  9. QueueWatcherOutputURL 키의 Value 복사
    예. https://dynamic-registration-arang-staticsitebucket-f713cuvhenja.s3.amazonaws.com/index.html

이벤트 발생시 Auto Scaling, 아마존 SNS, 아마존 SQS 동작

인스턴스를 수동으로 종료한 경우 Auto Scaling은 다시 새로운 인스턴스를 생성한다. 이 과정이 메시지로 전달되고 결과를 브라우져에서 확인할 수 있다.

  1. 콘솔에서 CloudFormation 클릭
  2. dynamic-registration-arang 스택 선택
  3. Resources 탭 클릭
  4. Logical ID가 ApplicationServerGroup인 리소스의 Physical ID 복사
    예. dynamic-registration-arang-ApplicationServerGroup-1Y0KLF7JQMQK1
  5. 콘솔에서 EC2 클릭
  6. 왼쪽 메뉴에서 Instances 클릭
  7. 복사한 Physical ID로 인스턴스 검색

    App Server Auto Scaling Group이 생성한 인스턴스만 찾아서 보여준다.
  8. 모든 인스턴스 선택
  9. Actions 클릭
  10. Instance StateàTerminate 클릭
  11. Yes, Terminate 클릭
  12. 브라우져에서 확인
    QueueWatcherOutputURL의 Value로 브라우져 접속

CloudFormation에서 자동 설정된 구성 살펴보기

Auto Scaling 생성

  1. Application Server Auto Scaling 그룹과 Queue Watcher Auto Scaling 그룹을 각각 생성
  2. 보안 그룹은 HTTP(80), SSH(22) 허용
  3. Application Server Auto Scaling 기본 인스턴스 : 2
  4. Queue Watcher Auto Scaling 기본 인스턴스 : 1
  5. Application Server Auto Scaling 그룹의 Notifications는 인스턴스 launch나 terminate 이벤트 발생시 SNS로 메시지를 보낸다.

SNS 생성

SQS의 조건 설정에 SNS의 ARN이 필요하므로 SNS 토픽을 우선 생성한다.

  1. 콘솔에서 SNS 클릭
  2. Create New Topic 클릭
  3. Create New Topic 창에서
    Topic Name : sns-arang
    Create Topic 클릭
    Topic ARN : arn:aws:sns:us-west-2:218116754327:sns-arang

SQS 생성

  1. 콘솔에서 SQS 클릭
  2. Create New Queue 클릭
  3. Create New Queue 창에서
    Queue Name : queue-arang
    Create Queue 클릭
  4. Permissions 탭 클릭
  5. Add a Permission 클릭
    Principal : Everybody 체크
    Actions : SendMessage 선택
    Add Conditions (Optional) 클릭
    Condition : ArnEquals 선택
    Key : aws:SourceArn
    Value: arn:aws:sns:us-west-2:218116754327:sns-arang

    Add Permission 클릭
    Yes, Add Condition 클릭
    ∙ ARN 복사 : arn:aws:sqs:us-west-2:218116754327:queue-arang

SNS 설정

  1. 콘솔에서 SNS 클릭
  2. sns-arang 토픽 선택
  3. Create Subscription 클릭
  4. Create Subscription 창에서
    Protocol : Amazon SQS 선택
    Endpoint : SQS의 ARN (arn:aws:sqs:us-west-2:218116754327:queue-arang) 입력

    Subscribe 클릭
    Close 클릭

IAM 설정

  1. IAM User 생성
    ∙ User data에서 필요한 IAM Roles를 계정 생성

DynamoDB 설정

  1. DynamoDB 테이블 생성
  2. InstanceId, ami_id, availability_zone, priv_hostname, priv_ip, pub_hostname, pub_ip, region, terminated 인덱스 키를 가짐

S3 버킷 생성

  1. 버킷에는 웹 서비스를 위한 웹 어플리케이션이 기본 업로드 된다.
  2. index.html은 JSON 형식의 instances.txt 파일을 읽어서 웹 페이지에 보여준다.
  3. QueueWatcherOutputURL의 value는 실질적으로 S3 버킷의 주소이다.

QueueWatcher 인스턴스

  1. /home/ec2-user/as-node-manager.py 파이썬 어플리케이션이 실행된다.
  2. SQS 메시지를 주기적으로 가져온다.
  3. 메시지 내용을 DynamoDB에 기록한다.
  4. instances.txt 파일을 JSON 형식으로 작성하여 S3에 업로드한다.
  5. QueueWatcher 인스턴스의 user data 확인
    ∙ curl http://169.254.169.254/latest/user-data

참고

arang

Sr. Technical Trainer at GSNeotek



  Reference : GS네오텍 WiseN 서비스



www.SalesMore.co.kr