다루는 내용
∙ 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